Cześć,
Ja polecam testować rozwiązania lokalnie. Tutaj potrzebujemy jeszcze programu
sędziego, ale dla tego problemu napisać taki to żaden problem.
Poniżej załączam przykładowy program sędziego, którego używałem do testowania.
Sędzia loguje interakcję z programem gracza na standardowym wyjściu błędów,
dodając odpowiednio prefiksy Gracz:
i Sędzia:
.
Program sędziego i program gracza łączę potokami przy pomocy bash’a (chętnie
poznam inne podejścia do skomunikowania programów między sobą):
: | { ./gracz.py | ./sedzia.py; } > /dev/stdin
Sędzia: 1
Sędzia: 1
Gracz: M
Sędzia: za nisko
Gracz: T
Sędzia: za nisko
Gracz: W
Sędzia: za nisko
Gracz: Y
Sędzia: za wysoko
Gracz: X
Sędzia: sukces
sedzia.py
#!/usr/bin/env python
import string
import random
import sys
t_max = 10
n_max = 27
if len(sys.argv) > 1:
t_max = int(sys.argv[1])
if len(sys.argv) > 2:
n_max = int(sys.argv[2])
t = random.randint(1, t_max)
print(t, flush=True)
print('Sędzia:', t, file=sys.stderr, flush=True)
for _ in range(t):
n = random.randint(1, n_max)
s = ''.join(random.choices(string.ascii_uppercase, k=n))
print(n, flush=True)
print('Sędzia:', n, file=sys.stderr, flush=True)
while True:
q = input()
assert len(q) == n
print('Gracz: ', q, file=sys.stderr, flush=True)
if q < s:
print('za nisko', flush=True)
print('Sędzia: za nisko', file=sys.stderr, flush=True)
elif q > s:
print('za wysoko', flush=True)
print('Sędzia: za wysoko', file=sys.stderr, flush=True)
else:
print('sukces', flush=True)
print('Sędzia: sukces', file=sys.stderr, flush=True)
break