るびらな!

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

ITP1_2_C Sorting Three Numbers

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

さて、AOJ第6日目。今日も楽しくRuby

問題

今日の問題はこちら。->3つの数の整列 | プログラミング入門 | Aizu Online Judge

3 つの数の整列
3つの整数を読み込み、それらを値が小さい順に並べて出力するプログラムを作成して下さい。

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

Output
小さい順に並べ替えた3つの整数を1行に出力して下さい。整数の間に1つの空白を入れて下さい。

なるほどー。並べ替えですね。下手を打つとコードが長くなるパターンだ。

自分のコード

nums = gets.split.map(&:to_i)
puts nums.sort.join(" ")

もう、面倒なく無駄なく攻めるなら、Array.sortだよね!ということで、

numsをArrayとして入力値を整数にして放り込み、

「.sort」で並べ替えて即「.join(" ")」!

鉄板だよね!

ということで放り込んだら、無事Acceptされたものの、実行速度はなぜか遅かった。。。

サーバーが混んでたってことにしとこう! 他の人と0.01secしか違わないし!


他の人のコード

処理が最速で終わった人

a = gets.chomp.split(" ").map(&:to_i).sort
puts a.join(" ")

えっ、ほとんど変わらなくない?

sortをどこでかけるかと、chompが入ってるかどうか?

そんなに処理速度が変わるものなのかな・・・??

一番短い人

他の人が、短くてもソースが40 B以上ある中、一人だけ24Bという非常に尖った人が。

そのソースがこちら。

puts gets.split.sort*' '

1行だよ! しかも、配列の定義とかないし、

よく考えたらこれが一番短いと思うけど、やっぱ攻めてるなー。。。

特に長かった人

逆に、他の人が40B程度の長さのコードで終わっている中、

一人だけ420Bという逆に長すぎて目立ってる人も。

class SortingThreeNumbers
    def sorting(array)
        array.sort.each_with_index do |val, i|
             unless i == 2 #配列の末尾ではない場合はスペースを付加  
                print "#{val} "
             else
                puts "#{val}"
             end
        end
    end
end
 
INPUT_LIMIT = 3
input = gets.split.map(&:to_i)
 
if input.length == INPUT_LIMIT
    SortingThreeNumbers.new.sorting(input)
else
    puts "You must input only #{INPUT_LIMIT} parameter"
end

う、うん。。

なんか、色々考えて例外処理とかもやってるけど、何か方向性が違う気がする…

それとも、本当に汎用のgemとか組もうと思ったらこれくらい必要になるの??

うーん・・・