最近Ruby力が落ちてきている気がするので、力試しにやってみる。
Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから
— てくも (@kumiromilk) 2016年3月9日
「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ!」って出力した後終了って関数作ったら満点で単位貰ってた
尚、@yancya さんのコードは極力見ないようにする。
http://qiita.com/yancya/items/1167e9764719151d0c80
でも、@joker1007さんのアドバイスは見てしまったのでそれは不可抗力で。
とりあえず仕様を満たす動きをサラッと書いてみる。
# coding: utf-8
zun = "ズン"
doko = "ドコ"
ary = []
while ary << [zun,doko].sample
p ary.last
if ary.last(5) == [zun, zun, zun, zun, doko]
p "キ・ヨ・シ!"
break
end
end
で、これを最適化する。
# coding: utf-8
zun, doko = "ズン", "ドコ"
loop
.lazy
.map { p [zun,doko].sample }
.each_cons(5) { |a| p "キ・ヨ・シ!" and break if a.join == zun * 4 + doko }
2016.03.17 「ズン」が1個足りてなかったのと1個目のコードの判定がおかしかったので修正。
each_consを使えば? という@joker1007さんと、チラ見してしまった@yancyaさんのmap処理見てなければ後者は無理だったと思う。