アイキャッチ

特に凶悪な出題も…「シェル芸勉強会」開催レポとその裏側【法林浩之】

ITニュース

法林浩之@jusがお届け!

UNIXエンジニア温故知新

UNIXが生まれてから半世紀。脈々とソフトウエアの進化を支えてきた技術は、どのようにして今に至るのか? そこから学べるものとは? 日本UNIXユーザ会「jus」の法林浩之さんが、イベントレポートを中心に「UNIXの今」をお届けします!

日本UNIXユーザ会(jus)の法林です。

今回は、2021年10月に行った「シェル芸勉強会」の模様をお伝えします。勉強会のレポートは、シェル芸勉強会を主宰している上田隆一さんに書いていただきました。

イベント概要

・タイトル:第56回シェル・ワンライナー160本ノックアウトシェル芸勉強会
・講師:上田隆一(千葉工業大学)
・日時:2021年10月30日(土) 13:00-16:00
・会場:オンライン

シェル芸勉強会とは?

この勉強会は、テキスト処理などの問題を私が3時間で7~10問出題し、参加者にシェル上のコマンド操作だけで解いてもらう形式で2012年から開催されています。

問題は、単に知識があるだけで解けるものもありますが、基本的にシェルのパイプラインを駆使するアルゴリズムを組み立てないと解けないものが大半。

ただ、他の人の解を見たり、コマンドの使い方を覚えたり、変態的にできるプログラマーを観察したりと、1問も解けなくても、楽しめる内容になっています。

オンサイトでやる場合は、問題を解かないで参加することは遠慮していただいていますが、YouTubeでの配信は誰でも覗けるようになっているので、一度勉強会の様子を観察していただけると幸いです。

今回の会の様子(YouTube動画やTwitterまとめ)や問題はこちらのURLからたどって見ることができます。

今回の問題。特に凶悪な最終問題を紹介

今回は労働にまつわる呪いの言葉を出力する問題、端末(ANSIエスケープシーケンスという機能)で色付きで表示される文字を処理する問題、ログの処理、画像処理、数学の問題を出題しました。

毎回、最終問題は凶悪なものを出題していますが、今回の最終問題(Q7)は、次のようなものでした。

`a^3 + b^3 = 6963472309248`、`a <= b`となる整数の組`(a,b)`を全て求めてください。
できる人は、`48988659276962496`に対して同様に`(a,b)`を求めてください(桁落ち注意)

この問題の、私の用意した解を掲載します。

$ seq inf | awk ‘{print ‘48988659276962496 -‘, $1 ‘^3′}’ | bc | awk ‘$1>0;$1<=0{exit}' | factor | awk '{print NR,$0}' | grep -P ': ((\d+) \2 \2)( (?1))*$' | awk '{a=1;for(i=3;i<=NF;i+=3)a*=$i;print $1,a}' | awk '$2>=$1′

この解は`a^3 = 6963472309248 – b^3`として`b`に1から順に整数を代入し、因数分解して`a`が整数になるものを探す、という手続きを実装したものです。

`a`が整数になる場合を、因数分解後にgrepで検索しているのがミソです。

この問題は「タクシー数」という数にまつわるもので、`6963472309248`、`48988659276962496`の次のタクシー数は`24153319581254312065344`です。

この桁の数を上のワンライナーで扱おうとすると計算がすぐには終わらないのですが、勉強会後、@ebanさんが挑戦して、成功していました。こわいですね。

他の問題についても、先ほど紹介したまとめページから確認していただけます。

LT(long talk大会)

本編のあとのLT(ロングトーク大会)では、まず、@hid_toriさんから「構造化定理という戯言」という怖い話がありました。

いかに「構造化定理」という言葉が曲解されてきたのかという内容で、過去の文献を丁寧にさかのぼっていって、「この人が犯人」と断罪する怖い内容でした。

@hid_toriさん、本件には相当ご立腹のようで、次回から(かつてシェル芸勉強会にあった)午前の部を復活し、本件についてコードベースで話をするそうです。

次に@butackle66さんから、「(仮題)nodebrewの話」がありました。

これは、私が勉強会の前のフリートーク時間(YouTubeにこの時の様子が残ってます)に、`nodejs`がインストールできなくて困っていたところ、急遽してもらえたレクチャーでした。(ただ……解決はしませんでした)

最後に、@xztaityozx_001さんから、「あの、selのリベンジをさせてください」というお題で、データの特定の列などを抽出する`sel`という自作のコマンドについて話がありました。

同様の動作をするライバルがいくつかいる中、速度面で優位性を出そうと最適化していった経緯をお話いただきました。

勉強会開催の裏側と反省

今回も前回同様、discordで参加者がチャットしている音声に、私の音声を混ぜてYouTubeで配信しました。前回、前々回はdiscordのチャットを私が直接モニタリングできないというトラブルがありましたが、今回はそれはなく、楽しく会話しながら進行できました。

反省点については、勉強会開始から15分くらいまでの映像を、配信だけして手元のPCで録画しておらず、編集して自分のチャンネルにアップする際に面倒だったことです。

YouTubeにアップしたオリジナルな(解像度を下げていない)動画は、https://takeout.google.com/?pli=1に行ってダウンロードできます。

ただ、個別にはダウンロードできず、他の動画もぜんぶ抱き合わせた巨大な圧縮ファイルをダウンロードしないといけません。

さらに、なぜか今回の動画は「問題がある」とのことでダウンロードできませんでした。編集の際は、しょうがなく720pxのものをつなぎあわせたので、その部分の解像度が低くなってしまいました。皆様も何か配信する際にはご注意ください。

もう一つ、これはしょうがないのですが、シェル芸を実行できるTwitterのbot「シェル芸bot」に、勉強会とは関係のない卑猥なPythonのコードを何度も投げてきた人がいて、その結果がYouTubeに表示されてしまったということがありました。

私のアカウントにアップした編集版ではモザイク処理をかけましたが、かなり面倒でした。犯人は大学生っぽいので、まあ大学生ってそういうもんだよね、ということで、あまり怒らずこれからもモザイク処理なりシェル芸botへのban依頼で対応していこうと考えています。

最後に「シェル芸本」の宣伝

シェル芸勉強会関係者で執筆した「シェル芸本」が9月に技術評論社さんから発売されました。正式名は「シェル・ワンライナー160本ノック」です。

シェル芸勉強会10年の歴史が詰まった本で、単にシェル、ワンライナーの話だけでなく、Linuxの知識や端末を通じた基本的な使い方も学習できる本ですので、ぜひ書店で内容を確認の上、お買い求めいただけると幸いです。

プロフィール画像

法林浩之さん(@hourin

大阪大学大学院修士課程修了後、1992年、ソニーに入社。社内ネットワークの管理などを担当。同時に、日本UNIX ユーザ会の中心メンバーとして勉強会・イベントの運営に携わった。ソニー退社後、インターネット総合研究所を経て、2008年に独立。現在は、フリーランスエンジニアとしての活動と並行して、多彩なITイベントの企画・運営も行っている

Twitterをフォローしよう

この記事をシェア

RELATED関連記事

RECOMMENDEDあなたにオススメ

RANKING人気記事ランキング

JOB BOARD編集部オススメ求人特集




サイトマップ