読者です 読者をやめる 読者になる 読者になる

カード配り問題

なんかいろんな場所で見かけたのでやってみた。
10分でコーディング|プログラミングに自信があるやつこい!!

var Cards = function() {};
Cards.prototype = {
  deal: function(numPlayers, deck) {
    var len = (deck.length / numPlayers) >>> 0;
    var result = new Array(numPlayers);
    for (var i = 0; i < numPlayers; i++) {
      result[i] =
        Array.filter(deck,
                     function(_, j) j % numPlayers == i)
             .slice(0, len)
             .join('');
    }
    return result;
  }
};

var cards =  new Cards();
alert(cards.deal(4, "123123123"));
alert(cards.deal(6, "012345012345012345"));
alert(cards.deal(4, "111122223333"));
alert(cards.deal(1, "012345012345012345"));
alert(cards.deal(6, "01234"));
alert(cards.deal(6, "01234"));

コードを書くのに5分くらい。問題読むのと合わせて10分以内かな?
最初,全員に同じ枚数だけ配るという条件を見逃していたので,カードを配った後にsliceで無理矢理枚数を合わせている。

追記。引数名が指定の物と異なっていたので修正しました。