二分猜數遊戲實現 coin1
阿新 • • 發佈:2018-12-17
這題需要在時間限制內贏100次二分猜數遊戲。 記得資料結構課上老師就說過,二分查詢的實現還是很容易錯的。一開始寫的版本總是用光次數猜不對。 網速比較慢的話就得先用其他題的賬戶登上去然後本地連線到9007埠執行。
from pwn import *
sh = remote('pwnable.kr', 9007)
sh.recvuntil('starting in 3 sec')
print 'Waiting for 3 sec to start ...'
def play_round():
sh.recvuntil('N=')
N = int(sh.recvuntil(' '))
print 'N=%d' % N
sh.recvuntil('C=')
C = int(sh.recvuntil('\n').replace('\n', '').rstrip())
print 'C=%d' % C
# binary search
lo = 0
hi = N-1
cnt = 0
re = -1
while lo < hi:
cnt += 1
mi = lo + (hi - lo) / 2
guess = ' '.join([str(i) for i in range(lo, mi+1)])
# print 'Test #', cnt, 'range: [%4d, %4d]' % (lo, hi), 'Guess: [%4d, %4d]', lo, mi
sh.sendline(guess)
re = int(sh.recvline())
# print 'Ret:', re
if re < 10 * (mi - lo + 1):
hi = mi
else:
lo = mi+1
while cnt < C:
cnt += 1
sh.sendline(str(lo))
re = int(sh.recvline())
print 'Aha! Found:', lo, 'Sending...'
sh.sendline(str(lo))
print sh.recvuntil('\n') # receive "Congraduate (#round_number)"
win = 0
while win < 100:
play_round()
win += 1
sh.interactive()