回答編集履歴

4

修正

2017/06/16 10:23

投稿

退会済みユーザー
test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  loop do
14
14
 
15
- str = str.gsub('()', '').gsub('[]', '').gsub('{}', '')
15
+ str = str.gsub(/\(\)|\[\]|\{\}/, '')
16
16
 
17
17
  str.size == count ? break : count = str.size
18
18
 
@@ -92,7 +92,7 @@
92
92
 
93
93
  loop do # => 無限ループ。
94
94
 
95
- str = str.gsub('()', '').gsub('[]', '').gsub('{}', '') # => strから「かっこ」を削除。
95
+ str = str.gsub(/\(\)|\[\]|\{\}/, '') # => strから「かっこ」を削除。
96
96
 
97
97
  str.size == count ? break : count = str.size
98
98
 

3

修正

2017/06/16 10:23

投稿

退会済みユーザー
test CHANGED
@@ -68,7 +68,7 @@
68
68
 
69
69
  # 入れ子かどうかの判定をするプログラム。
70
70
 
71
- # 今回のやり方
71
+ # のやり方
72
72
 
73
73
  # 1.gsubで「かっこ」を削除しまくる。
74
74
 

2

修正

2017/06/16 10:13

投稿

退会済みユーザー
test CHANGED
@@ -138,7 +138,7 @@
138
138
 
139
139
  sample = ['[]', '[]{}', '[()]{}', '([()]{})', '(])', '[](', '([)]']
140
140
 
141
- # => テストに使う文字列を配列にして、一入力しなくて良いようにしています。
141
+ # => テストに使う文字列を配列にして、一つずつ入力しなくて良いようにしています。
142
142
 
143
143
 
144
144
 

1

修正

2017/06/16 10:13

投稿

退会済みユーザー
test CHANGED
@@ -57,3 +57,97 @@
57
57
  『([)]』は入れ子ではないです。
58
58
 
59
59
  ```
60
+
61
+ 説明付きバージョン
62
+
63
+ ```Ruby
64
+
65
+ # encoding: utf-8
66
+
67
+
68
+
69
+ # 入れ子かどうかの判定をするプログラム。
70
+
71
+ # 今回のやり方
72
+
73
+ # 1.gsubで「かっこ」を削除しまくる。
74
+
75
+ # 2.ペアになっていない「かっこ」は残る。
76
+
77
+ # 3.文字列の長さが0にならなかったら
78
+
79
+ # 「正しい」入れ子になっていない。
80
+
81
+ # 0になったら「正しい」入れ子になっている。
82
+
83
+
84
+
85
+ # 入れ子判定プログラム本体
86
+
87
+ def check(str)
88
+
89
+ count = str.size # => loopから抜けるために必要。
90
+
91
+
92
+
93
+ loop do # => 無限ループ。
94
+
95
+ str = str.gsub('()', '').gsub('[]', '').gsub('{}', '') # => strから「かっこ」を削除。
96
+
97
+ str.size == count ? break : count = str.size
98
+
99
+ # str.size == count ? break : count = str.size
100
+
101
+ # これは三項演算子というものです。
102
+
103
+ # ==============================
104
+
105
+ # if str.size == count
106
+
107
+ # break
108
+
109
+ # else
110
+
111
+ # count = str.size
112
+
113
+ # end
114
+
115
+ # ==============================
116
+
117
+ # これと同じ意味です。少し短く書けるので使っています。
118
+
119
+ # この部分では繰り返しを続けるかどうかの判定を行っています。
120
+
121
+ # 文字列の長さが、「かっこ」を削除する前と同じなら
122
+
123
+ # loopを抜けて、違っていたら今の文字列の長さを
124
+
125
+ # countに新しく入れてloopを続けます。
126
+
127
+ end
128
+
129
+
130
+
131
+ str.size.zero? ? '入れ子です' : '入れ子ではないです'
132
+
133
+ # => loopを抜けた後の処理です。ここで返す文字列を選択しています。
134
+
135
+ end
136
+
137
+
138
+
139
+ sample = ['[]', '[]{}', '[()]{}', '([()]{})', '(])', '[](', '([)]']
140
+
141
+ # => テストに使う文字列を配列にして、一々入力しなくて良いようにしています。
142
+
143
+
144
+
145
+ sample.each do |e| # => sampleの中身を一つずつ取り出してeに入れています。
146
+
147
+ puts "『#{e}』は#{check(e)}。" # => eとcheckで処理した結果をputsで表示させます。
148
+
149
+ end
150
+
151
+ ```
152
+
153
+ 考えてみました。このプログラムが正確に動くかどうかは分かりません。