第一回 やらしのやさしいシェル芸勉強会 – 数字遊び –

シェル芸勉強会
この記事は約6分で読めます。

このページの目的

たまに参加するシェル芸勉強会のレベルが高すぎて、素人は結構厳しい物があるなぁと思ったので、ちょっと調べればギリギリ答えれられるかなぐらいの問題を自作してみました。

一応回答例を最後に載せていますが、もっとよい回答作れた!!等あればバシバシください。

解説は気が向いたら追記します

対象者

・ターミナルは開けるけどbashとかはよくわかない
・shellの勉強をしたいけど何から勉強したら良いかわからない
・シェル芸勉強回に参加したい

問題

shell(ターミナル)上で下記の問題を解いてください。
回答は白色で書いてありますので、全選択等でみてください。
また、回答のダブルクオート/シングルクオート/バッククオートが”等になってしまっているので、実行する際には置換してください。

– 例題 –

問題

1を出力してください

回答例

echo 1

連続した数字を出力

問題

1 ~ 100までの数字を横一列に出力してください

出力例)
1 2 3 4 …. 100

回答例

echo {1..100}
seq -s ” ” 100

縦一列に連続した数字を出力

問題

1~100までの数字を縦一列に出力してください

出力例)
1
2
3

100

回答例

echo {1..100} | xargs -n1
seq 100

減っていく連続した数字を出力

問題

1~100を逆順に出力してください

出力例)
100
99

1

回答例

echo {100..1} | xargs -n1
echo {1..100} | xargs -n1 | tac
seq 100 -1 1

数列を改行する

問題

1~100までの数字を10ずつ改行してください

出力例)
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 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100

回答例

echo {1..100} | sort -R | xargs -n10
for n in `seq 100`; do [ $(( n % 10 )) == 0 ] && echo $n || echo $n | tr “\n” ” “; done

数列をシャッフル

問題

重複なしのランダムな10*10の数列を出力してください

出力例)
83 45 91 49 17 11 27 96 18 98
32 64 10 77 19 44 57 42 30 62
24 22 35 58 28 66 92 7 15 68
16 33 75 34 74 79 85 36 12 65
2 23 14 87 43 73 80 41 70 90
88 84 8 52 71 13 46 86 60 99
93 3 20 100 51 9 53 29 67 37
31 6 69 21 78 26 40 56 97 1
47 89 55 59 39 72 61 94 5 63
25 48 50 76 38 82 4 54 95 81

回答例

seq 100 | shuf | xargs -n10
echo {1..100} | xargs -n1 | sort -R | xargs -n10
echo {1..100} | xargs -n1 | shuf | xargs -n10
arr=(shuf -i 1-100); for ((i=1; i<${#arr[@]}; i++)); do [ $(( i % 10 )) == 0 ] && echo ${arr[i]} || echo ${arr[i]} | tr “\n” ” “; done; echo “”

上下の反転

問題

問題4を数字はそのままで上下を反転してください

出力例)
91 92 93 94 95 96 97 98 99 100
81 82 83 84 85 86 87 88 89 90
71 72 73 74 75 76 77 78 79 80
61 62 63 64 65 66 67 68 69 70
51 52 53 54 55 56 57 58 59 60
41 42 43 44 45 46 47 48 49 50
31 32 33 34 35 36 37 38 39 40
21 22 23 24 25 26 27 28 29 30
11 12 13 14 15 16 17 18 19 20
1 2 3 4 5 6 7 8 9 10

回答例

echo {1..100} | xargs -n10 | tac

左右の反転

問題

問題4の出力を数字はそのままで左右を反転
出力例)
10 9 8 7 6 5 4 3 2 1
20 19 18 17 16 15 14 13 12 11
30 29 28 27 26 25 24 23 22 21
40 39 38 37 36 35 34 33 32 31
50 49 48 47 46 45 44 43 42 41
60 59 58 57 56 55 54 53 52 51
70 69 68 67 66 65 64 63 62 61
80 79 78 77 76 75 74 73 72 71
90 89 88 87 86 85 84 83 82 81
100 99 98 97 96 95 94 93 92 91

回答例

echo {1..100} | xargs -n10 | rev | xargs -n1 | rev | xargs -n10

右に90度回す

問題

問題4を数字はそのままで90度回転
出力例)
91 81 71 61 51 41 31 21 11 1
92 82 72 62 52 42 32 22 12 2
93 83 73 63 53 43 33 23 13 3
94 84 74 64 54 44 34 24 14 4
95 85 75 65 55 45 35 25 15 5
96 86 76 66 56 46 36 26 16 6
97 87 77 67 57 47 37 27 17 7
98 88 78 68 58 48 38 28 18 8
99 89 79 69 59 49 39 29 19 9
100 90 80 70 60 50 40 30 20 10

回答例

echo {1..100} | xargs -n10 | awk ‘START{a} {for(i=1;i<=10;i++){a[NF-i]=$(i)” “a[NF-i]}} END {for(j=10;j>=0;j–){print(a[j])}}’

コメント