Human Problem Solving Test 2025

Lesson to learn:

;;;;;; Fractions Arithmetic


(defun fr (numerator denominator)
  (list 'fr numerator denominator))

(defun get-numerator (fraction) (second fraction))

(defun get-denominator (fraction) (third fraction))

(defun times-fr (fraction-1 fraction-2)
  (let ((numerator-1 (get-numerator fraction-1))
	(numerator-2 (get-numerator fraction-2))
	(denominator-1 (get-denominator fraction-1))
	(denominator-2 (get-denominator fraction-2)))
    (fr (* numerator-1 numerator-2)
	(* denominator-1 denominator-2))))

(defun add-fr (fraction-1 fraction-2)
  (let* ((numerator-1 (get-numerator fraction-1))
	 (numerator-2 (get-numerator fraction-2))
	 (denominator-1 (get-denominator fraction-1))
	 (denominator-2 (get-denominator fraction-2))
	 (new-numerator (+ (* numerator-1 denominator-2)
			   (* numerator-2 denominator-1)))
	 (new-denominator (* denominator-1 denominator-2))
	 (common-gcd (gcd new-numerator new-denominator))
	 (new-fraction (fr (/ new-numerator common-gcd)
			   (/ new-denominator common-gcd))))
    (if (= (/ new-denominator common-gcd) 1)
	(/ new-numerator common-gcd)
	new-fraction)))

(defun add-all-fr (number-1 number-2)
  "Add accepts integers and fr-numbers"
  (let ((fraction-1 (cond ((numberp number-1)
			  (fr number-1 1))
			  (:else number-1)))
	(fraction-2 (cond ((numberp number-2)
			  (fr number-2 1))
			  (:else number-2))))
    (add-fr fraction-1 fraction-2)))
	
	 

Write Complex Numbers Arithmetic (in the very same fashion as above) according to the following article:
Tutorial to Complex Arithmetic