カード配り問題
なんかいろんな場所で見かけたのでやってみた。
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で無理矢理枚数を合わせている。
追記。引数名が指定の物と異なっていたので修正しました。