問題
FizzBuzz - これが10分でできない人は自分がかなりプログラミングができないというつらい事実を認識しましょう。 - Qiita
人数とカードが与えられたとき、分配後のカードを配列として返す関数を作成せよ。
カードは与えられた文字列の前から順番に配られ、配られるカードの枚数は均等で余りは無視することとする。
解答
def deal(people, cards)
cards.chars.each_slice(people).take(cards.size / people).transpose
end
deal(5, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
=> [["a", "f", "k", "p", "u", "z", "E", "J", "O", "T"], ["b", "g", "l", "q", "v", "A", "F", "K", "P", "U"], ["c", "h", "m", "r", "w", "B", "G", "L", "Q", "V"], ["d", "i", "n", "s", "x", "C", "H", "M", "R", "W"], ["e", "j", "o", "t", "y", "D", "I", "N", "S", "X"]]
解答2
問題文が曖昧なので、文字列の配列で渡される場合の解答も。
.chars
を取ればいいだけ。
def deal(people, cards)
cards.each_slice(people).take(cards.size / people).transpose
end
トランプ作る
cards = %w[♥ ♣ ♦ ♠].product(["Ace", *2..10, *%w[Jack Queen King]]).map(&:join).push *["JOKER"] * 2
deal 5, cards
=> [["♥Ace", "♥6", "♥Jack", "♣3", "♣8", "♣King", "♦5", "♦10", "♠2", "♠7"], ["♥2", "♥7", "♥Queen", "♣4", "♣9", "♦Ace", "♦6", "♦Jack", "♠3", "♠8"], ["♥3", "♥8", "♥King", "♣5", "♣10", "♦2", "♦7", "♦Queen", "♠4", "♠9"], ["♥4", "♥9", "♣Ace", "♣6", "♣Jack", "♦3", "♦8", "♦King", "♠5", "♠10"], ["♥5", "♥10", "♣2", "♣7", "♣Queen", "♦4", "♦9", "♠Ace", "♠6", "♠Jack"]]
Rubyだとチートすぎる気がする
追記
え、えっとさっき変なことになってたけどtransposeつけ忘れただけです。
(消したい・・・)