なぞなぞです。プログラマなら解けるはず

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))