fork download
  1. (defun nearest-palindromic-numbers (n &key (radix 10))
  2. (check-type n integer)
  3. (if (< n radix)
  4. (list (max 0 n))
  5. (block nil
  6. (let* ((s (format nil "~vR" radix n))
  7. (len (length s))
  8. a-len b-len a b x y d)
  9. (when (= n (expt radix (1- len)))
  10. (return (list (1- n) (1+ n))))
  11. (setq b-len (floor len 2)
  12. a-len (- len b-len)
  13. a (subseq s 0 a-len)
  14. b (reverse (subseq s 0 b-len))
  15. x (parse-integer (format nil "~A~A" a b) :radix radix))
  16. (when (= x n)
  17. (return (list x)))
  18. (setq a (format nil "~vR" radix
  19. (+ (parse-integer a :radix radix)
  20. (if (< x n) 1 -1)))
  21. b (reverse (subseq a 0 b-len))
  22. y (parse-integer (format nil "~A~A" a b) :radix radix)
  23. d (- (abs (- x n))
  24. (abs (- y n))))
  25. (cond ((< d 0) (list x))
  26. ((> d 0) (list y))
  27. ((< x y) (list x y))
  28. (t (list y x)))))))
  29.  
  30. (loop with radix = 10
  31. for line = (read-line nil nil)
  32. for n = (and line (parse-integer line :radix radix))
  33. while n
  34. do (format t "~{~A~^, ~}~%"
  35. (mapcar (lambda (p) (format nil "~vR" radix p))
  36. (nearest-palindromic-numbers n :radix radix))))
  37.  
Success #stdin #stdout 0.01s 30540KB
stdin
0
5
17
100
2024
123459321
31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989
stdout
0
5
22
99, 101
2002
123454321, 123464321
31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491319491103818397221984272575881537659472699732644708458115013971162391837116812903591959575630727503349061151491596414831256640288450350331100630952987634635171904529282690290251884718855136066007854273721419420627063933128466234540168430643296658465419091021725613876873328465748216443395665790188244691830394598492264469555011258391072014820547111848218049535271322850559064483907466032823156808412897607112435284308268998026826046187032954494790285015739939617914882059723833462648323979853562951413