「第43回シェル芸勉強会」の解答例(解説なし)


A1:

$ echo あいうえお | grep -o . | perl -nlE 's/^(.*)/$1x$./e;say $_' | sed -rz 's/\n//g;s/$/\n/'
あいいうううええええおおおおお

A2:

$ echo 11_{1..20}_21_{1..10}_54_{1..4} | xargs -n1 | awk -F_ '$1*$2+$3*$4+$5*$6==223{printf "うまい棒: %d個/チロルチョコ: %d個/よっちゃんイカ: %d個\n",$2,$4,$6}'
うまい棒: 2個/チロルチョコ: 7個/よっちゃんイカ: 1個

A3-1:

$ echo 192.168.10.55 | perl -nlE 's/(\d+)/printf "%08b",$1/eg;say ""'
11000000101010000000101000110111

A3-2:

$ echo 11000000101010000000101000110111 | perl -nlE 's/(.{8})/say oct("0b".$1)/eg' | sed -z 's/\n/./g;s/\.$/\n/'
192.168.10.55

A4:

$ seq inf | factor | awk 'NF==2{print $2+2}' | factor | awk 'NF==2{print $2-2,$2}'
3 5
5 7
11 13
17 19
29 31
41 43
59 61
71 73
101 103
107 109
(...略...)

A5:

$ seq 19 4321 | grep -v 0 | grep -Pv '(.).*\1' | sed 's/./& /g;s/ $//' | awk '{sum=0;for(i=1;i<=NF;i++){sum+=$i};if(sum==10){print}}'
1 9
2 8
3 7
4 6
6 4
7 3
8 2
9 1
1 2 7
1 3 6
(...略...)
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 1
4 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1

A6:

$ for c in {1..8} ; do cut -c${c}- nums | grep -no -f <(seq 19 4321 | grep -v 0 | grep -Pv '(.).*\1' | sed 's/./& /g;s/ $//' | awk '{sum=0;for(i=1;i<=NF;i++){sum+=$i};if(sum==10){print}}' | tr -d ' ') ; done | sort -u
1:235
1:4123
1:541
2:3214
3:1324
3:352
3:523
4:145
5:325

A7:

$ perl -E 'say "P1\n100 100";for(1..100){if($_%2){say "1 0 "x50}else{say "0 1 "x50}}' | convert pbm:- bmp:A7.bmp

A7のワンライナーの出力

A8:

$ # 文字列の仕込み
$ str=$(echo ':(){ :|:& };:' | xxd -p | tr -d '\n') ; echo "$((${#str}/2))バイトの文字列を仕込みました" ; cat <(xxd -p check.bmp | tr -d '\n' | rev | cut -c$((${#str}+1))- | rev) <(echo $str) | xxd -p -r > A8.bmp
14バイトの文字列を仕込みました
$ # 文字列の抽出
$ tail -c14 A8.bmp
:(){ :|:& };:

A8のワンライナーの出力

A9:

$ # PNG形式に変換
$ convert A8.bmp ppm:- | convert ppm:- A9.png
$ # BMP形式に復元
$ convert A9.png ppm:- | convert ppm:- A9.bmp
$ # 文字列の抽出
$ tail -c14 A9.bmp
:(){ :|:& };:

A9のワンライナーの出力(PNG形式)(PNG形式に変換)
A9のワンライナーの出力(BMP形式)(BMP形式に復元)

Written on October 20, 2019