Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2009-05-15

「10分でコーディング」を13分で

22:49 | 「10分でコーディング」を13分で - わだばLisperになる を含むブックマーク はてなブックマーク - 「10分でコーディング」を13分で - わだばLisperになる

kozimaさんがエントリされてたので自分も挑戦してみました!

元ネタ:

全然問題の意味が分からない!、時間がない…などと、あわあわしながら

(defun deal (n cards)
  (let ((ans (make-list n)))
    (loop :for i :from 0 :below (* n (floor (length cards) n))
          :do (push (char cards i) (nth (mod i n) ans)))
    (map-into ans (lambda (x) (coerce (nreverse x) 'string)) ans)))

というのが13分後にできました。

ちなみに最初は、同じ種類の文字だけ集めてみたりして無駄な努力をしていました(笑)

(deal 3 "123123123")
;=> ("111" "222" "333")

(deal 4 "123123123")
;=> ("12" "23" "31" "12")

(deal 6 "012345012345012345")
;=> ("000" "111" "222" "333" "444" "555")

(deal 4 "111122223333")
;=> ("123" "123" "123" "123")

(deal 1 "012345012345012345")
;=> ("012345012345012345")

(deal 6 "01234")
;=> ("" "" "" "" "" "")

(deal 2 "")
;=> ("" "")

コードに謎の部分はあるものの、まあ良しとします。

どうも自分は、あらゆる配列的なものはリストとして考えているようで、インデックス付きの配列という発想がぱっとは出てこないようです。

先頭から順に配ってるのに気付くのに多分7、8分かかりました…(´▽`*)

しかし、これ3分とかで解くのは自分の頭じゃ無理ですなー。