Project Euler #9 (Pythagorei -Tripletts) in Clojure
-
24-10-2019 - |
Frage
Meine Antwort darauf Problem fühlt sich zu diesen zu sehr an Lösungen in c.
Hat jemand Ratschläge, um dies flüssiger zu machen?
(use 'clojure.test)
(:import 'java.lang.Math)
(with-test
(defn find-triplet-product
([target] (find-triplet-product 1 1 target))
([a b target]
(let [c (Math/sqrt (+ (* a a) (* b b)))]
(let [sum (+ a b c)]
(cond
(> a target) "ERROR"
(= sum target) (reduce * (list a b (int c)))
(> sum target) (recur (inc a) 1 target)
(< sum target) (recur a (inc b) target))))))
(is (= (find-triplet-product 1000) 31875000)))
Lösung
Das Clojure-Euluer-Project hat mehrere Programme, die Sie referenzieren können.
Andere Tipps
Ich habe diesen Algorithmus persönlich verwendet (den ich beschrieben habe hier):
(defn generate-triple [n]
(loop [m (inc n)]
(let [a (- (* m m) (* n n))
b (* 2 (* m n)) c (+ (* m m) (* n n)) sum (+ a b c)]
(if (>= sum 1000)
[a b c sum]
(recur (inc m))))))
Scheint mir viel weniger kompliziert :-)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow