0
1

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 2021-03-25

##はじめに
この記事は以下のサイトにあった問題を解いてみたものです。大変に工夫の余地があるコードになってしまいましたが、一応完成したので初心者だった頃の自分をいつか省みるために作成しました。
[アウトプットのネタに困ったらこれ!?Ruby初心者向けのプログラミング問題を集めてみた(全10問)]
(https://blog.jnito.com/entry/2019/05/03/121235)

##問題
上記サイトより引用

1から75までの数字をランダムに配置して、ビンゴカードを作成するプログラミング問題です。
ただし、実際のビンゴカードのルールに沿って、各列は以下のような仕様で数字を出力する必要があります。

B:1~15のどれか
I:16~30のどれか
N:31~45のどれか
G:46~60のどれか
O:61~75のどれか

CodeIQに「ビンゴカード作成問題」を出題しました。みなさんの挑戦をお待ちしてます!
に詳細が記されています。

##完成したコード

class Bingo
  def self.generate_card
    array = (1..15).to_a
    b_num = array.sample(5)
    array = (16..30).to_a
    i_num = array.sample(5) 
    array = (31..45).to_a
    n_num = array.sample(5)
    array = (46..60).to_a 
    g_num = array.sample(5)
    array = (61..75).to_a 
    o_num = array.sample(5) 

    puts " B |  I |  N |  G |  O"
    5.times do |i|
      unless i == 2
        puts "#{b_num[i].to_s.rjust(2)} | #{i_num[i]} | #{n_num[i]} | #{g_num[i]} | #{o_num[i]} "  
      else
        puts "#{b_num[i].to_s.rjust(2)} | #{i_num[i]} |    | #{g_num[i]} | #{o_num[i]} "  
      end
    end
  end
end
Bingo.generate_card

##手順
まず、それぞれの列の数値を取得することから始めようと考えました。例えばBの列には、1~15の範囲で、違う数字をランダムに5つ選ぶ必要があります。これを、配列に対して使うsampleメソッドを利用して実現しました。

b_num
array = (1..15).to_a
b_num = array.sample(5)
p b_num

実行結果

>ruby b_num
[7, 3, 14, 15, 10]

これを、5列分用意することで必要な数値を準備しました。(改善の余地がありそうなポイント1)

次に考えたのは、数値を1行ずつ表示することです。ここで注意するべきなのは、右詰で表示させる仕様になっていることでした。1桁の数字が出ると、Bの列の表示が崩れてしまう問題が発生しました。なので、rjustメソッドを用いてその問題を解決しています。
また、真ん中は空白にする必要があるので、それにも留意して繰り返しのメソッドを用いました。

5.times do |i|
  unless i == 2
    puts "#{b_num[i].to_s.rjust(2)} | #{i_num[i]} | #{n_num[i]} | #{g_num[i]} | #{o_num[i]} "  
  else
    puts "#{b_num[i].to_s.rjust(2)} | #{i_num[i]} |    | #{g_num[i]} | #{o_num[i]} "  
  end
end

ただこの記述の仕方だと、横に非常に長くなってしまっている点が気になります。(改善の余地ポイント2)

##感想、まとめ
現状の自分のプログラミングスキルではこのコードが限界です。いつかよりすっきりとしたコードをかけるよう精進したいと強く思える結果となりました。

##参考にしたサイト
String#rjust (Ruby 3.0.0 リファレンスマニュアル)
Array#sample (Ruby 3.0.0 リファレンスマニュアル)
Object#to_a (Ruby 3.0.0 リファレンスマニュアル)

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?