1. 程式人生 > >二分猜數遊戲實現 coin1

二分猜數遊戲實現 coin1

這題需要在時間限制內贏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()