いつか書こうと思ってたけど、今日唐突に思い立った。
Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから
— てくも (@kumiromilk) 2016年3月9日
「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ!」って出力した後終了って関数作ったら満点で単位貰ってた
ワンライナー
($stop = $str = '') | % {Do {Get-Random 'ズン', 'ドコ'} Until ($stop)} | % {($str += $_)} | ? {$_.EndsWith('ズンズンズンズンドコ')} | % {$_ + 'キ・ヨ・シ!'} | ? {($stop = $true)}
動作説明
読みやすいように改行しておく。
読むとわかるが、代入演算を括弧で括ると代入結果が返ってくることを悪用したコードになっている。
($stop = $str = '') |
% {Do {Get-Random 'ズン', 'ドコ'} Until ($stop)} |
% {($str += $_)} |
? {$_.EndsWith('ズンズンズンズンドコ')} |
% {$_ + 'キ・ヨ・シ!'} |
? {($stop = $true)}
各行の動作は大体下記の通り。
書き方は突飛だが、やってることは至って普通。
- 累積用の変数を空文字列に初期化
- ループを回してランダムに「ズン」「ドコ」を生成
- 生成した「ズン」「ドコ」を累積
- 累積結果の末尾が「ズンズンズンズンドコ」になったら、
- 累積結果に「キ・ヨ・シ!」を追加して出力
- ループを止める