jus共催 第43回大暴れシェル芸勉強会 に参加してきました!
usptomo.doorkeeper.jp
この記事は、その答案等をメモしたものです。
午前の部
今回は午前は無しです。ネタ切れという噂。
次回はnodeシェル芸の解説会になるかも、という話もあります。
午後の部
毎回恒例、出された問題を解く
これまではMacの標準のbashや、普通のUbuntuで参加していましたが、今回はシェル芸botのDockerイメージで臨みました。
github.com
新し目*1のdockerが入っている環境ならば docker run -it theoldmoon0602/shellgeibot:latest bash
とか、こんな感じのコマンドを叩く(+そこそこの容量のダウンロード)だけで動かせて、みんなが慣れ親しんでいる各種コマンド群がインストールされた状態で使えますので、とても便利です。メンテナの皆さんに感謝🙏
今回の問題はこちら
Q1
こう回答しました。そこそこのスピードで書けたかな。
echo あいうえお | grep -o . | nl | awk '{for(i=0;i<$1;i++){print $2}}' | tr -d "\n"
Q2
敢えてawkを使わずに解こうとした結果、時間内には解ききれず。でも、最終的に答案はこうなりました。
echo {1..10},{1..10},{1..10} | tr ' ' "\n" | sed 's/\(.*\),\(.*\),\(.*\)/echo -n \1個 \2個 \3個; echo "\1*11+\2*21+\3*54" | bc/' | bash | grep 223 | sed 's/223//'
Q3
bcコマンドの基数変換の機能を使いました。
echo 192.168.10.55 | tr '.' '\n' | sed 's/\(.*\)/echo -n "00000000"; echo "obase=2;\1" | bc/' | bash | sed 's/.*\(........\)$/\1/' | tr -d '\n'
勉強会で ipcalc
というIPアドレス演算用のコマンドがあることを知り、便利そうだなと思いました。さっそくシェル芸botに組み入れられるあたり、さすがです。
Q4
双子素数の問題。awkに直前の行を覚えておいてもらうという方法を取りました。素数列挙を2プロセスで回すという方式も面白そうですね。
seq 1000 | factor | grep '^.*: [0-9]*$' | sed 's/:.*//' | awk 'BEGIN{p=-1}{if(p+2==$1){print p,$1}p=$1}'
Q5
こう回答しましたが、これは誤答です🙅♀️
echo {0..4},{0..4},{0..4},{0..4} | tr ' ' \\n | tr , ' ' | awk '($1+$2+$3+$4==10){print $0}' | sed -e 's/0//g' -e 's/ / /g' -e 's/^ //' | sort | uniq | tr '\n' '|'
最後のtrは、シェル芸botで実行された際の出力行数抑制のための思いやりです。
さて、これだと、同じ数字を複数回使っているものを検出することができません。正答例では grep -Ev '(.).*\1
が使われています。これなら効率的に重複文字をはじくことができます。さすがです。
Q6
😵
Q7
SVGを描いてそれを変換させる方向で頑張ろうとしましたが、どうもシェル芸botに入っているImageMagickではSVGの入力を受け付けていないような気がします。時間が無くて詳細の調査をできてないのですが、原因等がわかれば(または再現範囲が明確になれば)報告しようと思います。
ちなみに、回答時間中に作ったSVG市松模様が、こちら。
SVGなら、この程度のコード量で市松模様を作れます。
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"> <pattern x="0" y="0" width="2" height="2" id="p" patternUnits="userSpaceOnUse"> <rect width="1" height="1"/> <rect x="1" y="1" width="1" height="1"/> </pattern> <rect width="100" height="100" fill="url(#p)"/> </svg>
Q8
😵
Q9
😵
午後の部を総じて
3問回答、という結果でした。次も頑張ろう〜
懇親会(LT大会)
VUIでシェル芸を実行できるようにしてみた - Speaker Deck
実際にAlexaさんに向かって呪文を詠唱している様子を見て腹筋崩壊ww
他にも魅力的なものが多くありました!