• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadanie SPOJ Sort 1 Python EOFError: EOF when reading a line

Object Storage Arubacloud
0 głosów
283 wizyt
pytanie zadane 16 lutego 2023 w Python przez skyynet Początkujący (410 p.)
edycja 16 lutego 2023 przez skyynet
t=int(input()) #liczba testów
for _ in range(t):
    n=int(input()) #liczba punktów
    P=[] #lista punktów
    D=[] #lista odległości
    for i in range(n):
        Point=input()
        Point_copy=Point.split(' ')
        x=int(Point_copy[1])
        y=int(Point_copy[2])
        dist=x**2+y**2 #Odległość punktu od początku układu współrzędnych (bez pierwiastka)
        if i==0: #Pierwszy podany punkt
            P.append(Point) 
            D.append(dist)
        else:
            for d in D:
                if dist<d: #jeśli odległość jest mniejsza dodaję ją do list na odpowiednie miejsce
                    D.insert(D.index(d)-1,dist)
                    P.insert(D.index(d)-1,Point)
                    break
            if dist not in D: #jesli odległość jest największa dodaję ją na koniec list
                D.append(dist)
                P.append(Point)
    for p in P:
        print(p)
    print('')

Mam problem z zdaniem ze Spoj PP0506A - Sort 1, wyświetla mi się błąd wykonania (NZEC) i nie mam pojęcia co mogę poprawić w kodzie, to mój kod:

 

komentarz 16 lutego 2023 przez Great Stary wyjadacz (12,360 p.)
komentarz 17 lutego 2023 przez skyynet Początkujący (410 p.)
w 26 linii kodu print('') nie odpowiada za tą linię odstępu? Poza tym taka 1 linia odstępu nie powinna generować błędnej odpowiedzi, a nie błąd wykonania (NZEC)?
komentarz 17 lutego 2023 przez Great Stary wyjadacz (12,360 p.)

print('') odpowiada za linię odstępu dla wyjścia programu. Dane na wejściu również są rozdzielone. Dla drugiego testu wczytasz pustą linię w tym miejscu:

n=int(input())
komentarz 17 lutego 2023 przez skyynet Początkujący (410 p.)

Faktycznie pomogło, bardzo dziękuję teraz pokazuję mi błędną odpowiedź. Pozmieniałem trochę kod i wydaje mi się że zgadza się z podanym na SPOJu przykładem. Jesteś w stanie podpowiedzieć w którym dokładnie miejscu jest błąd, który powoduje błędną odpowiedź?

t=int(input()) #liczba testów
for i in range(t):
    n=int(input()) #liczba punktów
    P=[] #lista punktów
    D=[] #lista odległości
    for j in range(n):
        Point=input()
        Point_copy=Point.split(' ')
        x=int(Point_copy[1])
        y=int(Point_copy[2])
        dist=x**2+y**2 #Odległość punktu od początku układu współrzędnych (bez pierwiastka)
        if i==0: #Pierwszy podany punkt
            P.append(Point) 
            D.append(dist)
        else:
            for d in D:
                if dist<d: #jeśli odległość jest mniejsza dodaję ją do list na odpowiednie miejsce
                    D.insert(D.index(d)-1,dist)
                    P.insert(D.index(d)-1,Point)
                    break
            if dist not in D: #jesli odległość jest największa dodaję ją na koniec list
                D.append(dist)
                P.append(Point)
    if i>0:
        print('') #jeden pusty wiersz na wyjściu
    for p in P:
        print(p)
    if i<t-1:
        space=input() #jeden pusty wiersz na wejściu 

 

komentarz 17 lutego 2023 przez Great Stary wyjadacz (12,360 p.)

Jak znajdę chwilkę to mogę poszukać błąd, ale na razie proponuję prostsze rozwiązanie. Wstaw punkty do tablicy i posortuj je po odległości:

for j in range(n):
    name, x, y = input().split()
    points.append(...)
points.sort(...)
komentarz 17 lutego 2023 przez skyynet Początkujący (410 p.)
Nie do końca rozumiem jak mam posortować tablicę zawierającą wartości name,x i y. W moim kodzie ominąłem to tworząc tablice specjalną dla odległości i dodając punkt na ten sam indeks co odległość względnie z innymi. Wydaję mi się, że jest samo obliczanie jest dobrze ://
komentarz 17 lutego 2023 przez Great Stary wyjadacz (12,360 p.)

Wydaję mi się, że jest samo obliczanie jest dobrze ://

Pierwszy kod (o ile wczytasz znak ten znak nowej linii) wyświetla błędny wynik dla testu:

output:
1
5
A 0 0
C 5 5
B 1 -1
E 5 -5
K -5 -5
output:
A 0 0
B 1 -1
C 5 5

Drugi kod w zasadzie w ogóle nie przechodzi nawet testu z treści zadania. W zasadzie metoda, której używasz jest przekombinowana i zawiera w sobie dodatkową złożoność (dodatkowe wyszukiwanie elementów).  

Nie do końca rozumiem jak mam posortować tablicę zawierającą wartości name,x i y.

Możesz posortować taką samą tablicę jak tablica P z Twojego kodu. Nie potrzebujesz tablicy odległości. Opcjonalnie możesz dodać dodatkowy element(odległość) do listy reprezentującej punkt. Masz tutaj dowolność. 

1
komentarz 17 lutego 2023 przez skyynet Początkujący (410 p.)
Test z punktamk E i K pokazuje błąd bo odległość do punktu C, E i Kjest taka sama a w treści zadania jest że nie mogą być podane takie same odległości
komentarz 17 lutego 2023 przez skyynet Początkujący (410 p.)
Wiec wydaje mi się że nie o to chodzi

1 odpowiedź

+1 głos
odpowiedź 16 lutego 2023 przez Great Stary wyjadacz (12,360 p.)

Kolejne testy oddzielone są jednym pustym wierszem.

Podobne pytania

+1 głos
0 odpowiedzi 388 wizyt
pytanie zadane 17 lipca 2020 w Python przez Stefan Marzec Użytkownik (710 p.)
0 głosów
1 odpowiedź 189 wizyt
pytanie zadane 5 lipca 2023 w SPOJ przez lada_4455 Nowicjusz (170 p.)
0 głosów
2 odpowiedzi 375 wizyt
pytanie zadane 11 września 2020 w SPOJ przez cupoforanges Początkujący (380 p.)

92,576 zapytań

141,426 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...