Something like this one?
Code: Select all
(set 'loc '(
("41.0.0.0" "2097152" 687865856 689963008 "ZA")
("41.32.0.0" "1048576" 689963008 691011584 "EG")
("41.48.0.0" "524288" 691011584 691535872 "ZA")
("41.56.0.0" "65536" 691535872 691601408 "ZA")
("41.57.0.0" "65536" 691601408 691666944 "ZA")
("41.58.0.0" "65536" 691666944 691732480 "NG")
("41.59.0.0" "65536" 691732480 691798016 "TZ")
("41.64.0.0" "131072" 692060160 692191232 "EG")
("41.66.0.0" "16384" 692191232 692207616 "CI") ))
(set 'loca (array (length loc) loc))
(println loca)
(while true
(setf found nil miny 0 maxy (- (length loca) 1))
(set 'n (int (read-line)))
(until found
(setf t (div (add miny maxy) 2) rt (round t))
(println "miny=" miny ", maxy=" maxy ", t=" t ", rt=" rt "-->" (loca rt))
(if (and (<= ((loca rt) 2) n)
(<= n ((loca rt) 3)))
(begin (println "found!")
(set 'found true))
(if (< n ((loca rt) 2))
(setf maxy t)
(setf miny t)))))
(exit)
(("41.0.0.0" "2097152" 687865856 689963008 "ZA") ("41.32.0.0" "1048576" 689963008
691011584 "EG")
("41.48.0.0" "524288" 691011584 691535872 "ZA")
("41.56.0.0" "65536" 691535872 691601408 "ZA")
("41.57.0.0" "65536" 691601408 691666944 "ZA")
("41.58.0.0" "65536" 691666944 691732480 "NG")
("41.59.0.0" "65536" 691732480 691798016 "TZ")
("41.64.0.0" "131072" 692060160 692191232 "EG")
("41.66.0.0" "16384" 692191232 692207616 "CI"))
687865856
miny=0, maxy=8, t=4, rt=4-->("41.57.0.0" "65536" 691601408 691666944 "ZA")
miny=0, maxy=4, t=2, rt=2-->("41.48.0.0" "524288" 691011584 691535872 "ZA")
miny=0, maxy=2, t=1, rt=1-->("41.32.0.0" "1048576" 689963008 691011584 "EG")
miny=0, maxy=1, t=0.5, rt=0-->("41.0.0.0" "2097152" 687865856 689963008 "ZA")
found!
689963008
miny=0, maxy=8, t=4, rt=4-->("41.57.0.0" "65536" 691601408 691666944 "ZA")
miny=0, maxy=4, t=2, rt=2-->("41.48.0.0" "524288" 691011584 691535872 "ZA")
miny=0, maxy=2, t=1, rt=1-->("41.32.0.0" "1048576" 689963008 691011584 "EG")
found!
692191232
miny=0, maxy=8, t=4, rt=4-->("41.57.0.0" "65536" 691601408 691666944 "ZA")
miny=4, maxy=8, t=6, rt=6-->("41.59.0.0" "65536" 691732480 691798016 "TZ")
miny=6, maxy=8, t=7, rt=7-->("41.64.0.0" "131072" 692060160 692191232 "EG")
found!
692207616
miny=0, maxy=8, t=4, rt=4-->("41.57.0.0" "65536" 691601408 691666944 "ZA")
miny=4, maxy=8, t=6, rt=6-->("41.59.0.0" "65536" 691732480 691798016 "TZ")
miny=6, maxy=8, t=7, rt=7-->("41.64.0.0" "131072" 692060160 692191232 "EG")
miny=7, maxy=8, t=7.5, rt=8-->("41.66.0.0" "16384" 692191232 692207616 "CI")
found!
691601409
miny=0, maxy=8, t=4, rt=4-->("41.57.0.0" "65536" 691601408 691666944 "ZA")
found!
692060169
miny=0, maxy=8, t=4, rt=4-->("41.57.0.0" "65536" 691601408 691666944 "ZA")
miny=4, maxy=8, t=6, rt=6-->("41.59.0.0" "65536" 691732480 691798016 "TZ")
miny=6, maxy=8, t=7, rt=7-->("41.64.0.0" "131072" 692060160 692191232 "EG")
found!