コマンドプロンプトのワンライナーでズンドコキヨシ
cmd.exeでもやります。期待してましたよね?よね?
概要
最近流行の「ズンドコキヨシ問題」を、コマンドプロンプト(cmd.exe)のワンライナーで解いてみました。
Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから
— てくも (@kumiromilk) 2016年3月9日
「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ!」って出力した後終了って関数作ったら満点で単位貰ってた
解
cmd /v:on /c "for /L %i in (1,1,1000) do @call set /a a5=a4,a4=a3,a3=a2,a2=a1,a1=^%RANDOM^% % 2 >nul & set A=!a5!!a4!!a3!!a2!!a1!& if !a1!==1 (echo ズン) else (echo ドコ) & if !A!==11110 echo キ・ヨ・シ! & exit"
雑な解説
- 処理を途中で終了する必要があるため、cmdコマンドでサブプロセスを起動する。
- /v:on は遅延環境変数を有効にするオプション
- /c "文字列" は、文字列に渡されたコマンドを実行するオプション
- ※詳細は→コマンドプロンプトで読んでおくべき7つのHELP - その①「cmd /?」 - くんすとの備忘録
- 0か1をランダムに1000回出力
- ※この部分ね→for /L %i in (1,1,1000) do @call set /a a1=^%RANDOM^% % 2
- 1のときは「ズン」0のときは「ドコ」を割り当て
- 初期値が「0」になるので、逆にすると初回に「ドコ」が出たら終了しちゃう
- 0か1だったという履歴(A)を5回まで保持(a1~a5)しておく。
- 履歴(A)が「11110」のとき、つまり「ズン ズン ズン ズン ドコ」だった時、「キ・ヨ・シ!」を出力して子プロセスを終了する