質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

1093閲覧

ruby 初心者です。問題の解き方がわかりません。

way

総合スコア9

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2017/07/31 15:45

###悩み
コードは途中まで考えることができたのですが、エラーが起こったりして問題の答えとなるコードの考えが及びません。
この途中のコードを実行までに至るまでにはどうすればいいのか、または私のコードを無視して一から考えるならばどのようなコードになるのか教えていただきたいです。
根本的に考え方が間違っている点もあると思いますので、指摘していただると嬉しいです。

初心者なので、何行目のコードがどういう処理をもたらすのかも記載していただけますと大変助かります。
お力を貸していただけると幸いです。よろしくお願いいたします。

###問題

言語はRUBYです。 丸括弧、波括弧、角括弧から構成される文字列について、 各括弧が正しい入れ子関係になっているかどうかを判定するプログラムを作ってください。 <正しい入れ子関係の例> [] []{} [()]{} ([()]{}) <誤った入れ子関係の例> (]) ... 開いていない角括弧を閉じている []( ... 開いた丸括弧を閉じていない ([)] ... 開いた角括弧を閉じる前に丸括弧を閉じている

###途中で行き詰ったコード

puts "括弧の文字列を入力してください" #例:{()} str = gets #入力された文字を正しい入れ子関係になっているかを判断したい。 #条件式 str.each_char do |brackets| str.gsub(/ \( \) | \{ \} | \[ \] /) #strから"()"または"{}","[]"を取り除く。取り除かれなかったものはstrに残る。 #(このコードは間違っているかもしれません) #取り除いたものからtrueかfalseか判断する条件式 #strに文字列が一つも残らなければtrue.残ればfalse if brackets.size.zero? puts "正しい入れ子です" else puts "誤った入れ子です" end end

###考え方

getsで入力された括弧の文字列に対してgsubで括弧のペアを削除し、変数bracketsに文字列が残らなければtrueとなり正しいと出力される。文字列が残っていればfalseとなるコードを考えています。

この考えをコードに落とし込みたいのですがわかりませんでした。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

rubyについて質問です。
こちらの質問に回答が書いてあります。

Ruby

1# encoding: utf-8 2 3def check(str) 4 count = str.size 5 6 loop do 7 str = str.gsub(/\(\)|\[\]|\{\}/, '') 8 str.size == count ? break : count = str.size 9 end 10 11 str.size.zero? ? '入れ子です' : '入れ子ではないです' 12end 13 14sample = ['[]', '[]{}', '[()]{}', '([()]{})', '(])', '[](', '([)]'] 15 16sample.each do |e| 17 puts "『#{e}』は#{check(e)}。" 18end

Ruby

1# encoding: utf-8 2 3a = gets.chomp 4b = a.size 5 6loop do 7 a.gsub!(/\(\)|\[\]|\{\}/, '') 8 a.size == b ? break : b = a.size 9end 10 11puts a.size.zero? ? '入れ子です' : '入れ子ではないです' 12

Ruby

1# encoding: utf-8 2 3a = gets.chomp 4b = a.size 5 6loop do 7 a.gsub!(/\(\)|\[\]|\{\}/, '') 8 a.size == b ? break : b = a.size 9end 10 11if a.size.zero? 12 puts '入れ子です' 13else 14 puts '入れ子ではないです' 15end

投稿2017/07/31 15:47

編集2017/07/31 16:06
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

way

2017/07/31 15:50

早々の回答ありがとうございます。 そちらの方も確認させていただいたのですが、正直理解が及ばずgetsメソッドを使った場合どのようなコードになるのかわからなかったため質問させていただいております。 説明不足で申し訳ありません。
退会済みユーザー

退会済みユーザー

2017/07/31 15:56 編集

sample.each do |e| puts "『#{e}』は#{check(e)}。" end の部分を puts check(gets.chomp) に変更するだけです。(sample配列も削除してよい。) 連続で、入力し続けるのが大変だったので 予め配列で入力値をもって、連続で実行している というのが私のコードです。
way

2017/08/01 06:03

ありがとうございます!解決できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問