/
p075.clj
40 lines (36 loc) · 1.11 KB
/
p075.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
(ns p075
(:require [util :refer [gcd]]))
(def L 1500000) ; max length of wire
(def M (int (Math/sqrt (quot L 2)))) ; max of m
(defn solve1 []
(->> (for [m (range 2 (inc M))
n (range 1 m)
k (range)
:let [a (* k (- (* m m) (* n n)))
b (* k 2 m n)
c (* k (+ (* m m) (* n n)))
sum (+ a b c)]
:while (<= sum L)
:when (odd? (- m n))
:when (= 1 (gcd m n))]
[a b c])
(group-by (fn [[a b c]] (+ a b c)))
(filter (fn [[_ ls]] (= 1 (count ls))))
count))
(defn solve2 []
(->> (for [m (range 2 (inc M))
n (range 1 m)
k (range)
:let [a (* k (- (* m m) (* n n)))
b (* k 2 m n)
c (* k (+ (* m m) (* n n)))
sum (+ a b c)]
:while (<= sum L)
:when (odd? (- m n))
:when (= 1 (gcd m n))]
sum)
(group-by identity)
(filter (fn [[_ ls]] (= 1 (count ls))))
count))
(defn solve []
(solve2))