今日の問題はかなり簡単です。
プログラミングに自信があるやつこい!!
できるだけ早い時間でエレガントなコードを書きましょう。
あまりに簡単なので制限時間を10分としてやってみてください。
これ以上かかった人は
自分はかなりプログラミングができない。
こうですか (> <)
簡単だと思ってたら下の方の例が通らなくて書き直し始めたのが 10 分くらいで書き直し終わったのが 20 分。そこから RSpec 使ってみようとググって RSpec のインストールからテストを通し終えるのに 10 分。トータルで 30 分 (> <)
class Cards def deal(num , deck) list = [] if num <= deck.length rem = deck.length % num max = rem == 0 ? deck.length : deck.length - rem 0.upto(max-1){|n| (list[pos = n % num] ||= "") << deck[n,1].to_s } else 0.upto(num - 1){|n| list[n] = "" } end list end end
require 'cards' describe Cards, "when 3" do it "should be [111,222,333]" do Cards.new.deal(3,"123123123").should == ["111","222","333"] end it "should be [111,222,333]" do Cards.new.deal(3,"123123123").should == ["111","222","333"] end it "should be [12,23,31,12]" do Cards.new.deal(4,"123123123").should == ["12","23","31","12"] end it "should be [000, 111, 222, 333, 444, 555 ]" do Cards.new.deal(6,"012345012345012345").should == ["000", "111", "222", "333", "444", "555"] end it "should be [123, 123, 123, 123 ]" do Cards.new.deal(4,"111122223333").should == ["123", "123", "123", "123"] end it "should be [012345012345012345]" do Cards.new.deal(1,"012345012345012345").should == ["012345012345012345"] end it "should be [, , , , , ]" do Cards.new.deal(6,"01234").should == ["", "", "", "", "", "" ] end it "should be [,]" do Cards.new.deal(2,"").should == ["",""] end end
spec cards_spec.rb ........ Finished in 0.035 seconds 8 examples, 0 failures Hit any key to close this window...
追記
初期化を入れればもうちょっと綺麗になるのか
class Cards def deal(num , deck) list = Array.new(num).map{|n| ""} rem = deck.length % num max = rem == 0 ? deck.length : deck.length - rem 0.upto(max-1){|n| list[n % num] << deck[n,1].to_s} list end end
はまりやすいのが
new(size = 0, val = nil) -> Array
class Array
長さ size の配列を生成し、各要素を val で初期化して返します。
要素毎に val が複製されるわけではないことに注意してください。全要素が同じオブジェクト val を参照します
なんだけど、なんでこういう仕様なんだろう?単純に val で各要素を初期化すると思っちゃうんだけど。