シェル芸でズンドコキヨシ
おしらせ:今回はjotコマンドあります
概要
最近流行の「ズンドコキヨシ問題」を、シェルワンライナーで解いてみました。
解
|
|
解説
分解して順番に解説していきます。
jot -r 0
jotコマンドは、任意の個数・任意の範囲の数値を出力するコマンド(GNUのseqみたいなもん)ですが、「-r」オプションをつけると、指定した回数だけランダムな数値を出力します。
また、回数として引数に0を指定すると、無限に値が出力されます。これを組み合わせることで、ランダムな数値を無限に出し続けることができます。こんな感じ。
|
|
jot -r 0 | awk '$0=$0%3'
awkのパターンで、$0に「3で割った余り(つまり、0~2)」を設定します。
パターンで代入結果が「0」になると出力されないので、結果的に「1」か「2」だけがアクションに渡されます。こんな感じ。
|
|
jot -r 0 | awk '$0=$0%3{zd=substr($0 zd, 0, 5);if($0==1){w="ズン”}else{w="ドコ”}print w, zd}'
「ズン」とか「ドコ」とかそういう難しいことは苦手なので、数字で考えます。
- $1…値が1の時は「ズン」、2のときは「ドコ」を$1に出力
- $2…過去5回分の「1」or「2」を逆順に累積(逆順になっているのはsubstrで前からカットするため)
jot -r 0 | awk '$0=$0%3{zd=substr($0 zd, 0, 5);if($0==1){w="ズン”}else{w="ドコ”}print w, zd}' | awk '{print $1}/21111/{print “キ・ヨ・シ!";exit}'
最後のawkで、パターンとアクションの組が二つ出てきます。
1つめ…パターンなし、アクションは「{print $1}」
$1、つまり「ズン」か「ドコ」を出力
2つめ…パターンは「/22221/」、アクションは「{print “キ・ヨ・シ!";exit}」
「21111」、つまり、過去5回が「ズン ズン ズン ズン ドコ」だった行の時だけアクションが実行されます。
アクションは「キ・ヨ・シ!」を出力して終了。
……ということで、久々のjot芸でした。