たいちょーの雑記

ぼくが3日に一度くらい雑記をかくところ

第36回シェル芸勉強会@限界キャンパスサテライトを開催した

この限界のはてに、まだ救いがあると思っている

お前が生まれたこの世界は、お前を救ってくれるとまだ信じている

なんかこんな感じのことをメタルギアで聞いた気がする。

震源+大雨=限界

弊キャンパスは直近の地震震源の真上ぐらいにあったところです。ここにこの間の大雨を合わせるとまさに限界!という感じです

大阪サテライトがこの雨の影響で中止となってしまったため、家に変えることも出来ないぼくはこの限界キャンパスで勝手にサテライトを開催することにしました。

あーたのしい

午前の部

鳥海さんによる文字コードの講義が始まりました。難読化クラスタとしては何かネタが転がっているかもしれないとワクワクしていました。

まずはlocaleiconvのような文字コードなどに関わってきそうなコマンドについてでした。
ずっと「ja_JP.utf8ってなんやねん冗長やなオイ」って思ってたんですが、どういう意味なのか解ることが出来てよかったです。

そのあと基数変換の話題ではbash$((2#bbbb))というパターンで変換できると知り驚きました。これすごい便利

いよいよ文字コードっぽいところに来た時、続きは次回ですとなっりました。えっ次回も参加するしか無い

昼休憩

昼休憩の間に限界サテライトからLTの配信が出来ないかどうか試していました。手伝ってくれた方々ありがとうございました。

限界サテライト側の機材不足で、音声がクリアに拾えないという問題があったため、結局配信は無しということになりました。悔しい・・・

昼飯を食ったあとは完全に体力の限界という感じでした。でも家に帰る手段も無いのでこのまま午後も見ることにしました。あとこれは秘密ですが、気づいたらメイド服を着ていました。

午後の部

とっても楽しい問題の始まりです。今回は時間内に解けた問題が全然ありませんでした。チクショー

因みに問題と解答はここです

問1

welcome.txtというファイルに仕込まれたバイナリを解析して、AAを見つける問題。いきなりヘビー過ぎて泣いた。とりあえずxxdしてみると不思議な模様があったので目を細めて見てみると0x00が紛れていたので、sedしてみました

するとめちゃめちゃなAAが出てきたので、適当にターミナルの横幅を動かしてみると70ぐらいだと解りました

cat welcome.txt | sed 's/\x00/@/g' | fold -70

因みに幅が70だったのは、toiletコマンドの出力の幅が70だったからだそうです。なるほどな〜〜〜〜

問2

フォーマットがめちゃくちゃなファイル名を揃える問題。こういうのはよくありそうだし、できると最高かもしれないですね

これはゴリゴリやればいいなとおもったので、ゴリゴリ。

ls -1|nkf -Z|sed 's/[0-9]/& /g;s/[aA-Z]/ & /g'|sed -r 's/^([0-9]).*([aA-Z])[^組]/\1年\U\2組/g'|sed 's/組組/組/g'|paste <(ls -1) - | xargs -n2 echo "mv" | bash

まずsedで年次と組を分離し、その後またsedしました。ちょっと冗長ですねこれ

因みに、ぼくは全角英数と半角英数が混ざっていると死にます。

問3

2018年の日付のうち2,3,5,7が4つ含まれる日付を列挙する問題。 例えば2018/07/23と言った感じ。
4つあるかどうかgreptrで削ったあとawklengthを見ればいいなと思っていたんですが、日付の列挙がうまく出来なかった・・・

時間内には解けなかったんですが、dateutils.dseqというコマンドがあるよということだったのでそれを使って解いてみました。

dateutils.dseq 2018-01-01 2018-12-31|sed -E 's/[^2357]//g'| paste - <(dateutils.dseq 2018-01-01 2018-12-31)|awk 'length($1)==4{print $2}'

pasteを使えるようになってから、よく使うようになりました。とっても便利ですよねこのコマンド

問4

tanzakuファイルをcatすると・・・

$ cat tanzaku
┏ ーー-┷-ーー┓
┃       ┃
┃       ┃
┃       ┃
┃       ┃
┃       ┃
┃       ┃
┃       ┃
┗ーーーーーー┛

このように表示されるのでこの中に俳句を入れる問題。ゴリゴリでいけそう

字余りするところは全角スペースで埋めてtetayoko。そのあとはsedの後方参照をつかってそれーという感じ。見た目ほど難しくなかった

問5

cowsayコマンドの出力を右向きにする。ただし文章はひっくり返しちゃダメ。
見た瞬間うっとなるのは響け!ユーフォニアム問題に似たものを感じる。

これは最初にrevしたあとsedで行を選択して末尾にスペースを埋め込んでいく戦法を考えました。でもあんまりよくないし何よりもめんどくさいので脳を休めてた。

問6

seq 20のうち素数である番号を○で囲む問題。

1
②
③
468
9
101214
15
161820

こういう感じですね。午前でやったことを活かして行こうと思い。まず②のxxdを見る。ASCIIコードを見つけて、それを基準に差分を足していけばいいのでは?と思ったのでゴリゴリしてみる

seq 20|factor|awk 'NF==2{print $2}'|xargs -I@ echo "echo \$((0xe291a1+@-2))"|bash|bc <(echo "obase=16") |tr '[A-F]' '[a-f]'|sed 's/$/0a/g'|xxd -p -r|paste <(seq 20|factor|awk 'NF==2{print $2}') -|awk '{print "s/^"$1"$/"$2"/g"}'|sed -f- <(seq 20)

前回のシェル芸勉強会で覚えた-f-も使えたので良かった。ちょっと冗長なので、他のシェル芸人さんみたいにスマートなやり方も鍛えていきたい

問7

textというファイルには見えない文字が含まれているらしい。どこにどんなのがあるか調査する問題。

調査するというのが難しかったので、とりあえずどんなのがありそうなのかbatで見る。すると・・・

丸見えになったのでコレで良いのではとなってしまった。この辺でもう脳が死んでたのでこんな解答しか出来なかった・・・

問8

最後はルビをふる問題。シェル芸人からの挑戦状を読んでいたので、sedで送り仮名を削りつつ、ルビのペアを作るのは出来てたけど上につける時のスペースの入れ方がわからなくてダメだった。

column -tでいいよということだったので覚えていきたい。

LTしたかったやつ

都合でいつものパワポテーマで作れなかったんですが。また難読化でLTする予定でした。今回は日夜手で難読化しているシェル芸人さんたちのために難読化コンバータを作りました。Go製です。ぜひ使ってみてください

因みにぼくは使ったことないです

まとめ

シェル芸勉強会はやはりサテライトでみんなで集まってやるのがたのしいですね。一人でサテライト開いても寂しいだけでした。問題が激しかったので寂しがっている暇はありませんでしたが。次回も参加したいなーとおもっています

今回もとても楽しかったです!ありがとうございました!!!