10分でカード配りな!
10分でコーディング | プログラミングに自信があるやつこい!!
ということで、気軽に作ってみた。
(defun deal (num cards) (let ((x 0) (l (make-list num))) (dolist (a (coerce (subseq cards 0 (* num (floor (length cards) num))) 'list)) (push a (elt l x)) (setq x (mod (1+ x) num))) (mapcar (lambda (x) (coerce (reverse x) 'string)) l)))
所要時間問題は問題読む時間込み(5分くらい^^;)で9分45秒ほど。ぎりぎり合格か。時間内にテスト2回しかしてないけど、問題はないはず。
(deal 2 "12121212") |("1111" "2222") (deal 3 "12345678") |("14" "25" "36") (deal 3 "") |("" "" "") (deal 9 "12345678") |("" "" "" "" "" "" "" "" "")
文字列だと面倒くさいからリストにしてー、余る部分はループ前に省いてー、配った後のリストは先に用意してー、返すときは文字列に戻してー、ひっくり返ってるからそれも直してー、という感じで作った。説明はいまいち苦手だ。
その後、あまりエレガントではないので、再帰で書いたらきれいになりそうだと思って考えたのだが、いい方法が思い浮かばなかった。時間を決めて適当に書いた方が作業がはかどるようだ。