mixiの「自学自習自力 文系プログラマー」コミュにあった問題です。
●◆■▲★×4=★▲■◆●
同じ数字がひとつ入って、それぞれ同じ記号は同じ数字が入る。
●、◆、■、▲、★に適切な数字を求めよ。
まず、Pythonで。
from itertools import product, imap for nums in imap("".join, product("0123456789", repeat=5)): if int(nums)*4 == int(nums[::-1]): print nums
次にClojureに直訳・・・productが無い!以前作ったのproduct.cljとしてclasspathの通ったところにおいてください。
clojure.contrib.combinatorics.cartesian-productを使いましょう。
(use '[clojure.contrib.combinatorics :only (cartesian-product)]) (def degits "0123456789") (defn product-repeat [s n] (apply cartesian-product (take n (repeat s)))) (defn chars-to-int [s] (Integer/parseInt (apply str s))) (defn matched-numbers [] (for [nums (product-repeat degits 5) :when (= (* (chars-to-int nums) 4) (chars-to-int (reverse nums))) ] nums)) (doseq [nums (matched-numbers)] (println nums))