Kurcze, człowiek nie ma czasu na SPOJa a tu te same tematy od lat 
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
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.html
(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.