るびらな!

RubyをLearnする人の勉強記録。(超)弩(級の)素人なので、誰かダメさがわかる人に罵ってもらったりして、少しずつ知見を広げたいと思っています。

ITP1_2_B Range

ここも押していただけると嬉しいです #=> にほんブログ村 IT技術ブログへ にほんブログ村 IT技術ブログ Rubyへ にほんブログ村 IT技術ブログ Ruby on Railsへ

AOJ第5日目! 今日のお題はなんでしょう?

問題

今回の問題はこちら。->
範囲 | プログラミング入門 | Aizu Online Judge

範囲

3つの整数a, b, cを読み込み、それらが a < b < cの条件を満たすならば"Yes"を、満たさないならば"No"を出力するプログラムを作成して下さい。

Input
3つの整数が空白で区切られて与えられます。

Output
YesまたはNoを1行に出力して下さい。

なんだか拍子抜けするくらい簡単な感じがしますが…

とりあえずいってみよー!

自分のコード

a,b,c = gets.split.map(&:to_i)

if a < b && b < c
  puts "Yes"
else
  puts "No"
end

一応、無難な感じにまとめてみました。

gets.split.map(&:to_i)は、もう出て来すぎて鉄板という感じですね。

その後の出力は、putsの後に後置で条件文を置いても良かったのですが、

無難にif~else~endでまとめてみました。


他の人のコード

さて、他の人はどんなコードにしてるのかなーっと。

最初に解き終わってた人

a,b,c=gets.split.map(&:to_i)
puts a<b&&b<c ? :Yes : :No

あ、後置で条件分岐まで終わらせたのかー。

たしかに、これが一番短い方法かも!

違う条件で攻めた人

a, b, c = gets.split(" ").map(&:to_i)
if b.between?(a, c) and !(a == b) and !(b == c)
  puts "Yes"
else
  puts "No"
end

なるほど、.between?で攻める方法もあったんですね。うまいなぁ。

Arrayのメソッドをうまく使った人

class RangeYesNo
    def judge(number)
        if number == number.sort && number.uniq == number
            puts "Yes"
        else
            puts "No"
        end
    end
end
 
input = gets.split.map(&:to_i)
RangeYesNo.new.judge(input)

なるほど、.sortと.uniqを両方使っても、同じことができるのね。

数値が3つじゃない時のことを考えたら、汎用性高いなー。

勉強になります。