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

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

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

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

Q&A

1回答

3069閲覧

ruby for for for...rubyではそもそもfor使わないみたいですがなぜか使ってしまう件について

garchomp

総合スコア128

Ruby

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

1グッド

1クリップ

投稿2017/05/30 04:38

初心者丸出しの質問してしまい大変申し訳ございません(汗)
今回も例のごとく(?)問題を解いているとき、自力で解いたら以下のようになりました。

ruby

1per="perfect" 2nei="neither" 3nea="nearly" 4 5num=gets.to_i 6 7for i in 1..num do 8 total=0 9 hairetu=[] 10 data=gets.to_i 11 # p data 12 for j in 1..data do 13 if data%j==0 14 hairetu.push(j) 15 end 16 end 17 # p hairetu 18 datas=hairetu.size-2 19 20 for k in 0..datas do 21 total+=hairetu[k].to_i 22 end 23 # p total 24 totals=total+1 25 if data==total 26 puts per 27 elsif data==totals 28 puts nea 29 else 30 puts nei 31 end 32end 33 34 35

はい。超初心者丸出しですね()
一応デバッグなどを取りながら個人的に書きやすかったfor文を多用していったわけですが、本来はeachとかも使って行けばもっと良かったのかなーと思っています・・・

知り合いに効いてみたら、結構ありがちなこと…みたいですが、やはりスマートに記述できるようにはなりたいものです。

そこで、しばらくの間は処理メソッドを覚えて一通り扱える程度まで持っていこうと思うのですが、最低限押さえておきたい文はどれでしょうか?

また、リファレンス的な使い方で文法などをざっと確認できるところもありましたら紹介も合わせてお願いいたします<m(__)m>

DrqYuto👍を押しています

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

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

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

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

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

guest

回答1

0

ruby

1per="perfect" 2nei="neither" 3nea="nearly" 4 5num=gets.to_i 6 7num.times do 8 data=gets.to_i 9 # p data 10 hairetu=Array.new(data){|j| j+1 if data%(j+1)==0}.compact 11 # p hairetu 12 total=hairetu[0...-1].inject(:+) 13 # p total 14 totals=total+1 15 if data==total 16 puts per 17 elsif data==totals 18 puts nea 19 else 20 puts nei 21 end 22end

分岐処理は何をやっているのかがわからずそのままです。hairetu(因数を求める)とtotal(因数の和を求める)は1行になりました。

rubyには「イテレータ」というオブジェクトに対して繰り返し処理ができる概念があります。検索してみてください。

リファレンスマニュアル

投稿2017/05/30 10:12

編集2017/05/30 10:14
NCC1701

総合スコア1680

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

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

garchomp

2017/05/30 12:53

条件分岐は、問題の最後で、完全数ならperfactを出力、ほぼ完全数(完全数-1)ならnearlyそれ以外ならneitherという文字列を返すようにしています(本来はわざわざ変数にしなくてもいいのですが、作業開始前のメモとしての役割と、もう一つは、変数でさくっと書けるようにして考えるときは処理を考えることだけに専念したかった。英語苦手なのでw) イテレータという概念ですね・・・見てみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問