13年前の投稿で解いたプログラミング問題をシェルで解いてみる

Bash

はじめに

もう13年も前になる記事がふと目に入って、今だったらどう解くかな?とやってみました。

検証環境

$ uname -moi
x86_64 MacBookPro16,1 Darwin

$ bash -version | head -n 1
GNU bash, バージョン 5.1.16(1)-release (x86_64-apple-darwin21.1.0)

問題

(難易度 超簡単, 目標時間 10分以内)
与えられた英語の大文字で構成された文字列の中の文字を、与えられた数字の分だけ左にシフトさせなさい。たとえば、’C’を2つ左にシフトさせると’A’、’Z’を2つ左にシフトさせると’X’。
与えられる英語の文字列はAからZで、Aの次はZにシフトさせるものとする。

例1)

"VQREQFGT"
2
Returns: "TOPCODER"

例2)

"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
10
Returns: "QRSTUVWXYZABCDEFGHIJKLMNOP"

例3)

"TOPCODER"
0
Returns: "TOPCODER"

例4)

"LIPPSASVPH"
4
Returns: "HELLOWORLD"

解答

シェルで解いてみました。

main.sh

L=ABCDEFGHIJKLMNOPQRSTUVWXYZ

echo "$1" \
  | tr "${L}" "$(echo "${L}" | sed -E "s/^(.*)(.{${2}})$/\2\1/")"

実行

$ ./main.sh "VQREQFGT" 2
TOPCODER

$ ./main.sh "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 10
QRSTUVWXYZABCDEFGHIJKLMNOP

$ ./main.sh "TOPCODER" 0
TOPCODER

$ ./main.sh "LIPPSASVPH" 4
HELLOWORLD

ひとこと

日々コーディングを横着しているから、だんだんシェルしかかけない頭になってきている気がしています。

老害にならないように努力したい。

Bash