basyura's blog

あしたになったらほんきだす。

10 分でコーディング

今日の問題はかなり簡単です。
できるだけ早い時間でエレガントなコードを書きましょう。
あまりに簡単なので制限時間を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
長さ size の配列を生成し、各要素を val で初期化して返します。
要素毎に val が複製されるわけではないことに注意してください。全要素が同じオブジェクト val を参照します

class Array

なんだけど、なんでこういう仕様なんだろう?単純に val で各要素を初期化すると思っちゃうんだけど。