$tval) { foreach ($base[$th] as $rh => $rval) { if ($rh == $hash2 && $tval == $rval) return $tval; } } return false; } function tryanswer($s, $answ) { global $curseq; if ($answ) $curseq .= "R"; else $curseq .= "L"; fwrite($s, chr($answ)); $res = f(readint($s)); echo "Got $res\n"; if ($res == -2 || $res == -1) { return $res; } elseif ($res > 0) return $res; if ($res == -3) { echo "Got final!\n"; fwrite($s, $curseq); sleep(2); } exit("Got unknown res: $res !\n"); } $s = connect(); $base = @loadbase(); $lastlen = -1; $curg = $maxg = 0; $curseq = ""; while (true) { if ($lastlen < 0) { if ($curg > $maxg) $maxg = $curg; echo "== Current guesses: $curg, max guesses: $maxg, seq: $curseq ==\n"; $curg = 0; $curseq = ""; } $pic1 = getpic($s, $lastlen); $pic2 = getpic($s); $hash1 = md5($pic1); $hash2 = md5($pic2); if (!file_exists("pix/$hash1.jpg")) file_put_contents("pix/$hash1.jpg", $pic1); if (!file_exists("pix/$hash2.jpg")) file_put_contents("pix/$hash2.jpg", $pic2); if (isset($base[$hash1][$hash2])) { $know = (int) $base[$hash1][$hash2]; echo "Using knowledge $know... "; $lastlen = $res = tryanswer($s, $know); if ($res == -2 || $res == -1) { echo "Wtf, fixing knowledge, starting over\n\n"; $base[$hash1][$hash2] = (int) ! $base[$hash1][$hash2]; savebase($base); disconnect($s); $s = connect($s); $lastlen = -1; } else $curg++; } elseif (($logic = getlogic($base, $hash1, $hash2)) !== false) { echo "Using logic $logic... "; $lastlen = $res = tryanswer($s, $logic); if ($res == -2 || $res == -1) { echo "Wrong logic, starting over\n\n"; disconnect($s); $s = connect($s); $lastlen = -1; } else $curg++; } else { $guess = mt_rand(0, 1); echo "Using guess $guess... "; $lastlen = $res = tryanswer($s, $guess); if ($res == -2 || $res == -1) { $base[$hash1][$hash2] = (int)!$guess; $base[$hash2][$hash1] = $guess; } else { $base[$hash1][$hash2] = $guess; $base[$hash2][$hash1] = (int)!$guess; $curg++; } savebase($base); if ($res == -2 || $res == -1) { echo "Wrong guess, starting over\n\n"; disconnect($s); $s = connect($s); $lastlen = -1; } } } disconnect($s); ?>