質問するログイン新規登録

回答編集履歴

4

修正

2017/06/16 10:23

投稿

退会済みユーザー
answer CHANGED
@@ -5,7 +5,7 @@
5
5
  count = str.size
6
6
 
7
7
  loop do
8
- str = str.gsub('()', '').gsub('[]', '').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('()', '').gsub('[]', '').gsub('{}', '') # => strから「かっこ」を削除。
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

修正

2017/06/16 10:23

投稿

退会済みユーザー
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

修正

2017/06/16 10:13

投稿

退会済みユーザー
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

修正

2017/06/16 10:13

投稿

退会済みユーザー
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
+ 考えてみました。このプログラムが正確に動くかどうかは分かりません。