Challenge accepted – czyli programistyczne wyzwania

W artykule przedstawię kilka portali internetowych, na których znajdziemy bardzo wciągające zadania programistyczne.

Cześć! Zapraszam do zapoznania się z kolejnym artykułem, dziś na tapetę biorę temat nie techniczny, ale pozostający w tematyce programowania. Chciałbym przedstawić wam kilka miejsc w sieci, moim zdaniem wartych uwagi, gdzie w bardzo ciekawy i przy tym dający sporo satysfakcji sposób można poprzez rozwiązywanie zadań zwiększać swoje umiejętności lub też nabywać nowe poprzez naukę nowego języka programowania a także, co zdarza się coraz częściej – zdobyć nową pracę. Zrobiłem zestawienie kilku portali internetowych, na których możemy pracować nad swoimi umiejętnościami, ale przede wszystkim dobrze się bawić.

Codingame

Link: www.codingame.com

Screen z portalu codingame.com
Screen z portalu codingame.com

Codingame to bardzo interesujący i zdecydowanie nowatorski portal z zadaniami dla programistów. Portal ten to pewnego rodzaju gra, w której naszą największą bronią są nasze umiejętności programistyczne, a nasz bohater, czyli w zasadzie my sami musi sprostać kolejnym zadaniom, dzięki którym zyskuje coraz większy poziom doświadczenia i odblokowuje kolejne zadania.

Same zadania na Codingame są świetnie rozbudowane pod względem fabularnym. Każde zadanie to nowa historia, w której musimy się odnaleźć i wykonać postawiony cel. Na początku wybieramy główny język programowania, jakim nasz bohater będzie się posługiwał. W każdym zadaniu mamy edytor kodu, w którym piszemy rozwiązanie. Do każdego zadania dodane są przypadki testowe, które sprawdzają czy nasz kod realizuje przedstawiony w zadaniu cel.

Kapitalną robotę wykonują tutaj animacje, w których przedstawione jest zachowanie postaci jaką mamy w historii lub jej przeciwników. Każdy przypadek testowy, który jest wykonywany to kolejna animacja. Programowanie na tym portalu daje bardzo dużo doznań estetycznych i w świetny sposób potrafi zobrazować napisany przez nas kod. Sam portal oferuje bardzo dużą liczbę zadań, wątków fabularnych, a także zadań sponsorowanych – czyli zadań rekrutacyjnych, które mogą zagwarantować nam angaż w firmie!

SPOJ

Link: www.spoj.com

Screen z portalu spoj.com
Screen z portalu spoj.com

SPOJ czyli Sphere online judge to portal z zadaniami programistycznymi, który wspiera ponda 45 języków programowania. SPOJ wyróżnia na pewno fakt, że nie dostarczamy tutaj gotowego wyniku w postaci liczby czy jakiegoś zestawu znaków, a dostarczamy rozwiązanie w postaci kod źródłowego.

Zadania na SPOJu są bardzo zróżnicowane, czasem są to algorytmy do zaimplementowania, a czasem fajnie opisane zadania, które wymagają bardziej logicznego myślenia i sprytu. Jak wspominałem wcześniej na SPOJu dostarczamy kod źródłowy w jednym z ponad 45 wspieranych języków programowania. Wykonaniem tego kodu zajmuje się „wirtualny sędzia”, który decyduje czy odpowiedź może zostać uznana za prawidłową. W każdym zadaniu mamy pewne wymagania do spełnienia np. odnośnie czasu wykonania czy też pamięci jaką mamy dostępną. Po wysłaniu rozwiązania musimy poczekać na decyzję. Wszystkie rozwiązania wysłane przez innych użytkowników możemy zobaczyć w zakładce „Status”. Jeśli zadanie zostało odrzucone zostanie, tam wyświetlona informacja dlaczego.

Ciekawostka odnośnie SPOJa – istnieje polska wersja tego projektu pod adresem pl.spoj.com, gdzie zadania prezentowane są w języku polskim. Cała reszta odbywa się bez zmian, czyli przy pomocy bezwzględnego sędziego.

Projekt Euler

Link: www.projecteuler.net

Screen z portalu projecteuler.net
Screen z portalu projecteuler.net

Projekt ruszył ponad 20 lat temu! Dokładnie w październiku 2001 roku jako podsekcja platformy mathschallenge.net. Dopiero 5 lat później został przeniesiony na własną domenę. Nazwa portalu pochodzi o znanego szwajcarskiego matematyka – Leonharda Eulera. Project Euler to kawał historii, jednak zadania ani trochę nie straciły na stopniu trudności. Budowa portalu przypomina strony internetowe rodem z lat 00′, prosta budowa, bez zbędnych wodotrysków, to co najważniejsze, czyli treść zadania jest dobrze widoczna i to się liczy.

Portal zawiera 821 zadań matematycznych o różnych stopniach trudności oraz 10 ostatnio opublikowanych zadań z forum. Jak widać jest w czym wybierać. Nie ma narzuconego języka programowania jaki mamy wykorzystać, liczy się tyko wpisanie prawidłowego wyniku w pole tekstowe pod zadaniem. Zadania możemy wykonywać w dowolnej kolejności, z tym że te pierwsze są zdecydowanie łatwiejsze.

Rozwiązując zadania możemy zdobywać kolejne poziomy oraz otrzymywać nagrody. Po rozwiązaniu każdych kolejnych 25 zadań zwiększa się nasz poziom, maksymalnie możemy osiągnąć 32 level. Oprócz poziomów otrzymujemy również nagrody, np. za rozwiązanie 3 problemów możemy otrzymać nagrodę Baby Steps… 🙂 Zadania są trudne, te spod 800tki to już w ogóle. Portal posiada własne forum, gdzie możemy znaleźć ciekawe treści pomocne w rozwiązywaniu zadań – zwykle są to mini kursy matematyczne, niestety rozwiązać zadanie musimy samodzielnie. Ciekawostką jest fakt, że po rozwiązaniu zadania uzyskujemy dostęp do specjalnego wątku, gdzie inni użytkownicy prezentują swoje rozwiązania.

Advent of Code

Link: adventofcode.com

Screen z portalu adventofcode.com
Screen z portalu adventofcode.com

Mój absolutny faworyt w tym zestawieniu. Zakładam, że każdy kojarzy z dzieciństwa kalendarze adwentowe z czekoladkami, które były ukryte w okienkach na każdy dzień adwentu – istnieje legenda o osobie która codziennie otwierała tylko jedną czekoladkę. Ja taką osobą na pewno nie byłem. Ale wspomnienia mam z tym dobre, jak w ogóle ze świętami Bożego Narodzenia. Strona adventofcode.com przychodzi z ciekawą alternatywą dla takiego czekoladkowego kalendarza. Od 1-go grudnia do 25go, codziennie „otwierane” jest nowe zadanie, czy jak nazywa je twórca „Puzzle”, w którym musimy wykorzystać swoje umiejętności programistyczne aby pomóc czy to elfom, czy też innym istotom bez których święta się nie mogą odbyć. Kapitalna rozrywka utrzymana w duchu świąt, zadania są bardzo barwnie przedstawione, co jeszcze bardziej dodaje chęci aby je rozwiązać.

Zabawa polega na tym, że każdego dnia odblokowywane jest nowe zadanie, które zawiera ciekawą historię oraz indywidualny zestaw danych, które są nam potrzebne do wykonania zadania. Nie ma możliwości, że ktoś poda nam odpowiedź, dla każdego użytkownika końcowa odpowiedź jest inna. Zadania są bardzo opisowe jednak zawsze zawierają przykładowy zestaw danych i rozwiązanie. Zdarzają się również zadania pod opisem których kryje się jakiś algorytm, np. kiedy musimy pomóc Elfom wspiąć się jak najszybciej na szczyt góry, aby złapały zasięg w swoich magicznych urządzeniach – wtedy algorytm najkrótszej ścieżki idealnie się nada.

Warto wspomnieć, że za zadania otrzymujemy gwiazdki, każde zadanie ma maksymalnie dwie gwiazdki. Za rozwiązanie zadnia dostajemy jedną gwiazdkę, następnie pojawia się rozszerzenie tego zdania, które jak rozwiążemy otrzymamy komplet gwiazdek. Dlatego ważne jest tworzenie kodu rozwiązania jak najbardziej otwartego na modyfikacje, ponieważ rozszerzenia często zmieniają zachowania pewnych elementów w zadaniu, więc później może być trudno o rozwiązanie dodatkowego zadania.

Podsumowanie

Dzięki za poświęcenie czasu na przeczytanie artykułu. Starałem się nie rozpisywać w szczegółach o każdym z przedstawionych wyżej portali, chciałem tylko pokazać moim zdaniem ich najlepsze cechy, które mogą sprawić, że odwiedzicie któryś z nich i znajdziecie coś dla siebie.

Temat challenge’ów dla programistów robi się coraz bardziej modny. Niektóre firmy prowadzą w ten sposób rekrutacje na stanowiska – osiągnięcie odpowiednio wysokiego wyniku przy rozważaniu zadnia może zagwarantować wam bezpośrednie zatrudnienie się w firmie!

Myślę, że warto się przyjrzeć przedstawionym wyżej portalom. Spróbujcie sobie w wyszukiwarce na github.com wpisać np. AdventOfCode 2022, zobaczycie jak wielu użytkowników dzieli się swoimi rozwiązaniami. Jest tego naprawdę sporo.

Pamiętaj, że zawsze możesz się ze mną skontaktować w razie jakichkolwiek pytań a może znasz jakiś inny portal z wyzwaniami dla programistów? Możesz to zrobić przez formularz kontaktowy. Będę również bardzo wdzięczny, jeżeli podzielisz się tym materiałem ze swoimi znajomymi poprzez udostępnienie na LinkedIn lub w innych mediach społecznościowych. Dzięki!

Podziel się swoją opinią
Mateusz Łysień
Mateusz Łysień

Programuje i czasem coś piszę na blogu.

Artykuły: 13