ITP1_2_B Range
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つじゃない時のことを考えたら、汎用性高いなー。
勉強になります。