cmd.exeでもやります。期待してましたよね?よね?

概要

最近流行の「ズンドコキヨシ問題」を、コマンドプロンプト(cmd.exe)のワンライナーで解いてみました。

1
2
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コマンドでサブプロセスを起動する。
  • 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」のとき、つまり「ズン ズン ズン ズン ドコ」だった時、「キ・ヨ・シ!」を出力して子プロセスを終了する