; variables ; 0:N, 1:E, 2:S, 3:W (defparameter *direction* 0) (defparameter *x* 0) (defparameter *y* 0) (defparameter *k* 1) (defvar *upper* (expt 10 9)) (defvar *lower* (* -1 (expt 10 9))) ;functions (defun check_xyk () (cond ((or (or (> *x* *upper*) (< *x* *lower*)) (or (> *y* *upper*) (< *y* *lower*)) (or (> *k* *upper*) (< *k* 1))) (print "NO")) (t (print "YES")) ) ) (defun xy_quadrant (x y) (cond ((and (> x 0) (> y 0)) 1) ((and (< x 0) (> y 0)) 2) ((and (< x 0) (< y 0)) 3) ((and (> x 0) (< y 0)) 4) (t nil)) ) (defun number_adv_1d (x k) (cond ((= x 0) 0) ((< x k) 1) ((= (mod x k) 0) (/ x k)) (t (1+ (truncate x k)))) ) (defun number_advance (x y k) (+ (number_adv_1d x k) (number_adv_1d y k)) ) (defun number_rotate (x y quadrant) (cond ((= x 0) (if (> y 0) 0 2)) ((= y 0) 1) (t (case quadrant (1 1) (2 1) (3 2) (4 2)) )) ) (defun number_order (x y k quadrant) (+ (number_advance x y k) (number_rotate x y quadrant)) ) (defun first_check (x y) (cond ((and (= x 0) (= y 0)) (return-from n48 0)) (t nil)) ) (defun n48 () (setf *x* (parse-integer (read-line))) (setf *y* (parse-integer (read-line))) (setf *k* (parse-integer (read-line))) (princ (number_order *x* *y* *k* (xy_quadrant *x* *y*))) ) (n48)