2012年9月26日水曜日

ProjectEuler0001 on clojure

はじめてまともにClojure使ってみた

インターネットを駆使して

Google先生を駆使して

第一の課題はHello World…は面白く無いので

AOJ…と行きたかったが対応してないのでProjectEulerを

LingrのチャットルームではClojureBotなるものがあり、チャットでClojureのコードを発言するとそのまま実行してくれた

それを使って(str 'HelloWorld)くらいは遊んでいたけど、まともに頭をうならせてかいたのは初めて

以下、全ての対話をメモっておく


user> (str 'halloworld)
"halloworld"
user> (defn is-3multiple? [x] (if((rem x 3)==0)))

nil
user> (defn is-multiple? [x r] ((rem x r)==0)) 

nil
user> (defn is-multiple? [x r] (= (rem x r) 0))
#'user/is-multiple?
user> (defn is-3or5multiple [x] (if (is-multiple? x 3) x (if (is-multiple? x 5) x 0)))
#'user/is-3or5multiple
user> (defn PE0001 [] (apply + (for [x (range 1000)] is-3or5multiple)))
#'user/PE0001
user> (PE0001)
 (PE0001)

nil
user> (defn PE0001 [] (apply + (for [x (range 1000)] (is-3or5multiple x))))
#'user/PE0001
user> (PE0001)
233168
user> (defn is-3or5multiple [x] (if (or (is-multiple? x 3) (is-multiple? x 5)) x 0))
#'user/is-3or5multiple
user> (PE0001)
233168


1~2 とりあえずテストのHello World

3~5 数値が3の倍数か調べるコードを書いて失敗
    ifの条件式がおかしい

6~8 数値が任意の数値の倍数か調べるコードを書いて失敗
    ifの条件式がまだおかしい

9~10 やっとおかしいのに気づく

11~12 数値が3か5の倍数か調べるコードを書く

13~14 0~1000の3か5の倍数の数値の合計を調べるコードを書く

15~18 失敗 PE0001の最後がおかしい

19~20 修正

21~22 実行、成功 正しい答えである233168が出る

23~24 orが使えることをLingrで教えてもらい、実践する

25~26 実行、成功

0 件のコメント:

コメントを投稿