Euler № 9 проекта (Пифагорейские триплеты) в Clojure

Мой ответ на эту проблему чувствует совсем как эти решения в C.

У кого-либо есть совет сделать это большим количеством lispy?

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

6
задан Community 23 May 2017 в 12:30
поделиться

2 ответа

В проекте clojure-euluer-project есть несколько программ, на которые вы можете ссылаться.

7
ответ дан 9 December 2019 в 22:29
поделиться

Я лично использовал этот алгоритм (который я нашел описанным здесь):

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

Мне кажется гораздо менее сложным :-)

4
ответ дан 9 December 2019 в 22:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: