ITP1_2_A Small, Large, or Equal
さてさて、AOJ第4日目。元気に行ってみましょー!
問題
大小関係
2つの整数 a, b を読み込んで、a と b の大小関係を出力するプログラムを作成して下さい。
Input
入力は空白で区切られた2つの整数 a, b から構成されています。Output
a より b の方が大きければa < b
a より b の方が小さければ、
a > b
a と b が等しければ、
a == b
と出力して下さい。
なるほど、また数字は半角スペース区切りで、今度は順番を変える必要はなく
等号か不等号を書け、と… よし、ifかな。aとbの大小関係で場合分けしたらいいよね。
自分のコード
nums = gets.split(" ") if nums[0].to_i<nums[1].to_i puts "a < b" elsif nums[0].to_i==nums[1].to_i puts "a == b" else puts "a > b" end
そして、書いてみてから、最初の1行を
nums = gets.split.map(&:to_i)
と書くべきだったと反省。前回の学習が生きてませんね。
他の人のコード
一番短い人
相変わらず、一番短いのはelysion_halcyonさん。
a,b=gets.split.map &:to_i puts"a #{%w(== > <)[a<=>b]} b"
2行! しかも、2行目はどういうことなの?!
あ、いや、うん。
比較演算子の最後に載ってましたね…
読み飛ばしてました。
確かに、こうすれば短いコードで表現できましたね。
一番長い人
またクラス作る系かー、と思ったけど、最後まで読んで納得。
class SmallLargeOrEqual def result(a, b) result_val = b - a if result_val > 0 puts "a < b" elsif result_val < 0 puts "a > b" else puts "a == b" end end end INPUT_LIMIT = 2 input = gets.split.map(&:to_i) if input.length == INPUT_LIMIT SmallLargeOrEqual.new.result(input[0], input[1]) else puts "You must input only two parameter" end
数値が2個じゃなかった時のための例外を考えておくだなんて、
経験者(っぽい人/失礼!)は違うなー!
やっぱり、色々見ると勉強になります。
同じ方法論でスマートに書いてるっぽい人
私と基本の考え方は同じだけど、もっとスマートに書いてる人がこちら。
a = gets.split(" ").map! {|i| i.to_i} print "a " print "<" if a[0] < a[1] print "==" if a[0] == a[1] print ">" if a[0] > a[1] print " b\n"
なるほどね。演算子だけを条件分岐で書いたのね。
こうすれば、共通部分は省略できていいねー。
case文をうまく使ってるっぽい人
a, b = gets.split.map(&:to_i) c = case a <=> b when -1 '<' when 0 '==' when 1 '>' end puts "a #{c} b"
なるほど、「<=>」を使ってケースを分けて、
cに演算子を文字列として代入してるのね。
こういう方法もあるのかー。
なんか、他の人のコードを読むのが楽しみになってきましたね。
明日もがんばろうっと。