0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Ruby ビンゴカード作成問題 解いてみた(解答例あり)

Last updated at Posted at 2020-05-29

はじめに

『プロを目指す人のためのRuby入門』通称チェリー本を学習後のプログラミング初心者です。
インプットしたものを手を動かして実践してみたいなと思ったら、作者の記事を見つけました。
「アウトプットのネタに困ったらこれ!?Ruby初心者向けのプログラミング問題を集めてみた(全10問)」

この3つ目の問題を解いてみました。

他の問題はこちら
一問目:カレンダー作成問題(たのしいRuby 練習問題)
二問目:カラオケマシン作成問題
三問目:ビンゴカード作成問題
四問目:ボーナスドリンク問題
五問目:電話帳作成問題

# 問題
詳細はここから

B:1~15のどれか
I:16~30のどれか
N:31~45のどれか
G:46~60のどれか
O:61~75のどれか
というルールで次のようなビンゴカードを作ります。

B | I | N | G | O
13 | 22 | 32 | 48 | 61
3 | 23 | 43 | 53 | 63
4 | 19 | | 60 | 65
12 | 16 | 44 | 50 | 75
2 | 28 | 33 | 56 | 68

>Bingo.generate_card メソッドの出力結果は上で述べた数字のルールのほかに、以下の仕様を満たす必要があります。
 - 毎回異なるカードを生成します。
 - 各列はパイプ(|)で区切ります。
 - 数字や"BINGO"の文字は右寄せで出力します。
 - 真ん中(FREEになる場所)はスペースを出力します。



# 解答例
こんな感じになりました。

```ruby
class Bingo
  def self.generate_card
    title = "BINGO".split("").map{|bingo| sprintf("%2s",bingo)}.join(" | ")

    numbers = [*1..75].each_slice(15).to_a.map{|b| b.sample(5)}
    numbers[2][2] = "  "
    body = []
    for i in 0..4
      body << numbers.map{|number| sprintf("%2s",number[i])}.join(' | ')
    end

    [title,body].join("\n")
  end
end

さいごに

下記リンクに他の方の解答も掲載されていました。
Ruby -「ビンゴカード作成問題」の優秀作品ベスト3を発表します!

transposeメソッドなど、知らなかったので使いませんでしたが他の方の解答をみるに、まだまだリファクタリングの余地はありそうです。

ご意見等あればコメントで教えてください。
よろしくお願いします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?