はじめに
もう13年も前になる記事がふと目に入って、今だったらどう解くかな?とやってみました。
検証環境
1
2
3
4
5
| $ 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)
|
問題
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| (難易度 超簡単, 目標時間 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
1
2
3
4
| L=ABCDEFGHIJKLMNOPQRSTUVWXYZ
echo "$1" \
| tr "${L}" "$(echo "${L}" | sed -E "s/^(.*)(.{${2}})$/\2\1/")"
|
実行
1
2
3
4
5
6
7
8
9
10
11
| $ ./main.sh "VQREQFGT" 2
TOPCODER
$ ./main.sh "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 10
QRSTUVWXYZABCDEFGHIJKLMNOP
$ ./main.sh "TOPCODER" 0
TOPCODER
$ ./main.sh "LIPPSASVPH" 4
HELLOWORLD
|
ひとこと
日々コーディングを横着しているから、だんだんシェルしかかけない頭になってきている気がしています。
老害にならないように努力したい。