おおよそ1ヶ月前の話になってしまいましたが、シェル芸勉強会 第38回 に参加していましたので、その振り返り記事です。
usptomo.doorkeeper.jp
明日からは12月。世間的にはアドベントカレンダー向けのブログ記事が山ほど出てくる時期です。それまでに公開しないとすぐに埋もれてしまう!と危機感を抱きつつ慌てて書いたのですが、11月も残り40分程度で終わりですので、この記事だってすぐに埋没してしまうに違いありません。
ちなみに、前に参加した時は、こんな感じでした。
tmotooka.hatenablog.jp
午前
シェルで文字コードに触れてみる その3
という題での鳥海先生の講演でした。
内容は他のブログ等で既に言及されている通りなのですが、
- bashで
for
を使ってASCIIコード表を作ったり、 - 区点コードから
JIS X 0208
,EUC JP
,Shift JIS
等におけるコードを導出したり、
といった話がありました。
パイプを繋げている途中で (echo ibase=16; cat)
を挟むと、出力の先頭に ibase=16
を入れることができるので、16進数演算をbcに任せることができる、というテクニックはなるほどなー、と思いました。bc以外にも応用できそうですね。
午後
私の答案を晒します。
問題文と解答例は、こちら。
【問題と解答】jus共催 第38回҈҈҉҈҈҉シ҈҉ェ҈҉ル҈҉芸҈҉勉҈҉強҈҉会 | 上田ブログ
Q1
素直に問題の文字を消す方向で頑張りました。
echo "jus共催 第38回҈҈҉҈҈҉シ҈҉ェ҈҉ル҈҉芸҈҉勉҈҉強҈҉会" | tr -d '҈' | tr -d '҉'
問題の文字を1文字だけコピーするのはどうするのか?というところこそが難しかったのかもしれません。
私は次のワンライナーにより、問題の文字をコピーできるようにしました。これらの問題の文字は隣の文字を修飾する効果があり、通常(たぶん)のテキストエディタでは選択しようとしても被修飾の文字と一緒にしか選択できないのですが、1行に含まれる文字がこれらの修飾の文字だけであればマウス操作で選択できるようになります(Macの話です)
echo "jus共催 第38回҈҈҉҈҈҉シ҈҉ェ҈҉ル҈҉芸҈҉勉҈҉強҈҉会" | grep -o . | sort | uniq
Q2
次のように回答しました。
echo '不摂生' | grep -o . | grep $(echo -n '[';head 仏* | tr -d '\n';echo -n ']')
解答例はgrepの -f オプションを使っていてなるほど〜〜〜、となりました。なるほど。
Q3
これは回答できませんでした。
Q4
次のように回答しました。
echo {A..Z} {A..Z}{A..Z} {A..Z}{A..Z}{A..Z} | sed 's/ /\n/g' | nl | grep XYZ
おおよそ解答例と同じですね。
Q5
これも回答できませんでした。
Q6
私の端末にはログとして
yes 仏説摩訶般若波羅蜜多心経
という記録があるだけでした。ダメですwwダメww
Q7
次のように回答しました。
echo {1..100},{1..100} | tr ' ' '\n' | tr ',' ' ' | awk '(($1*$1+$2*$2)%($1*$2+1)==0){print $1,$2,(($1*$1+$2*$2)/($1*$2+1))}'
ランダムではなくて小さいものから総当たりで探索していることになります。探索対象の組み合わせの数を増やして実行すると、Ctrl-C でも実行中断できない状態に陥りました。ブレース展開の途中だとシグナル無視するのでしょうか? ちょっとだけ危険ですのでご注意を。この回答例では100*100で1万個の探索をやっているだけですから、まだ地球に優しいですね。
Q8
次のように回答しました。
seq 684000 6845000 | awk '{print $1/1000000}' | grep -v -f <(yes | awk 'BEGIN{x=0.5;a=3}{x=a*x*(1-x);print x;}' | head -n 1000000)
この設定でこの区域だと 0.684032
が出力されません。
Q2で学んだばかりのgrepの -f オプションを早速活用することができて、会場でドヤ顔していたことを覚えています。
という訳で、5問回答しました。
LT
夜から別の用事があったので、残念ながら途中で帰ってしまいました。
次に参加して発表するときのために、またネタを用意しておきたいと思います。
(残念ながら12月の会は出席できないので、また年明けに…)