ズンドコキヨシ(Ruby)


 
やってみた。Ruby コード。

z, d = zd = ["ズン", "ドコ"]
line = []
until line == [z, z, z, z, d]
  line << zd[rand(2)]
  line = line.last(5)
  print line.last
  sleep(1)
end
puts "キ・ヨ・シ!"

意外と出ないものですね。あ、これ、関数ではないか。

※参考
ズンドコキヨシまとめ - Qiita
 

追記

ここにこういうコードがあった。

def zundoko
  z, d = zd = ['ズン', 'ドコ']

  loop.lazy.map { zd.sample }.each_cons(5).with_index do |nominees, i|
    i.zero? ? nominees.each(&method(:print)) : print(nominees.last)
    break if nominees == [z, z, z, z, d]
  end

  print 'キ・ヨ・シ!'
end

zundoko

プロの優れたプログラマがネタとして書いたコードなのでマジレスするわけではないが、これは Ruby らしい「悪しきコード」だと思う。凝りすぎ。出力のためだけに with_index三項演算子を使ったり、each {|x| print x} の代わりに(ブロック変数を省略するために ) each(&method(:print)) と書いたり。Ruby を使っているとついこういうコードを書きたくなってしまうけれど。まあ初心者の冗談レスですが。

もしこれが「悪いコード」だとするならば、ここで Enumerator と each_cons(5) を使おうと決めた選択がよくなかったということになると思う。