(let [ numMin (volatile! 10) numMax (volatile! 1000000001) ] (loop[turn 0] (let [chkNum (if(= 0 turn) 100 (int(/(+ @numMin @numMax) 2)))] (println "?" chkNum)(flush) (let [chk (read-line)] (if(= "1" chk) (vreset! numMin chkNum) (when(= "-1" chk) (vreset! numMax chkNum))) (if(= "0" chk)(do (println "!" (+ chkNum turn))(flush) ) (do (when(< 0 @numMin) (vswap! numMin dec)) (vswap! numMax dec) (recur (inc turn)) )) ) ) ) )