回答編集履歴
4
修正
answer
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
count = str.size
|
6
6
|
|
7
7
|
loop do
|
8
|
-
str = str.gsub(
|
8
|
+
str = str.gsub(/\(\)|\[\]|\{\}/, '')
|
9
9
|
str.size == count ? break : count = str.size
|
10
10
|
end
|
11
11
|
|
@@ -45,7 +45,7 @@
|
|
45
45
|
count = str.size # => loopから抜けるために必要。
|
46
46
|
|
47
47
|
loop do # => 無限ループ。
|
48
|
-
str = str.gsub(
|
48
|
+
str = str.gsub(/\(\)|\[\]|\{\}/, '') # => strから「かっこ」を削除。
|
49
49
|
str.size == count ? break : count = str.size
|
50
50
|
# str.size == count ? break : count = str.size
|
51
51
|
# これは三項演算子というものです。
|
3
修正
answer
CHANGED
@@ -33,7 +33,7 @@
|
|
33
33
|
# encoding: utf-8
|
34
34
|
|
35
35
|
# 入れ子かどうかの判定をするプログラム。
|
36
|
-
#
|
36
|
+
# 私のやり方
|
37
37
|
# 1.gsubで「かっこ」を削除しまくる。
|
38
38
|
# 2.ペアになっていない「かっこ」は残る。
|
39
39
|
# 3.文字列の長さが0にならなかったら
|
2
修正
answer
CHANGED
@@ -68,7 +68,7 @@
|
|
68
68
|
end
|
69
69
|
|
70
70
|
sample = ['[]', '[]{}', '[()]{}', '([()]{})', '(])', '[](', '([)]']
|
71
|
-
# => テストに使う文字列を配列にして、一
|
71
|
+
# => テストに使う文字列を配列にして、一つずつ入力しなくて良いようにしています。
|
72
72
|
|
73
73
|
sample.each do |e| # => sampleの中身を一つずつ取り出してeに入れています。
|
74
74
|
puts "『#{e}』は#{check(e)}。" # => eとcheckで処理した結果をputsで表示させます。
|
1
修正
answer
CHANGED
@@ -27,4 +27,51 @@
|
|
27
27
|
『(])』は入れ子ではないです。
|
28
28
|
『[](』は入れ子ではないです。
|
29
29
|
『([)]』は入れ子ではないです。
|
30
|
-
```
|
30
|
+
```
|
31
|
+
説明付きバージョン
|
32
|
+
```Ruby
|
33
|
+
# encoding: utf-8
|
34
|
+
|
35
|
+
# 入れ子かどうかの判定をするプログラム。
|
36
|
+
# 今回のやり方
|
37
|
+
# 1.gsubで「かっこ」を削除しまくる。
|
38
|
+
# 2.ペアになっていない「かっこ」は残る。
|
39
|
+
# 3.文字列の長さが0にならなかったら
|
40
|
+
# 「正しい」入れ子になっていない。
|
41
|
+
# 0になったら「正しい」入れ子になっている。
|
42
|
+
|
43
|
+
# 入れ子判定プログラム本体
|
44
|
+
def check(str)
|
45
|
+
count = str.size # => loopから抜けるために必要。
|
46
|
+
|
47
|
+
loop do # => 無限ループ。
|
48
|
+
str = str.gsub('()', '').gsub('[]', '').gsub('{}', '') # => strから「かっこ」を削除。
|
49
|
+
str.size == count ? break : count = str.size
|
50
|
+
# str.size == count ? break : count = str.size
|
51
|
+
# これは三項演算子というものです。
|
52
|
+
# ==============================
|
53
|
+
# if str.size == count
|
54
|
+
# break
|
55
|
+
# else
|
56
|
+
# count = str.size
|
57
|
+
# end
|
58
|
+
# ==============================
|
59
|
+
# これと同じ意味です。少し短く書けるので使っています。
|
60
|
+
# この部分では繰り返しを続けるかどうかの判定を行っています。
|
61
|
+
# 文字列の長さが、「かっこ」を削除する前と同じなら
|
62
|
+
# loopを抜けて、違っていたら今の文字列の長さを
|
63
|
+
# countに新しく入れてloopを続けます。
|
64
|
+
end
|
65
|
+
|
66
|
+
str.size.zero? ? '入れ子です' : '入れ子ではないです'
|
67
|
+
# => loopを抜けた後の処理です。ここで返す文字列を選択しています。
|
68
|
+
end
|
69
|
+
|
70
|
+
sample = ['[]', '[]{}', '[()]{}', '([()]{})', '(])', '[](', '([)]']
|
71
|
+
# => テストに使う文字列を配列にして、一々入力しなくて良いようにしています。
|
72
|
+
|
73
|
+
sample.each do |e| # => sampleの中身を一つずつ取り出してeに入れています。
|
74
|
+
puts "『#{e}』は#{check(e)}。" # => eとcheckで処理した結果をputsで表示させます。
|
75
|
+
end
|
76
|
+
```
|
77
|
+
考えてみました。このプログラムが正確に動くかどうかは分かりません。
|