質問するログイン新規登録

回答編集履歴

5

更新

2020/11/15 12:08

投稿

asm
asm

スコア15149

answer CHANGED
@@ -1,41 +1,17 @@
1
1
  ```ruby
2
- ALPHABETS = [*?a..?z,*?0..?9]
3
- WORD_LENGTH = 4
4
-
5
- ### ビンゴカードの生成 ###
6
-
7
- # TODO: lenの設定次第では全パターン網羅してもnumに届かない場合がありうるので対策が必要
8
- # 例: 何度か回してもダメっぽかったらlenを自動伸長するなど
9
- def make_words(nums, len)
10
- result = []
11
- while result.size < len
12
- result += Array.new(nums){ Array.new(len){ALPHABETS.sample}.join }
13
- result.uniq!
14
- end
15
- result.take(nums)
16
- end
17
-
18
- def display(card)
19
- puts card.map{|line| line.join(" ")}
20
- end
21
-
22
2
  S = gets.to_i
23
- # TODO: 必要ならばSが正常な入力かを確認
3
+ # ビンゴカードの入力
24
- word_list = make_words(S*S, WORD_LENGTH)
25
- bingo_card = word_list.each_slice(S).to_a
4
+ bingo_card = Array.new(S){ gets.split }
26
- display(bingo_card)
5
+ word_list = bingo_card.flatten
27
6
 
28
- ### 当選ワードの選定と表示 ###
7
+ ### 当選ワードの入力 ###
29
8
 
30
9
  N = gets.to_i
31
- # TODO: 必要ならばNが正常な入力かを確認
32
- hit_words = word_list.sample(N)
10
+ hit_words = Array.new(N){ gets.chomp }
33
- puts hit_words
34
11
 
35
12
  hit_list = Array.new(S*S)
36
13
  hit_words.each do |hit|
37
14
  if ix = word_list.find_index(hit)
38
- word_list[ix].prepend("☆")
39
15
  hit_list[ix] = true
40
16
  end
41
17
  end
@@ -43,11 +19,6 @@
43
19
  hit_card = hit_list.each_slice(S).to_a
44
20
  # pp hit_card # DEBUG: デバッグ用なので不要なら消す
45
21
 
46
- ## 当選部分に印を付けたビンゴカードを再生成し表示 ##
47
- puts "--------------------------------" # DEBUG: 見づらかったので罫線いれとく
48
- bingo_card = word_list.each_slice(S).to_a
49
- display(bingo_card)
50
-
51
22
  ### ビンゴ判定 ###
52
23
  # 斜め判定
53
24
  naname1 = Array.new(S){|i| hit_card[i][i] }.all?
@@ -57,7 +28,7 @@
57
28
  # 縦判定
58
29
  tate = hit_card.transpose.any?(&:all?)
59
30
  # 結果出力
60
- puts "--------------------------------" # DEBUG: 見づらかったので罫線いれとく
31
+ # puts "--------------------------------" # DEBUG: 見づらかったので罫線いれとく
61
32
  if yoko || tate || naname1 || naname2
62
33
  puts "Yes"
63
34
  else

4

更新

2020/11/15 12:08

投稿

asm
asm

スコア15149

answer CHANGED
@@ -20,6 +20,7 @@
20
20
  end
21
21
 
22
22
  S = gets.to_i
23
+ # TODO: 必要ならばSが正常な入力かを確認
23
24
  word_list = make_words(S*S, WORD_LENGTH)
24
25
  bingo_card = word_list.each_slice(S).to_a
25
26
  display(bingo_card)
@@ -27,7 +28,7 @@
27
28
  ### 当選ワードの選定と表示 ###
28
29
 
29
30
  N = gets.to_i
30
-
31
+ # TODO: 必要ならばNが正常な入力かを確認
31
32
  hit_words = word_list.sample(N)
32
33
  puts hit_words
33
34
 

3

更新

2020/11/15 03:22

投稿

asm
asm

スコア15149

answer CHANGED
@@ -2,6 +2,8 @@
2
2
  ALPHABETS = [*?a..?z,*?0..?9]
3
3
  WORD_LENGTH = 4
4
4
 
5
+ ### ビンゴカードの生成 ###
6
+
5
7
  # TODO: lenの設定次第では全パターン網羅してもnumに届かない場合がありうるので対策が必要
6
8
  # 例: 何度か回してもダメっぽかったらlenを自動伸長するなど
7
9
  def make_words(nums, len)
@@ -22,7 +24,7 @@
22
24
  bingo_card = word_list.each_slice(S).to_a
23
25
  display(bingo_card)
24
26
 
25
- ##############
27
+ ### 当選ワードの選定と表示 ###
26
28
 
27
29
  N = gets.to_i
28
30
 
@@ -31,22 +33,35 @@
31
33
 
32
34
  hit_list = Array.new(S*S)
33
35
  hit_words.each do |hit|
34
- ix = word_list.find_index(hit)
36
+ if ix = word_list.find_index(hit)
35
- if ix
36
- # word_list[ix] = # TODO: 印とやらをつける
37
+ word_list[ix].prepend("☆")
37
38
  hit_list[ix] = true
38
39
  end
39
40
  end
40
41
 
41
42
  hit_card = hit_list.each_slice(S).to_a
42
- pp hit_card # TODO: デバッグ用なので不要なら消す
43
+ # pp hit_card # DEBUG: デバッグ用なので不要なら消す
43
44
 
45
+ ## 当選部分に印を付けたビンゴカードを再生成し表示 ##
46
+ puts "--------------------------------" # DEBUG: 見づらかったので罫線いれとく
47
+ bingo_card = word_list.each_slice(S).to_a
48
+ display(bingo_card)
49
+
44
- # TODO: 横判定
50
+ ### ビンゴ判定 ###
45
- # TODO: 縦判定
46
- # TODO: 斜め判定
51
+ # 斜め判定
52
+ naname1 = Array.new(S){|i| hit_card[i][i] }.all?
53
+ naname2 = Array.new(S){|i| hit_card[i][-i-1] }.all?
54
+ # 横判定
55
+ yoko = hit_card.any?(&:all?)
56
+ # 縦判定
57
+ tate = hit_card.transpose.any?(&:all?)
47
- # TODO: 結果出力
58
+ # 結果出力
59
+ puts "--------------------------------" # DEBUG: 見づらかったので罫線いれとく
48
- # TODO: word_listから再度ビンゴカードを生成し表示
60
+ if yoko || tate || naname1 || naname2
49
- # TODO: yes/no の出力
61
+ puts "Yes"
62
+ else
63
+ puts "No"
64
+ end
50
65
  ```
51
66
 
52
67
  まぁ、こんなん

2

修正

2020/11/14 23:28

投稿

asm
asm

スコア15149

answer CHANGED
@@ -8,7 +8,7 @@
8
8
  result = []
9
9
  while result.size < len
10
10
  result += Array.new(nums){ Array.new(len){ALPHABETS.sample}.join }
11
- result = result.uniq
11
+ result.uniq!
12
12
  end
13
13
  result.take(nums)
14
14
  end

1

修正

2020/11/14 16:11

投稿

asm
asm

スコア15149

answer CHANGED
@@ -41,8 +41,8 @@
41
41
  hit_card = hit_list.each_slice(S).to_a
42
42
  pp hit_card # TODO: デバッグ用なので不要なら消す
43
43
 
44
+ # TODO: 横判定
44
45
  # TODO: 縦判定
45
- # TODO: 横判定
46
46
  # TODO: 斜め判定
47
47
  # TODO: 結果出力
48
48
  # TODO: word_listから再度ビンゴカードを生成し表示