Created
October 29, 2009 21:08
-
-
Save anonymous/221826 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; Project euler problem 138 | |
; http://projecteuler.net/index.php?section=problems&id=138 | |
(use 'clojure.contrib.math) | |
(defn height [base leg] | |
(sqrt (- (expt leg 2) (expt (/ base 2) 2)))) | |
(defn base [leg height] | |
(* 2 (sqrt (- (expt leg 2) (expt height 2))))) | |
(defn valid? [triangle] | |
(let [l (triangle :leg) b (triangle :base) h (triangle :height)] | |
(and | |
(= (int l) l) | |
(or | |
(= h (dec b)) | |
(= h (inc b)))))) | |
(defn leg [base height] | |
(sqrt (+ (expt (/ base 2) 2) (expt height 2)))) | |
(defn whole-factors [x] | |
(map | |
(fn [n] [n (/ x n)]) | |
(filter #(zero? (rem x %)) (range 1 (inc x))))) | |
(defn make-triangle [b-h] | |
(let [base (first b-h) | |
height (last b-h)] | |
{:base base :height height :leg (leg base height)})) | |
(defn make-triangles [size] | |
(filter valid? (map make-triangle (whole-factors (* 2 size))))) | |
(defn sum-legs [triangles] | |
(reduce + (map :leg triangles))) | |
(println (sum-legs (take 12 (reduce (fn [xs y] (into xs (make-triangles y))) [] (iterate inc 1))))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment