challenge ビンゴの結果を整形表示

重複無し乱数」の続編です。

「重複無し乱数」で作ったbingo関数の結果を下のように「何番目の乱数か」とセットにして10個ずつ折り返して表示するコードを書いてください。

>>> bingo(30)
  1  2  3  4  5  6  7  8  9 10
 29 14 16 13 30 15 22 11 25  9

 11 12 13 14 15 16 17 18 19 20
 23  4 18  5 28 17  8 12 21 20

 21 22 23 24 25 26 27 28 29 30
 26  6  2 19  1  7 10 27  3 24

>>> bingo(35)
  1  2  3  4  5  6  7  8  9 10
  7 15  3 32  1 16 17 28  6 29

 11 12 13 14 15 16 17 18 19 20
 19 23 30 26 20  5 12  2 25 31

 21 22 23 24 25 26 27 28 29 30
 35 13 24 18 11  8 10 34 22 21

 31 32 33 34 35
  9  4 27 33 14

Posted feedbacks - Ruby

enumeratorで
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
def bingo(num)
	(1..num).to_a.sort_by{ rand }
end

require 'enumerator'
bingo(35).enum_slice(10).each_with_index{ |e,index|
	num=index * 10 + 1
	tmpl=(["%02s"] * e.size).join(' ')

	puts tmpl % (num .. num + e.size).to_a
	puts tmpl % e
	puts ""
}

特にありません.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
N = 22
def put_bingo(n, col)
  d = n.to_s.size + 1
  index = Array.new(n){|i| i+1}
  bingo = Array.new(n){|i| index.delete_at(rand(n-i).modulo(n-i))}.
    map{|x| sprintf("% #{d}d", x)} #bingoの結果を生成
  (n.div(col) + 1).times{|i|
    size = bingo.size
    index = Array.new(size >= col ? col : size){|j| sprintf("% #{d}d", i*10+j+1)}.join
    result = bingo.slice!(0..(size >= col ? 9 : -1)).join
    puts "#{index}\n#{result}\n\n" if result.size > 0
  }
end
put_bingo(N, 10) #引数はbingoの大きさと出力時の列数の2つ

Index

Feed

Other

Link

Pathtraq

loading...