回答編集履歴

5

更新

2020/11/15 12:08

投稿

asm
asm

スコア15147

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

4

更新

2020/11/15 12:08

投稿

asm
asm

スコア15147

test CHANGED
@@ -42,6 +42,8 @@
42
42
 
43
43
  S = gets.to_i
44
44
 
45
+ # TODO: 必要ならばSが正常な入力かを確認
46
+
45
47
  word_list = make_words(S*S, WORD_LENGTH)
46
48
 
47
49
  bingo_card = word_list.each_slice(S).to_a
@@ -56,7 +58,7 @@
56
58
 
57
59
  N = gets.to_i
58
60
 
59
-
61
+ # TODO: 必要ならばNが正常な入力かを確認
60
62
 
61
63
  hit_words = word_list.sample(N)
62
64
 

3

更新

2020/11/15 03:22

投稿

asm
asm

スコア15147

test CHANGED
@@ -3,6 +3,10 @@
3
3
  ALPHABETS = [*?a..?z,*?0..?9]
4
4
 
5
5
  WORD_LENGTH = 4
6
+
7
+
8
+
9
+ ### ビンゴカードの生成 ###
6
10
 
7
11
 
8
12
 
@@ -46,7 +50,7 @@
46
50
 
47
51
 
48
52
 
49
- ##############
53
+ ### 当選ワードの選定と表示 ###
50
54
 
51
55
 
52
56
 
@@ -64,11 +68,9 @@
64
68
 
65
69
  hit_words.each do |hit|
66
70
 
67
- ix = word_list.find_index(hit)
71
+ if ix = word_list.find_index(hit)
68
72
 
69
- if ix
70
-
71
- # word_list[ix] = # TODO: 印とやらをつける
73
+ word_list[ix].prepend("☆")
72
74
 
73
75
  hit_list[ix] = true
74
76
 
@@ -80,21 +82,49 @@
80
82
 
81
83
  hit_card = hit_list.each_slice(S).to_a
82
84
 
83
- pp hit_card # TODO: デバッグ用なので不要なら消す
85
+ # pp hit_card # DEBUG: デバッグ用なので不要なら消す
84
86
 
85
87
 
86
88
 
87
- # TODO: 横判定
89
+ ## 当選部分に印を付けたビンゴカードを再生成し表示 ##
88
90
 
89
- # TODO: 縦判定
91
+ puts "--------------------------------" # DEBUG: 見づらかったので罫線いれとく
90
92
 
91
- # TODO: 斜め判定
93
+ bingo_card = word_list.each_slice(S).to_a
92
94
 
93
- # TODO: 結果出力
95
+ display(bingo_card)
94
96
 
95
- # TODO: word_listから再度ビンゴカードを生成し表示
96
97
 
98
+
99
+ ### ビンゴ判定 ###
100
+
101
+ # 斜め判定
102
+
103
+ naname1 = Array.new(S){|i| hit_card[i][i] }.all?
104
+
105
+ naname2 = Array.new(S){|i| hit_card[i][-i-1] }.all?
106
+
107
+ # 横判定
108
+
109
+ yoko = hit_card.any?(&:all?)
110
+
111
+ # 縦判定
112
+
113
+ tate = hit_card.transpose.any?(&:all?)
114
+
115
+ # 結果出力
116
+
117
+ puts "--------------------------------" # DEBUG: 見づらかったので罫線いれとく
118
+
119
+ if yoko || tate || naname1 || naname2
120
+
97
- # TODO: yes/no の出力
121
+ puts "Yes"
122
+
123
+ else
124
+
125
+ puts "No"
126
+
127
+ end
98
128
 
99
129
  ```
100
130
 

2

修正

2020/11/14 23:28

投稿

asm
asm

スコア15147

test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
  result += Array.new(nums){ Array.new(len){ALPHABETS.sample}.join }
20
20
 
21
- result = result.uniq
21
+ result.uniq!
22
22
 
23
23
  end
24
24
 

1

修正

2020/11/14 16:11

投稿

asm
asm

スコア15147

test CHANGED
@@ -84,9 +84,9 @@
84
84
 
85
85
 
86
86
 
87
+ # TODO: 横判定
88
+
87
89
  # TODO: 縦判定
88
-
89
- # TODO: 横判定
90
90
 
91
91
  # TODO: 斜め判定
92
92