;; basics.clj       Dave Reed         4/1/26
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; This function squares a number
(defn square   [x]
  (* x x))

(defn ft->m [ft]
  (* ft 0.3048))

(defn m->ft [m]
  (/ m 0.3048))

(defn m->ft [m]
  (/ m (ft->m 1)))

(defn sum-of-squares [x y]
  (+ (* x x) (* y y)))

(defn square-of-sum [x y]
  (* (+ x y) (+ x y)))

(defn round [num]
  (int (+ num 0.5)))

(defn palindrome? [word]
  (= (seq word) (reverse word)))

(defn fahr->celsius [f]
  (* (/ 5.0 9.0) (- f 32.0)))

(defn celsius->fahr [c]
  (+ (* (/ 9.0 5.0) c) 32.0))

(defn BA [hits at-bats]
  (round (* 1000.0 (/ hits at-bats))))

(defn wind-chill [temp wind]
  (+ 35.74 (* 0.6215 temp) (* (- (* 0.4275 temp) 35.75) (java.lang.Math/pow wind 0.16))))

(defn my-abs [num]
  (if (< num 0)
    (- 0 num)
    num))

(defn grade [test1 test2]
  (if (> test2 test1)
    test2
    (/ (+ test1 test2) 2.0)))

(defn pass-fail [test1 test2]
  (if (or (and (>= test1 60) (> test2 60))
          (>= (/ (+ test1 test2) 2.0) 70))
    :pass
    :fail))

(defn compare-nums [num1 num2]
  (cond (> num1 num2) :greater
        (< num1 num2) :lesser
        :else :equal))

(defn letter-grade [avg]
  (cond (>= avg 90) :A
        (>= avg 80) :B
        (>= avg 70) :C
        (>= avg 60) :D
        :else :F))

(defn leap-year? [year]
  (cond (zero? (rem year 400)) true
        (zero? (rem year 100)) false
        :else (zero? (rem year 4))))

(defn leap-year? [year]
  (and (zero? (rem year 4))
       (or (zero? (rem year 400))
           (not (zero? (rem year 100))))))

(defn days-in-year [year]
  (if (leap-year? year)
    366
    365))

(defn wind-chill [temp wind]
  (cond (<= wind 3) temp
        (< temp 50)  (+ 35.74 (* 0.6215 temp)
                        (* (- (* 0.4275 temp) 35.75)
                           (java.lang.Math/pow wind 0.16)))
        :else nil))
