質問編集履歴

3

修正

2021/01/04 09:05

投稿

sss3150
sss3150

スコア4

test CHANGED
File without changes
test CHANGED
@@ -1,23 +1,3 @@
1
- ### 前提・実現したいこと
2
-
3
- 新ルールでのボーリングスコア計算プログラムを書いています。
4
-
5
- 下のようにターミナルで出力させたいです。
6
-
7
- ターミナルで以下のように実行しましたがエラーが出てくるので原因と解決方法を知りたいです。
8
-
9
-
10
-
11
- ```
12
-
13
- % ./bowling.rb 6390038273X9180X645
14
-
15
- 139
16
-
17
- ```
18
-
19
-
20
-
21
1
  ### 発生している問題・エラーメッセージ
22
2
 
23
3
 
@@ -80,7 +60,7 @@
80
60
 
81
61
  ### 試したこと
82
62
 
83
- 最後の行の`end`を消してみましたが改善されなかったです
63
+ 最後の行の`end`を消してみましたが改善されなかった。
84
64
 
85
65
 
86
66
 

2

修正

2021/01/04 09:05

投稿

sss3150
sss3150

スコア4

test CHANGED
File without changes
test CHANGED
@@ -5,8 +5,6 @@
5
5
  下のようにターミナルで出力させたいです。
6
6
 
7
7
  ターミナルで以下のように実行しましたがエラーが出てくるので原因と解決方法を知りたいです。
8
-
9
- また、コードの中で問題となる部分があればごご教示お願い致します。
10
8
 
11
9
 
12
10
 
@@ -42,111 +40,33 @@
42
40
 
43
41
  ```ruby
44
42
 
45
- score = ARGV[0]
43
+ elsif frames[i] == frames[8]
46
44
 
47
- scores = score.chars
45
+ if frames[i][0] == 10 && frames[i+1][0] == 10 && frames[i+1][1] == 10
48
46
 
47
+ point += 30
49
48
 
49
+ elsif frames[i][0] == 10 && frames[i+1][0] == 10
50
50
 
51
- frames = []
51
+ point += 20 + frames[i+1][1]
52
52
 
53
- frame = []
53
+ elsif frames[i][0] == 10
54
54
 
55
+ point += 10 + frames[i+1][0] + frames[i+1][1]
55
56
 
56
-
57
- scores.each do |s|
58
-
59
- if s == 'X' # もし引数にXがあったら10点にする
60
-
61
- frame << 10
62
-
63
- else
64
-
65
- frame << s.to_i # Xではないものを文字列から数字に変換
66
-
67
- end
68
-
69
-
70
-
71
- if frame.count == 1 && frame == [10] # 1投目で10本倒れたとき
72
-
73
- frames << frame # framesにframeを代入
74
-
75
- frame = []
76
-
77
- end
78
-
79
-
80
-
81
- if frame.count == 2 # 2球投げたら
82
-
83
- frames << frame # framesにframeを代入
84
-
85
- frame = []
86
-
87
- end
88
-
89
- end
90
-
91
-
92
-
93
- point = 0
94
-
95
- frames = []
96
-
97
- frames.each_with_index do |frame, i|
98
-
99
- if frames[i] != frames[9] # 1~8フレームの処理
100
-
101
- if frames[i][0] == 10 && frames[i+1][0] == 10 && frames[i+2][0] == 10 # 3連続ストライクの場合
102
-
103
- point += 30 # 3ストライク分のポイント
104
-
105
- elsif frames[i][0] == 10 && frames[i+1][0] == 10 # 2連続ストライクの場合
106
-
107
- point += 20 + frames[i+2][0] # 2ストライク分のポイント + 次の次のフレームの1投目
108
-
109
- elsif frames[i][0] == 10 # 連続しないストライクの場合
110
-
111
- point += 10 + frames[i+1][0] + frames[i+1][1] # 10 + 次のフレームの1投目 + 次のフレームの2投目
112
-
113
- elsif frame.sum == 10 && frames[0] != 10 # スペアの場合
57
+ elsif frame.sum == 10 && frames[0] != 10
114
58
 
115
59
  point += 10 + frames[i+1][0]
116
60
 
117
- else # その他の場合
61
+ else
118
62
 
119
63
  point += frame.sum
120
64
 
121
65
  end
122
66
 
123
- elsif frames[i] == frames[8] # 9フレームの処理
67
+ else
124
68
 
125
- if frames[i][0] == 10 && frames[i+1][0] == 10 && frames[i+1][1] == 10 # 3連続ストライクの場合
126
-
127
- point += 30 # 3ストライク分のポイント
128
-
129
- elsif frames[i][0] == 10 && frames[i+1][0] == 10 # 2連続ストライクの場合
130
-
131
- point += 20 + frames[i+1][1] # 2ストライク分のポイント + 次の次のフレームの1投目
132
-
133
- elsif frames[i][0] == 10 # 連続しないストライクの場合
134
-
135
- point += 10 + frames[i+1][0] + frames[i+1][1] # 10 + 次のフレームの1投目 + 次のフレームの2投目
136
-
137
- elsif frame.sum == 10 && frames[0] != 10 # スペアの場合
138
-
139
- point += 10 + frames[i+1][0]
140
-
141
- else # その他の場合
142
-
143
- point += frame.sum
69
+ point += frame.sum
144
-
145
- end
146
-
147
- else # 10フレーム目の処理
148
-
149
- point += frame.sum # 配列の中を足すだけ
150
70
 
151
71
  end
152
72
 

1

編集

2021/01/04 08:54

投稿

sss3150
sss3150

スコア4

test CHANGED
File without changes
test CHANGED
@@ -2,9 +2,21 @@
2
2
 
3
3
  新ルールでのボーリングスコア計算プログラムを書いています。
4
4
 
5
+ 下のようにターミナルで出力させたいです。
6
+
5
7
  ターミナルで以下のように実行しましたがエラーが出てくるので原因と解決方法を知りたいです。
6
8
 
7
- また、コードの中で問題となる部分が
9
+ また、コードの中で問題となる部分があればごご教示お願い致します。
10
+
11
+
12
+
13
+ ```
14
+
15
+ % ./bowling.rb 6390038273X9180X645
16
+
17
+ 139
18
+
19
+ ```
8
20
 
9
21
 
10
22