1 / 8
Sep 2023

Pytanie: co to za błąd “Błąd systemu judge error TLE”?

Widzę go np. w FR_12_04 - Zgadnij słowo https://pl.spoj.com/problems/FR_12_04/5.

Domyślam się, że sędzia nie radzi sobie z jakimś zachowaniem z mojej strony, ale czy da się określić z jakim dokładnie? Ewentualnie, czy to może być zwykłe TLE / WA w nowej odsłonie spowodowanej użyciem interaktywnego sędziego?

  • created

    Sep '23
  • last reply

    Sep '23
  • 7

    replies

  • 351

    views

  • 4

    users

  • 7

    likes

  • 2

    links

Jak testujesz swój program? Na ideone, czy w terminalu? Podejrzewam, że na ideone.

Problemy interaktywne trzeba testować w konsoli, bo wtedy symulujesz warunki w jakich program jest testowany.

Twój program (31843120) napierw czeka na odpowiedź, a dopiero potem coś wyświetla.

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

Testuję na Ideone - mam (jeszcze…) na SPOJa ok. kilkanaście minut dziennie na kompie “normalnego użytkownika”. Konsola odpada.

Ale są konsole online i faktycznie “uuups”. W każdym razie już wiem, co oznacza ten błąd :slight_smile: Dzięki @quenthui.

@tjm - fajne, nie powiem. Zawsze planuję napisać taki kod, ale ostatecznie nigdy mi się nie chce :slight_smile: Myślę, że ten skrypt przyda się wielu tu obecnym!

Jeśil chodzi o testowanie, to ja korzystam z mkfifo https://man7.org/linux/man-pages/man3/mkfifo.3.html2.
To jest specjalny rodzaj pliku, który działa na zasadzie kolejki.

Najpierw tworzymy plik (tworzymy go tylko raz):
mkfifo <file name>

Np.
mkfifo channel

Żeby testować program odpalamy:
./sedzia < channel | ./gracz > channel

Sędzie musi sam dodatkowo wczytać plik z testami, albo generować je w locie.

Przy testowaniu swoich kodów lolalnie, musimy jeszcze stworzyć dane wejściowe i odpowiadające im poprawne wyniki. Ja, gdy już, korzystam tylko z konsoli (terminala), przekierowań stdin z pliku, stdout do pliku, pomiaru czasu, a potem jakimś programem typu diff porównuję wyniki z poprawnym wzorcem. Do testowania programów interakcyjnych jak dotąd wystarczała mi też sama konsola-terminal.
Najczęściej jednak testuje bezpośrednio na spoju. Gdy dostaje WA, muszę przemyśleć zadanie i kod, gdy TLE zmienić algorytm itd.
Błąd kompilacji, poprawić kod. I do tego wystarczy telefon komórkowy z dostępem do netu.
Takie podejście nie sprawdza się przy innym systemie sędziowania i sprawdzania kodu, np. na PA (potyczkach algorytmicznych) i tego typu portalach.

Suggested Topics

Want to read more? Browse other topics in System SPOJ or view latest topics.