35 / 35
Jun 2022

zupełnie nie rozumiem, co znaczy, że w wielu testach uzyskujesz poprawne odpowiedzi - czy znasz takie testy dla których uzyskujesz niepoprawne ?

natomiast rozumiem, dlaczego sędzia ci daje WA - powód prosty, nie zrozumiałeś treści zadania, przeczytaj jeszcze raz dokładnie, albo dwa, trzy ... razy, aż do pełnego zrozumienia

PS. istnieje bardzo małe prawdopodobieństwo, że używając Python-a zmieścisz się w czasie - tylko dwa zaliczone rozwiązania nie są C/C++, jedno Pascal, i jedno w ASM :slight_smile:

"pomimo że w wielu testach uzysuję poprawne odpowiedzi"

pisząc to miałem po prostu na myśli to, że wprowadzałem wiele liczb podzielnych przez 6,8 czy 343 i program działa bez zarzutu tzn. prawidłowo klasyfikuje to czy liczba jest pozielna przez powyższe wartości czy nie
teraz dopiero zauważyłem dlaczego dostaję WA :smiley: , jednak warto dokładnie czytac polecenia :slight_smile:
udało mi się naprawić błąd i tak jak wspomniałeś używając Pythona nie mieszczę się w czasie (ale spróbuję może to jakos ulepszyć) :smiley:

3 years later

Uzyskałem Twoim kodem AC po poprawieniu aż JEDNEGO przypadku będącego JEDNĄ liczbą, dla którego 3x zwracasz złą odpowiedź. Sądząc po testach na Ideone, przeczuwasz, o którą liczbę może chodzić :slight_smile:

Dzięki. Zaliczone gdzieś mi to umknęło bo byłem pewien że sprawdzałem jak to jest z tym przypadkiem.

10 months later

Potwierdzam w Pythonie3 nie ma szans tego wykonać, w C++ przeszło z czasem 0.06s

Zastanawia mnie tylko czy osoby które uzyskały 0.00 cudują z very fast i/o czy też mają bardziej zoptymalizowany algorytm. Szkoda, że ten portal nie umożliwia podglądu w kody innych tak jak np. Codewars (oczywiście po uzyskaniu AC). Można byłoby się wiele nauczyć.

W 90% to kwestia fast I/O. Reszta to optymalny kod, czasem lepszy algorytm, a nawet wysłanie zgłoszenia o odpowiedniej porze (ten samo kod, potrafi mieć różne czasy, w zależności od pory dnia lub nocy).

… fazy księżyca, plam i wybuchów na słońcu, układ planet i gwiazd … i wiele innych zjawisk na niebie i ziemi o których nawet filozofom się nie śniło! :wink:

A tak na serio Spoj “działa” nie na systemie RTS ale na [nie]zwykłym linuxie, wielozadaniowym i wieloużytkownikowym systemie z wywłaszczniem zadań i zasobów itd itp, więc takie zjawiska nie powinny być chyba dziwne. Dodatkowo zmiany hardware i software [nowsze wersje kompilatorów i bibliotek] też wpływają na wynikowy kod i na czas działania czasami na plus a czasami na minus.

Podglądanie nie jest najlepszą metodą nauki. Inni piszą kody po to aby uzyskać AC a nie aby były wzorcowe jako podstawa do nauki programowania. Przez pewien czas była taka możliwość, podglądania, na portalu Mariusza. Nie wystarczy tylko sama chęć obejrzenia kodu i uzyskanie AC. Musi jeszcze być zgoda autora kodu. A na samym spoju taka możliwość jest w gałęzi podstawy programowania.
Innym sposobem jest po prostu napisanie własnego zadania i wstawienie go tu na spoja. Wtedy jako problem setter, w “nagrodę” możesz sobie oglądać wszystkie zgłoszone kody, jeżeli uważasz, że się tą metodą dużo nauczysz. Moim zdaniem lepsza jest metoda książka i jej studiowanie lub guru i jego pomoc. Trochę gortsza to kursy internetowe i fora dyskusyjne, różnej, czasami bardzo marnej jakości.

I jeszcze jedna sprawa. Też jestem stary i gdzieś tam mam zakładki w książce z karty perforowanej [nie taśmy], używałem suwaka logarytmicznego i pisałem jakiś program w Algolu na Odrę. Ale gdy trafiłem na Spoja, a właściwie na forum, to najpierw tylko czytałem, a dopiero dużo póżniej pytałem i proponowałem swoje wynalzki i pomysły. Spoj nie jest portalem edukacyjnym do nauki programowania, tylko do sprawdzania zdobytej wiedzy. Ktoś napisał mi, że przez złe sędziowanie na spoju ktoś tam zraził się do programowania. No i może dobrze. Widocznie do zostania programistą trzeba mieć także odporność na drobne niedogodności. I jeszcze dla malkontentów. Sprawdzcie i porównajcie sobie proszę, jak są oceniane nadsyłane kody na Potyczkach Algorytmicznych, Olimpiadach Informatycznych, także Międzynarodowej, Akademickich Mistrzostwach itd czy innych podobnych tego typu konkursach.

Ja osobiscie wolę i chciałbym aby Spoj w ogóle był i działał tak jak działa jak najdłużej niż zniknął i przestał istnieć. Wiem, że nie jest doskonały, ale może po prostu już się przyzwyczaiłem do drobnych niedogodności Spoja!

Na Codevars to się bardzo sprawdza, dlatego że społeczność ma możliwość oceniania kodów. Jak rozwiążesz zadania masz podgląd na kody innych posortowane od najlepiej ocenionych, co znaczy że w pierwszej kolejności dostajesz najlepsze rozwiązania. Wtedy widzisz jak piszą kody najlepsi, jakich używają algorytmów, jakich i/o, jak nazywają zmienne, jak wygląda czysty dobry kod.
Na spoju możesz 20 lat siedzieć i cały czas będziesz popełniał te same błędy, nie wiedząc nawet że je popełniasz.

Na forum pasja-informatyki inaczej to jest ptzedstawione. Tam jest spoj mocno rekomendowany dla początkujących do nauki algorytmiki. Teraz widzę że jest zupełnie przeciwnie.

Nauka algorytmiki != nauka podstaw jakiegoś, dowolnego, języka programowania!

Nie czepiaj się szczegółów. Ogólnie spoj nie jest w żaden sposób edukacyjny.
Można pokusić się o stwierdzenie, że czas poświęcony tutaj jest zmarnowany.

Bardzo przykro słyszeć coś takiego.
A mówię to jako osoba, która wszystko co umie i wie o algorytmice nauczyła się właśnie dzięki SPOJowi

"Można pokusić się o stwierdzenie, że czas poświęcony tutaj jest zmarnowany."
Bardzo ostre stwierdzenie uważam, że jest niesprawiedliwe.
Z mojego punktu widzenia SPOJ jest bardzo użyteczny, wiele z niego skorzystałem.
Doceńmy też pracę wielu ludzi, dających od siebie bardzo dużo by SPOJ mógł funkcjonować. Bardzo łatwo jest krytykować

Doceniam, naprawdę. Grupa kilku osób zainwestowała w ten portal serce i pół życia. Szanuję to i podziwiam.

Ale podam taki przykład.
Pracowałem w firmie X, zarabiałem 2 tyś zł.
Gdybym pracował w firmie Y, zarabiałbym 10 tyś.

Pytanie - czy pracując w firmie X zarabiałem 2 tyś czy traciłem 8 tyś?
Wszystko jest względne i zależy od punktu widzenia.

Prawdę mówiąc, nie rozumiem kontekstu Twojego przykładu.
A w zdaniu “Można pokusić się o stwierdzenie, że czas poświęcony tutaj jest zmarnowany.”, jak i w wielu innych Twoich wypowiedziach, niełatwo jest mi odnaleźć szacunek i podziw

Chodzi o to że na innych podobnych portalach (Codewars, Leetcode) można się rozwijać programistycznie a tutaj jest wyścig szczurów Spędziłem tu setki godzin, może tysiące i nadal nie wiem czy moje kody w porównaniu z innymi są dobre czy bveznadziejne. Nie nauczyłem się dobrych praktykl bo niby skąd? Jedyne czego się nauczyłem to zwracania uwagi na szczegóły, na skrajne przypadki oraz że w każdym zadaniu jest haczyk…

Twoja opinia, że czas na spoju jest zmarnowany, jest bardzo ostra i niesprawiedliwa. W pełni się zgadzam, że podgląd najlepszych kodów by był dużym ulepszeniem. Szczerze trochę teraz żałuję ogólnie, że poznałem akurat SPOJ-a, a nie jakąś stronkę z podglądem kodów. Teraz ciężko mi się przerzucić.

Ale to nie znaczy, że jest on bezwartościowy. Ja również wszystko co wiem o algorytmice (i większość o programowaniu!) zawdzięczam SPOJ-owi i setkom godzin spędzonych tutaj i wcale tego nie żałuję.

Owszem, trochę trudno w niego wejść (zadania w łatwych mają haczyki/wymagają trików już od pierwszego), podział trudności jest dyskusyjny (nadal mam zadania w łatwych, których nie umiem zrobić) i brakuje wielu udogodnień (polska strona jest uboga w porównaniu z angielską, ogólnie mam wrażenie, że admini zapomnieli o swoich początkach (SPOJ jest ogólnie polski chyba?) i nie interesuje ich polska wersja oprócz jej utrzymania), ale nadal jest to bardzo wartościowe miejsce do nauki. Jest ona trudniejsza niż gdzieś indziej, ale nie niemożliwa.

Kurcze, człowiek nie ma czasu na SPOJa a tu te same tematy od lat :wink:

To forum brzmi mi trochę jak Zelent. Insza inszość, że faktycznie czasy się zmieniły i pod wieloma względami algo to sztuka dla sztuki (SPOJ a praca... i życie). Skądinąd programowanie też wchodzi do mainstreamu; trochę jak kiedyś “umiejętność obsługi komputera” i stąd dzisiejsze algorytmy to coraz częściej “użyj funkcji sort”, “użyj biblioteki jakiejśtam”, “ktoś to zaklepał, zerknij na stack overflow”, … (1).

Pierwszej części zdania nie ocenię, ale z ostatnią się nie zgadzam. Wyścig szczurów jest tylko gdy chcesz go widzieć i brać w nim udział - ja już nawet nie pamiętam mojej pozycji w rankingu; w CV mam 23. miejsce :wink: I owszem, chciałem być przez jakiś czas na pierwszej stronie rankingu, a także “wyzerować” łatwe zadania (nawet kiedyś mi się udało!), ale teraz to tak szczerze ja już ani nie wiem gdzie w rankingu jestem, ani ile zadań łatwych doszło bo np. Fraktal przyczynia się do powstawania kolejnych.

SPOJ to chyba najgorsze możliwe miejsce do nauki dobrych praktyk. Tylko to trochę jak powiedzieć, że brzoskiwnia to najgorsze możliwe jabłko. W sensie, że SPOJ to inna kategoria i inne przeznaczenie. Niemniej jeśli chcesz poznawać jakieś standardy jakości kodu to potwierdzam - SPOJ jest złym miejscem (2).

Insza inszość, jak takie kody można porównywać. Pod względem złożoności obliczeniowej? Wtedy jednak SPOJ daje radę. Pod względem jakości wykonania, np. podziału na funkcje, klasy, wykorzystanych bibliotek, użytego języka, długości kodu, … ? Tylko wtedy ciężko o obiektywne kryteria jakości. Kiedyś z radością klepałem własne funkcje sortujące; po iluś błędach w tych funkcjach uznałem za stosowne używanie funkcji bibliotecznych. Drugie rozwiązanie jest bardziej współczesne, ale pierwsze to też jakaś oddzielna kategoria, w której można porównywać rozwiązania (3). Trochę jak estyma okazywana ludziom, którzy sprawnie liczą w pamięci i znają jakieś tricki arytmetyczne np. szybkie potęgowanie piątki. Tricki bezwartościowe w dobie kalkulatorów, no ale szpan jest (4).

Zgoda. Przy czym zgodzę się też z @manjaro, że zadania łatwe są albo trickowe w tym sensie, iż faktycznie te tricki mają realną wartość (np. pozwalają ogarnąć jakąś nieintuicyjną, ale prostą optymalizację) albo - i to jest cięższe - trick jest dla samego tricku (5). Przykładowo, nie przechodzi kod, który działa dobrze dla wszystkich liczb od 1 do 1000…0, ale 0 okazuje się wyjątkiem i trzeba go oifować.

Nie, żebym promował przepuszczanie błędnych rozwiązań, ale sytuacja typu zastanawianie się dwa dni nad błędem w algorytmie, którego nie ma, to trochę jednak “nie ten teges”. @narbej już zwrócił uwagę na OI. O ile pamiętam, ocena na Olimpiadzie jest procentowa, kary za niedostrzeżenie przypadku do oifowania - minimalne; na końcu zadania są szczegółowo omawiane, udostępniane są testy i wyniki do nich, a także można się odwołać. Z całym szacunkiem, SPOJ to nie jest. Ale znowu - SPOJ jest za free, SPOJ udostępnia całe mrowie zadań a nie tylko kilka, … - SPOJ to nie OI.

(poniżej przypisy związane z moją działalnością gospodarczą)
(1) Takie czasy; kiedyś szybkie liczenie odwrotności pierwiastka kwadratowego i czuwanie nad pamięcią, a obecnie Python i ma działać. Kiedyś Fortran to było coś, obecnie programowanie formułek w Excelu może okazać się lepsze, np. posłużyć do stworzenia podatkowej księgi przychodów i rozchodów, którą jeszcze można sprzedawać. Kiedyś mgr informatyki, dzisiaj kurs Java Junior Software Developer z gwarancją zatrudnienia. SPOJ jednak nie powstał w związku ze współczesną branżą IT.
(2), (3) żaden klient nie był zainteresowany moimi standardami jakościowymi - okazuje się, że mają własne. Jak teraz robię coś dla Jankesów, zależnie od repo albo chcą merge’owania albo rebase’owania. Mam klienta, który ogarnia tylko maile, a Jankesi - tylko Jirę. Chyba najlepiej ujął to mój znajomy zauważając, że programista to nie to samo co inżynier oprogramowania i programowanie jako takie to nie to samo co inżynieria programowania. Żyjemy w czasach nawet programowania sportowego! Mówienie o jakości kodu na forum trochę mija się z celem. To tak jak mówienie o wysokiej jakości prawa, które jest spójne i logiczne, z pominięciem realiów politycznych, możliwości wprowadzenia i egzekucji tego prawa itp. Albo ocenianie dwóch maturzystów, którzy rozwiązali zadanie, ale jeden zrobił to “seksowniej” więc ma więcej punktów. BTW; to temat naukowy: http://docplayer.pl/5807074-Analiza-trudnosci-zadan-olimpiady-matematycznej.html1
(4) sztuczka opiera się na obserwacji, iż 5^x kończy się na 25. Dalej okazuje się, że prefiks 25 jest funkcją x. Dla jednych wiedza bez sensu, dla innych przeciwnie - cóż począć? No i czy zawsze takie tricki są nieprzydatne?
(5) z praktycznych przypadków, musiałem swojego czasu udoskonalić niszowy język programowania Harbour o możliwość szybkiego całkowitoliczbowego dzielenia przez 2. Tricki na bitach okazały się przydatne. Z drugiej strony na SPOJu jest trochę zadań o szyfrach (które skądinąd lubię i proszę nie traktować tego jako zarzutu), które mistrza kryptografii ze mnie nie uczynią, a ich trzaskanie jest sztuką samą w sobie.