ワンライナーズンドコキヨシ with Ruby

  • 5
    Like
  • 3
    Comment
More than 1 year has passed since last update.

ズンドコキヨシ with Rubyを見てワンライナーで書いてみた。
ついでにコードゴルフに挑戦してみたが、私にはこれが限界であった。
もう少し短く出来そうな気がするのだが...。

z,d=a=%W|ズン ドコ|;0 until (0..4).map{puts w=a.sample;w}.join==z*4+d;puts "キ・ヨ・シ!"

他のズンドコ実装を見るといつの間にやら5個区切りの判定をしているのは私ぐらいになってしまったので、他の実装と合わせたものを急遽考えてみた。
...が、長くなってしまったのでもうちょっと実装を考え直したい。

z,d=a=%W|ズン ドコ|;s=[];puts (s=(s<<a.sample).last(5))[-1] until s.join==z*4+d;puts "キ・ヨ・シ!"

配列から文字列に変えたらもっと短く出来た。

z,d=a=%W|ズン ドコ|;puts (s+=w=a.sample)[w] until (s||="")[z*4+d];puts "キ・ヨ・シ!"

改行を諦めればputsよりもSTDOUTに文字列を流すほうが短く済む。

z,d=a=%W|ズン ドコ|;$><<(s+=w=a.sample)[w] until (s||="")[z*4+d];$><<"キ・ヨ・シ!"

最後に結果だけ出せばいいのであれば途中でSTDOUTに流す必要がなくなるので更に色々削れる。

s="";z,d=a=%W|ズン ドコ|;0until(s<<a.sample)[z*4+d];$><<s+"キ・ヨ・シ!"