17 / 25
Sep 2020

Masz za bardzo przekombinowany kod, więc nie podejmuję się znalezienia błędu. Dane wejściowe z zadania to minimum, ale nie oznacza to, że automatycznie będzie AC. Zobacz chociażby dla testu z postu powyżej: http://ideone.com/brKbvx22 - ostatnia linijka w twoim outpucie jest błędna:
WALOQB
Dodatkowo, między WA a LOQB jest niedrukowalny znak '\0' - ale tego na ideone.com nie widać.

Dzięki serdeczne :slight_smile: Ten test na dobrą sprawę był kluczowy, niby proste, ale na takie rzeczy najtrudniej wpaść :slight_smile: Już jest AC :smiley:

9 months later

Witam, czy można prosić o testy, które wskażą newralgiczne miejsca w algorytmie? Wszystkie testy, które robiłem, przechodzą poprawnie, ale i tak mam WA.

Swoją odpowiedź odwołuję do zgłoszenia nr 20107314. Ów kod zalicza największą liczbę testów. Test(a raczej Jego 0,2%), który Ci nie przechodzi jest już umieszczony wyżej w tym wątku.
–> https://ideone.com/JaYG7G15 <–

3 years later

Ech ten SPOJ.
Co drugie zadanie przechodzi czasowo tylko w C++…
I weź tu człowieku ćwicz Pythona

Większość zadań na SPOJu nie jest dostosowana do Żmii. W szczególności wszystkie zadania z konkursów takich jak Olimpiady Informatyczne, FRAKTAL czy AlgoLiga. Oczywiście za wyjątkiem przypadków gdy w treści zadania zaznaczono inaczej, ale nie kojarzę takich. To że dopuszczone są wszystkie języki to kwestia powiedzenia ludziom “mamy polskiego SPOJa gdzieś bo i tak nie generuje wielkich zysków i ma działać tylko jako reklama bo w sumie wszystko co duże od Olimpiady Informatycznej po uczelnie ma swoje sprawdzarki lepsze niż nasza” “bawcie się i próbujcie - może się uda”.

Do Pythona jest oddzielna seria zadań Arkadiusza Bulskiego. Niektóre z nich jeszcze działają.

Wyrażenie “I weź tu człowieku ćwicz Pythona” jest dość pretensjonalne. Co chcesz nim osiągnąć? Zniechęcić ludzi do SPOJa? Wyrazić niezadowolenie ze SPOJa? Zmotywować nielicznych bywalców SPOJa do darmowej pracy, która w dodatku może się skończyć tak jak ostatnio gdy materiały ze starego forum “wyparowały”? A może zainteresować administrację? Dobrze o Tobie świadczy ostatni przypadek więc przyjmę tę wersję. Już odpowiadam: próbowało wielu. Administracja nie jest zainteresowana :slight_smile: Hajsy są z rynków zagranicznych a nie szkolnych kółek informatycznych więc na polskojęzycznym SPOJu nikt nie będzie się rozczulał nad Pythonem.

PS
Jak interesuje Cię chemia/fizyka to mogę Ci podrzucić kilka zadań z mojej książki. Niektóre są z JS, ale jak rozwiążesz je w Pythonie to chyba świat się nie zawali. Inne są z Pythona oraz Octave.

SPOJ to platforma, a to autorzy tworzą zadania i ewentualnie czasami powodują problemy z ich rozwiązywalnością w “innych” językach programowania.

Gdybym napisał, że każdy może zostać na SPOJ’u autorem, tworzyć zadania i je tu wstawiać [prosić o wstawienie], to pewnie bym trochę skłamał.
Poprawka, nie, nie każdy, a na pewno trzeba wiedzieć czym się różni kompilacja od interpretacji.

Na szczęście są inne portale i inne możliwości. Np Projekt Euler. Tam nie ma praktycznie żdnych ograniczeń, jakiego języka programowania użyjesz. Liczy się tylko wynik a czy policzysz go pisząc “własny” program w dowolnym języku, czy używając kalkulatora a nawet kartki papieru i ołówka/długopisu i jak długo będziesz lub twój program będzie liczył, jest na tamtym portalu zupełnie bez znaczenia. Wystarczy, że podasz poprawny wynik.

Jedynie wyrazić ubolewanie, że programiści inni niż C/C++ są pokrzywdzeni. Nie mam do nikogo pretensji ani do autorów zadań ani do administracji, Mam świadomość że wszyscy tu działają społecznie :wink:

2-3 dni temu rozwiązałem zadanie FR_08_09 - Piq w Pythonie i niestety nie mieściło się w czasie. Przepisałem kod do C++ i znalazłem się na 7 pozycji z jednym z najlepszych czasów :wink:

Z największą przyjemnością przyjrzę się im :wink:

Dobijam powoli do pierwszej setki w rankingu i nie chcę tego tracić, Zawsze to jakaś satysfakcja. Poza tym wolę skupiać się na algorytmach niż na poprawnym tłumaczeniu i interpretowaniu angielskojęzycznych treści. Jestem wszak z pokolenia kiedy w szkole jedynym słusznym językiem obcym był ten zza wschodniej granicy.

Ale oni nie są pokrzywdzeni. Tylko w życiu zawodowym a nie SPOJowym :wink: Bo i tam Python pokazuje swoją moc.

Wyślę potem na PRIV.

Jak dobiłem do setki to jeszcze cudów nie było. Ale później - niespodzianka - do projektu z AI pytali mnie o SPOJa… i zrobiło się fajnie gdy pokazywałem najtrudniejsze moim zdaniem zadanie i jak je rozwaliłem :wink: A nie zrobiłoby się fajnie gdyby nie duuużo rozwiązanych zadań. Więc walcz. Chyba, że masz już pomysł na np. apkę typu gra komputerowa, komunikator, może coś do JPK VAT. Wtedy walcz z tym :slight_smile:

A możesz zdradzić jakie to zadanie? :wink:

Pytanie brzmiało +/- jakie najtrudniejsze zadanie na SPOJu rozwiązałeś? Problem był taki, że pytający jest drem, algorytkimę ćwiczył choćby w Tarnowie, pochwalił się znajomościami z czołówką rankingu ze SPOJa oraz nadmienił finał Potyczek Algorytmicznych co mnie trochę zestresowało tym bardziej, że trudnych rozwiązałem mało. Postanowiłem nie szukać zadań na jakieś wyrafinowane algorytmy czy struktury bo zapewne bym ich nie wybronił - zawsze jest jakiś trick na drzewach, którego się nie zna. Pomijam, że zadania tego typu nie wchodzą mi w pamięć w przeciwieńśtwie do tych, które choć nieraz były łatwe, zajęły mi dużo czasu. Te pamiętam nawet z nazwy i treści.

Zaciekawiło go: https://pl.spoj.com/problems/KMSL4B/9 ale powiedziałem, że to nawet nie było trudne bo chodziło o implementację gotowego twierdzenia.

Pokazałem mu https://pl.spoj.com/problems/FR_02_20/11 i w miarę opowiedziałem jak to rozwiązałem. Miałem jeszcze przygotowane https://pl.spoj.com/problems/AL_10_02/6 bo uważam, że jak ktoś tutaj niczego nie całkował to zadanie też jest ciekawe. Nie doszliśmy jednak do drugiego zadania.

FR_02_20 nawet go zainteresowało. Pytał, czy tego nie dałoby się prosto zrobić tak albo inaczej, np. czy to nie jest jakiś prosty trick arytmetyki modularnej. Analizował historię zgłoszeń (a trochę ich miałem). Niemniej uzyskałem drugiego klienta więc chyba się wybroniłem :wink:

Dzięki.

KMSL4B - jak już wiesz o jakie twierdzenie chodzi i dodatkowo widziałeś kiedykolwiek dysk, który jest otwarty i jednostkowy i do tego na płaszczyźnie zespolonej to fakt bułka z masłem i kaszka z mleczkiem :wink:

FR_02_20 - super zadanie, a co się narysowałem przy nim trójkątów Pascala, na kartkach formatu A3, ale jaka potem satysfakcja.

Do całkowania wydaje mi się, że jest lepsze zadanie, a może więcej - w końcu nie wszystkie poznałem [ewentualnie spróbuję te jedne odnaleźć], chociaż jeżeli tu w tym użyłeś całkowania, to jestem pełen uznania i zaciekawienia jak to zrobiłeś?. Jako całkowanie rozumiem całkowanie np: metodą trapezów, simsona, prostokątów itd.

Dla mnie niezapomnianych wrażeń dostarczyło zadanie: https://pl.spoj.com/problems/PZPI06_1/7
Nawet dla fizyka jest tam trochę pracy. Namówiłem kolegę @korkirw’a i zrobił to w mniej niż 10 prób, ale w końcu zadanie jest nie na darmo w kategorii trochę trudniejszych.

Tak naprawdę, rozwiązanie każdego zadanie daje dużo satysfakcji, ale wiadomo, że trudniejsze, w momencie zapalenia zielonego :wink: dają więcej, a jeszcze samodzielnie … :wink:

KMSL4B - zgoda
FR_02_20 - ja rysowałem na A4, a potem, gdy już miałem jakąś wizję, dużo liczb generowałem w arkuszu kalkulacyjnym i “kolorowałem” żeby się nie pogubić.

AL_10_02 -> ja właśnie, wbrew treści zadania, nie całkowałem tylko wyprowadziłem wzór. Trochę to trwało, nie powiem. Potem w sieci znalazłem jedno wyprowadzenie wzoru na jakimś blogu (dużo bardziej złożone niż moje) i dwa w materiałach anglojęzycznych (w tym jeden wzór był błędny) więc byłem z siebie dumny :wink:

Kanoniera Jasia miałem kiedyś rozwiązać. Plus wciąż czeka moje własne zadanie z korkiem ulicznym. Niestety, póki co nie mam czasu. Ale jak znam życie jeszcze kiedyś go znajdę.

Ostatnie zdanie - pełna zgoda.

Zadanie z kanonierem Jasiem rzeczywiście “troszeczkę” :slight_smile: mnie zajęło, chociaż jako fizyk miałem pewne fory :rofl:
Zaciekawiło mnie to zadanie z całkowaniem i się za niego zabrałem, właściwie to wyprowadziłem sobie wzory z dużą przyjemnością, nie spodziewałem się jednak, że jest tu wymagana absolutnie pełna precyzja typu double double :frowning: . Na początku wprowadziłem sobie kilka stałych z dokładnością do 12 miejsc po przecinku i okazało się za mało… Lenistwo nie popłaca :slight_smile: Mi chyba najwięcej satysfakcji sprawia gdy zrobię zadanie, z którym się męczę od dłuższego czasu i nagle coś zaskakuje. Tak było np. z zadaniem 0 czy 1. Męczyłem się nim, pisałem kod na 100 linii, po czym okazało się, że wystarcza 30 linii. Wiem, wiem… Nie długość kodu świadczy czy jest to dobry kod. Jednak fajnie się patrzy gdy coś jest zwięźle napisane. Kod w tym zadaniu jest akurat zupełnym przeciwieństwem kodu z zadania z kanonierem Jasiem. Tutaj jestem zadowolony z tego, że rozwiązałem, ale do jakości kodu mam dużo zastrzeżeń, kiedyś go poprawię…

Masz na myśli typ long double - oczywiście :wink: Ja zrobiłem na “zwykłym” double, też na początek policzyłem stałe. Lenistwo czasami jest dźwignią postępu - nam sie nie chce i zrzucamy całą robotę na biedny komputer, pisząc dokładne instrukcje [programy] co “on” ma robić. :wink: Więc co Ci poszło nie tak?

Bardzo przyjemne i łatwe zadanie 0 czy 14 robi się trochę trudniejsze, gdy chcesz zmieścić się w 30 liniach. Myślę, że da się w 20 - oczywiście chodzi o “normalny” czytelny kod, a nie pisanie wszystkiego w jednej linii. No i bez fast i/o, bo to dodatrkowe linie kodu.

Kanonier napsuł mi trochę krwi, ale też wrócę kiedyś i spróbuję go poprawić :wink:

Oczywiście masz rację, chodzi o long double. Swoją drogą nie rozumiem dlaczego nazwą tego typu jest long double? Skoro mamy long long dla całkowitych to dla zmiennoprzecinkowych powinno być double double :slight_smile: No nie wiem co mi poszło nie tak. Jak napisałem wyżej, gdy te stałe miały podane 12 wyrazów po przecinku to nie zadziała, gdy dodałem jeszcze sześć poszło bez problemu. Wywnioskowałem stąd, że potrzebna jest jest pełna precyzja typu “double double:slight_smile: W 0 czy 1 poszedłem na początku w bardzo zawiłą (chociaż w sumie chyba ideowo poprawną) ścieżkę i zanim się z tego wykaraskałem trochę mi to zajęło. A te 30 linii to każda instrukcja w innej linii bez fast i/o, no i ja piszę w stylu
if
{
}
mam wrażenie, że ten styl jest rzadziej (bardzo rzadko?) używany.

Ja mam wrażenie, że wcale nie, ale żaden styl, sam z siebie, nie powoduje zmniejszenie lub zwiększenie czytelności. Tylko autor kodu może to sprawić :wink: - a dodatkowo np nie używając żadnego stylu.

Oczywiście ilość linijek kodu nie jest dobrym miernikiem jego jakości, a z powyższego lepiej byłoby porównywać ilość instrukcji, pomijając puste linie i linie tylko z klamrami, a jeszcze lepiej porównać wygenerowany kod maszynowy.

Każde zadanie można rozwiązać na wiele sposobów, więc jak możesz, przyślij mi na prv swój, a sprawdzę czy masz inaczej niż ja ;-). Ja mogę wysłać Ci mój.

Uff, ulżyło mi. Może nie będzie chłosty…
Zdaję sobie sprawę, że liczba linii nie jest wyznacznikiem jakości kodu, ani jego czytelności.
Wydaje mi się, że jednak zrobiłem progres w porównaniu z pierwszymi podejściami do zadania i z tego jestem zadowolony, chociaż na pewno jest się do czego przyczepić