タイトルのとおり「jus共催 第47回引きこもりシェル芸勉強会」にリモートから参加した記録です。 いままでは勉強会参加の話などあんまり書いていなかったけど、他の人たちを真似てやってみようかなと……
いつもは大阪のサテライト会場から参加しているのですが、今回のシェル芸勉強会は外出自粛要請の影響もありリモートでの開催でした。
勉強会の様子…Live配信されたYouTubeのリンクはこちらです。
一応、初心者ということもあり始まる前にちゃんと挨拶とかしておきました。
楽しみにしていたリモートで初参加のシェル芸勉強会!
— taka@SIではたらくフレンズ (@amanoese) 2020年4月25日
ふつつか者ですがみなさんよろしくお願い致します!#シェル芸
問題と解答
ここにのっています。
自分の解答とか模範解答とか感想とか
はい。とりあえず自分が解いた解答か良さそうな模範解答ぽいものを載せていきます。
Q1
cat *a/*47/nums|sed -r 's/([0-9]+)-([0-9]+)/{\1..\2}/g'|xargs -i bash -c 'echo {}'#シェル芸
— taka@SIではたらくフレンズ (@amanoese) 2020年4月25日
Q1は最初ということもあり簡単でした。
Q2
これは無理やり解いた感が大きいです。
綺麗な解答は下記みたいですシンプルで良いですね。
実はgrepだけで解けるのは驚きです。
cat upopopi|grep '^....$'|grep ウ|grep 'ポ.*ポ'|grep イ#シェル芸
— hichon (@hichon) 2020年4月25日
Q3
vimでアレコレしてましたが模範解答が出るまでには解けませんでした。
Q3: 解けたかも
— くんすと (@kunst1080) 2020年4月25日
cat S*/*47/noguruguru | sed 's/┏━/1/g' | sort | sed 's/1/┏━/g'
#シェル芸
コレで並ぶんですかうーん。
Q4
これは最近Atcoderをやった影響か、なんとなく決め打ち二分探索で解きたくなってしまって遅くなってしまいました。
しかも 素数を求めるところで NF==2
と書くべきところを NF=2
と書いて時間を食ってしまったり……
素直な解答がシンプルで良いですね。
解答例
$ seq inf | factor | awk 'NF==2{print $2}' | xargs | awk '{for(i=1;;i++){for(j=i;j<i+9;j++)printf $j" ";print ""}}' | awk '{print $1+$2+$3+$4+$5+$6+$7+$8+$9}' | grep -m 1 ^479
https://b.ueda.tech/?post=20200425_shellgei_47#q4 より
Q5
空白文字苦手なんですよね。。。解けませんでした。。。
Q6
ほんとうは/usr/share/unicode/emoji/emoji-test.txtにあるファイルを利用するのですが、自分のUbuntuには入ってなかったので仕方なく絵文字のユニコードの範囲で生成。
seq $((16#1F400)) $((16#1FA95))|sed '1s/^/obase=16;/'|bc|xargs -L1 -i bash -c 'echo -e "\U{}"'|tr -d \\n #シェル芸
— taka@SIではたらくフレンズ (@amanoese) 2020年4月25日
じつはこのコード勉強会当日に考えたものではなく昔のコードをTwitterで探して書き換えただけだったりする。
seq $((16#13000)) $((16#1342E))|sed '1s/^/obase=16;/'|bc|xargs -L1 -i bash -c 'echo -e "\U{}"'|shuf -n100|tr -d \\n#シェル芸
— taka@SIではたらくフレンズ (@amanoese) 2020年1月8日
出力結果は下記みたいな感じです。
𓀗𓇈𓇼𓅺𓅃𓁩𓌴𓉌𓋛𓅧𓇦𓍃𓏲𓋔𓌢𓇞𓇰𓂹𓉚𓎟𓋵𓉼𓃻𓂧𓂥𓎽𓂯𓎄𓎢𓍉𓃞𓀉𓂾𓀕𓅕𓎜𓏸𓉢𓈗𓄷𓉓𓈁𓆛𓎂𓀣𓐥𓀯𓄽𓄨𓁜𓅤𓋭𓌍𓉭𓎧𓏽𓈒𓁎𓉿𓅜𓍡𓄴𓁆𓉏𓀞𓉄𓉉𓀴𓍺𓂫𓈿𓇜𓆄𓅪𓈢𓌌𓋂𓂇𓏢𓌟𓇷𓏋𓌝𓂊𓎬𓅒𓄯𓊫𓆰𓂤𓋀𓂚𓇁𓎰𓌋𓍶𓇲𓁃𓅋𓎾
たしか今年のはじめに遊戯王のアニメみたのと暗号解読の本を(ヒエログリフと暗号の関係の話)読んだので興奮して、ヒエログリフを表示したくて書いた気がするけど、まさか役に立つ日が来るとはねぇ……
Q7
なんか頑張ってたけどこれユニコード正規化の話だから多分コマンドあるやろ…と思って調べたらuninameというコマンドを見つけてしまった。
日本語情報が乗っているサイト少なかったので綺麗に説明しているサイト探して共有した記憶。
うーん。
さらに次郎さんがQ8のときに出してくれた情報が良さそうでした。
echo úńķô|uniname -bcegpu
— 闇ときどき豚 (@yami_buta) 2020年4月25日
↑これで name だけになる #シェル芸
これを参考にすると模範解答はこんなかんじでしょうか?
$ cat spaces|uniname -bcegpu|sed 1d|sort|uniq -c 1 EM SPACE 4 EN SPACE 2 FIGURE SPACE 2 FOUR-PER-EM SPACE 6 HAIR SPACE 6 IDEOGRAPHIC SPACE 8 LINE FEED (LF) 4 PUNCTUATION SPACE 21 SPACE 1 THREE-PER-EM SPACE 1 ZERO WIDTH SPACE
あと後日調べてたら知ったけどuconvでもできるのでuniname実は要らないかもしれないとか。言えない。。。
$ cat spaces|uconv -x any-name|egrep -o '{[^}]+'|cut -c 4-|sort|uniq -c 8 <control-000A> 1 EM SPACE 4 EN SPACE 2 FIGURE SPACE 2 FOUR-PER-EM SPACE 6 HAIR SPACE 6 IDEOGRAPHIC SPACE 4 PUNCTUATION SPACE 21 SPACE 1 THREE-PER-EM SPACE 1 ZERO WIDTH SPACE
uconvは-x any-name を指定することでユニコードの名前を出してくれます。 調べたところによるとuconvはIPA(International Phonetic Alphabet)やX-SAMPAとかの表示形式にも対応してるっぽいし、どっかで記事書くかなぁ
Q8
uninameを見つけたことでTLは盛り上がっていました。 さてしかし…実はこの問題に関しては2個解答を出せたのですが、ユニコード正規化を利用した下記の解答のほうが好きだったりします。
echo úńķô|uconv -x any-nfd|grep -o [a-z]|tr -d \\n#シェル芸
— taka@SIではたらくフレンズ (@amanoese) 2020年4月25日
後日シンプルな解答が出てました。
#シェル芸 Q8
— n4kdoe (@n4kdoe) 2020年4月27日
echo úńķô | uconv -x Ascii
uconv素晴らしいですね。
全体通して
全8問中6問解けた感じでしょうか?今回は割と調子が良かった気がします。
反省点としてはuninameを紹介してしまったので、uconvで全部できたよとは強く言えないところでしょうか。まあTwitterで言いましたが。
個人的にはuconv推しです。
LTとか
ぐれさんが素晴らしいLTをしてくださっていました。 うーん。Linuxつよいひとつよいなぁ。
セキュリティや脆弱性のはなしなためか、資料は一旦非公開らしいです。 そのうち再公開されたら追記します。
感想とかまとめとか
リモートだと会場(各自宅)の雰囲気がつかめないため、少し新鮮な感じでした。 後日YouTubeで配信できる申請とかしたので、次回はLTしたいなぁ。
最後に勉強会を開いてくださった皆様ありがとうございました。