13年前の投稿で解いたプログラミング問題をシェルで解いてみる
はじめに
もう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
ひとこと
日々コーディングを横着しているから、だんだんシェルしかかけない頭になってきている気がしています。
老害にならないように努力したい。
ディスカッション
コメント一覧
まだ、コメントがありません