Advertisement
pb_jiang

g2测试程序

Jun 14th, 2023
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.30 KB | None | 0 0
  1. #!/usr/bin/env python
  2. import sys
  3. import random
  4. import select
  5.  
  6.  
  7. def main():
  8.     n = random.randint(1, 1e6)
  9.     sys.stderr.write(f"begin with {n=}\n")
  10.     v = [x + 1 for x in range(n)]
  11.     random.shuffle(v)
  12.     idx = 0
  13.     opt = 0
  14.     sys.stdout.write(f"{v[idx]}\n")
  15.     sys.stdout.flush()
  16.     while True:
  17.         '''
  18.        r, _, _ = select.select([sys.stdin], [], [], 0.1)
  19.        if not r:
  20.            sys.stderr.write("not data, skip\n")
  21.            continue
  22.        '''
  23.         line = sys.stdin.readline().strip()
  24.         sys.stderr.write(f"read {line}\n")
  25.         if line[0] == '!':
  26.             exp = int(line[1:])
  27.             if exp == n:
  28.                 sys.stderr.write(f"get right ans {exp=}\n")
  29.                 return 0
  30.             else:
  31.                 raise Exception(f"real {n=}, {exp=}\n")
  32.         else:
  33.             op = line[0]
  34.             cnt = int(line[1:])
  35.             if op == '+':
  36.                 idx = (idx + cnt) % n
  37.             else:
  38.                 idx = (idx - cnt) % n
  39.             sys.stdout.write(f"{v[idx]}\n")
  40.             sys.stdout.flush()
  41.         opt += 1
  42.         if opt % 100 == 0:
  43.             sys.stderr.write(f"opt get ${opt}\n")
  44.         if opt >= 1000:
  45.             break
  46.  
  47.     raise Exception("Too many try")
  48.  
  49.  
  50. if __name__ == "__main__":
  51.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement