回答編集履歴

1

移動

2020/11/26 23:00

投稿

asm
asm

スコア15149

test CHANGED
@@ -53,3 +53,89 @@
53
53
  ...
54
54
 
55
55
  ```
56
+
57
+
58
+
59
+ ----
60
+
61
+
62
+
63
+ 「上から判定する」という事に注意して
64
+
65
+ if a && a.between?(1,18) && b == 10
66
+
67
+ などとする必要があります。
68
+
69
+ が、無駄に長くなるのでsafe navigation operatorを用いて
70
+
71
+
72
+
73
+ ```erb
74
+
75
+ <span>
76
+
77
+ <% if a.nil? && b.nil? %>Finish
78
+
79
+ <% elsif a.nil? && b&.between?(11,18) %>アウトスタートで、インプレイ中 <%= b - 1 %>
80
+
81
+ <% elsif a.nil? && b == 10 %>アウトスタートで、アウト終了 <%= a %>
82
+
83
+ <% elsif a == 1 && b.nil? %>インスタートで、イン終了 <%= a - 1 %>
84
+
85
+ <% elsif a == 1 && b&.between?(11,18) %>インスタートで、インプレイ中 <%= b - 1 %>
86
+
87
+ <% elsif a&.between?(2,9) && b == 10 %>アウトスタートで、アウトプレイ中 <%= a - 1 %>
88
+
89
+ <% elsif a&.between?(1,9) && b.nil? %>インスタートで、アウトプレイ中 <%= a - 1 %>
90
+
91
+ <% else %>なんか変なスコアのいれ方です
92
+
93
+ <% end %></span><br>
94
+
95
+ ```
96
+
97
+ などとするとよいでしょう。
98
+
99
+
100
+
101
+ ただし、これは見やすいのはいいのですが何度か同じ判定をしているのが非効率で気になりますね。
102
+
103
+
104
+
105
+ ---
106
+
107
+
108
+
109
+ パターンマッチを用いた場合は
110
+
111
+
112
+
113
+ ```erb
114
+
115
+ <span>
116
+
117
+ <% case [a, b]
118
+
119
+ <% in [nil,nil] %>Finish
120
+
121
+ <% in [nil, 10] %>アウトスタートで、アウト終了 <%= a %>
122
+
123
+ <% in [1, nil] %>インスタートで、イン終了 <%= a - 1 %>
124
+
125
+ <% in [nil, 11..18 => hole] %>アウトスタートで、インプレイ中 <%= hole - 1 %>
126
+
127
+ <% in [1, 11..18 => hole] %>インスタートで、インプレイ中 <%= hole - 1 %>
128
+
129
+ <% in [2..9 => hole, 10] %>アウトスタートで、アウトプレイ中 <%= hole - 1 %>
130
+
131
+ <% in [1..9 => hole, nil] %>インスタートで、アウトプレイ中 <%= hole - 1 %>
132
+
133
+ <% else %>なんか変なスコアのいれ方です
134
+
135
+ <% end %></span><br>
136
+
137
+ ```
138
+
139
+
140
+
141
+ 等も可能ですが、2.7時点ですと警告が出るなど常用は難しいです。