質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

3回答

1908閲覧

Rubyでずんどこキヨシ

King_of_Flies

総合スコア382

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

1クリップ

投稿2017/05/11 08:25

お疲れ様です。Takkoです。
現在Rubyを独学しているものです。

一年ほど前SE業界に入り込み、
その際の研修でjavaを使用してずんどこキヨシを作らされたことを思い出し、
ふとやってみようと思った次第です。

ruby

1def zundoko 2 z, d = zd = ['ズン', 'ドコ'] 3 w1, w2, w3, w4, w5 = 5.times.map { nil } 4 5 until [w1, w2, w3, w4, w5] == [z, z, z, z, d] 6 w1, w2, w3, w4, w5 = w2, w3, w4, w5, zd.sample.tap(&method(:puts)) 7 end 8 9 puts 'キ・ヨ・シ!' 10end 11 12zundoko

自分で作ってみたところこんな感じになったのですけど、
実行後一瞬で
ズン
ズン
ドコ
ドコ
ドコ
ズン
ズン
ズン
ドコ
キ・ヨ・シ!
と表示されてしまうので、
ズンとドコの表示を0.2秒間隔で出力し、
最後のキ・ヨ・シを0.5秒間隔で出力したいのですが、可能でしょうか?

またズンドコキヨシをもっと短く記述する方法はありますか?

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

ズン
ズン
ズン
ドコ
キ・ヨ・シ!
と表示させるためのコードを書いて見ました

class Zundoko attr_accessor :zun ,:doko def initialize(zun,doko) @zun = zun @doko = doko end def self.kiyosi(secound) print "キ・" sleep(secound) print "ヨ・" sleep(secound) print "シ!" end def mae(secound) 4.times do puts @zun sleep(secound) end puts @doko end maekoe = Zundoko.new("ズン","ドコ") maekoe.mae(0.2) self.kiyosi(0.5) end

maekoe = Zundoko.new("ズン","ドコ")の部分で引数の部分を("タ","タン")に変えたら



タン
キ・ヨ・シ!
と表示されるように変更できます。

なぜこのような実装にしたかと言うとこの方がのちにコードを変える際に手間がかかりにくいからです

そしてmaeメソッドとself.kiyosiメソッドに引数を渡せるようにしたのはのちに秒数を変えたくなった際に変更がしやすいようにしたためです。

##変更

class Zundoko attr_accessor :zun ,:doko,:arr def initialize(zun,doko,arr) @zun = zun @doko = doko @arr = arr end def self.kiyosi(secound,arr) arr.each do |str| print str sleep(secound) end end def mae(secound) 4.times do puts @zun sleep(secound) end puts @doko end maekoe = Zundoko.new("ズン","ドコ",["キ・","ヨ・","シ!"]) maekoe.mae(0.2) self.kiyosi(0.5,maekoe.arr) end

前述のコードだとself.kiyosiがDRYに反しているし、冗長だなと思い、変更しました。
また、@arrを追加したことにより、キ・ヨ・シ!の部分も変更しやすいものとなっております。
Zundoko.newの引数に渡す配列の中身を["ケ・","ン・","ス・","ケ!"]にした場合、このコードですと0.5秒間隔で
ケ・ン・ス・ケ!と表示されるようになるでしょう

投稿2017/05/11 09:24

編集2017/05/11 09:36
haneru

総合スコア440

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

例えば、秒なら、sleep(秒)でできます。

簡単なサンプルだと

ruby

1x="a" 2loop do 3puts x 4sleep(1) 5end 6

とかで分かるかと思います。

連続出力したいところでループし、間にsleepで抜けられます。
なお、if分を使って最後breakするのをお忘れなく。

投稿2017/05/11 08:36

garchomp

総合スコア128

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Ruby

1# encoding: utf-8 2 3def zundoko(zun = 'ズン', doko = 'ドコ', kiyosi = 'キヨシ') 4 kiyosi = kiyosi.split('').join('・') 5 kiyosi = kiyosi.split('') 6 kiyosi[kiyosi.length - 1] = kiyosi.last + '!' 7 8 loop do 9 ans = [] 10 11 5.times do 12 ans << %W[#{zun} #{doko}].sample 13 end 14 15 ans.each do |e| 16 puts e 17 sleep(0.2) 18 end 19 20 next unless ans == %W[#{zun} #{zun} #{zun} #{zun} #{doko}] 21 22 kiyosi.each do |e| 23 print e 24 sleep(0.5) 25 end 26 27 break 28 end 29end

考えてみました。
zundokoだけでズンドコキヨシ
引数を入れればそれで動きます。

短くならなかったzundoko

Ruby

1# encoding: utf-8 2 3loop do 4 ans = [] 5 5.times{a = %w[ズン ドコ].sample; puts a; ans << a} 6 next unless ans == %w[ズン ズン ズン ズン ドコ] 7 puts 'キ・ヨ・シ!' 8 break 9end 10

投稿2017/05/11 09:08

編集2017/05/11 10:55
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問