Dyskryminacja Pythona na OI

0

Czytam sobie zasady organizacji zawodów OI i znajduję tam taki punkt

Limity czasowe są wspólne dla wszystkich dopuszczonych języków programowania i są dobierane względem rozwiązań napisanych w języku C++. To oznacza, że niektóre rozwiązania napisane w języku Python mogą okazać się zbyt wolne ze względu na specyfikę tego języka i wskutek tego otrzymywać niższą punktację niż ich odpowiedniki w języku C++.

Nie rozumiem dlaczego nie robią specjalnych testów dla Pythona, a jeśli już nie robią to po co jest możliwość pisania w innym języku niż C++, skoro takie samo rozwiązanie może dostać mniej punktów tylko i wyłącznie dla tego że nie jest napisane w C++.

4
Suchy702 napisał(a):

Czytam sobie zasady organizacji zawodów OI i znajduję tam taki punkt

Limity czasowe są wspólne dla wszystkich dopuszczonych języków programowania i są dobierane względem rozwiązań napisanych w języku C++. To oznacza, że niektóre rozwiązania napisane w języku Python mogą okazać się zbyt wolne ze względu na specyfikę tego języka i wskutek tego otrzymywać niższą punktację niż ich odpowiedniki w języku C++.

Nie rozumiem dlaczego nie robią specjalnych testów dla Pythona, a jeśli już nie robią to po co jest możliwość pisania w innym języku niż C++, skoro takie samo rozwiązanie może dostać mniej punktów tylko i wyłącznie dla tego że nie jest napisane w C++.

No raczej nie tak - jak napiszesz odpowiednio "szybki" kod w Pytonie to nie ma problemu. Nie ma mniej punktów za Pythona jest za wolny program.

2

Tak jak w zyciu - klienta nie obchodzi czy kod jest w ASM, czy w c++ czy w pythonie, liczy sie zeby to, za co zaplacil dzialalo sprawnie ;)

1

Z jednej strony rozumiem, bo dobór narzędzia do rozwiązania problemu jest też częścią rozwiązania problemu.

Z drugiej to chociażby w sporcie - mamy różne kategorie wagowe, czy w przypadku wyścigów mamy różne pojemności. Nieuczciwe by było wrzucenie do jednego wyścigu motocykli o pojemności 125 oraz 500ccm.

Pytanie - czy wysłałeś do komisji egzaminacyjnej takie zapytanie, czemu jest taki zapis?

1

Mnie tam dyskryminacja Pythona wcale nie dziwi.

5s4inrzijds51.jpg

3

Po pierwsze wynika to z historii, od samego początku OI była dla piszących w C/C++/Pascal, więc przyzwyczajenia mają tu dość duża rolę. Tak samo popularność (liczba zgłoszeń odpowiedzi w C++) ma znaczenie.

Po drugie wymaga to dodatkowej pracy (przepisać algorytm i zmierzyć jego wydajność).

Po trzecie wiele zadań online wyklucza z użycia Pythona i parę innych języków, bo w standardzie lub w standardowej bibliotece dostaje się za dużo i zadanie staje się zbyt trywialne.
Przykładowo, wielkie liczby w python masz w standardzie języka. W C++ dostaniesz to tylko w bibliotece zewnętrznej, czego nie da się zrobić, więc trzeba napisać samemu.

Zgadzam się,że python jest przyjemniejszy w użyciu zrozumieniu czytelności i nauczaniu, ale przyzwyczajenia trudno zmienić.

2

Zgodnie z radą @cerrato napisałem do organizatorów i otrzymałem odpowiedź:
Dzień dobry,

limity czasowe będą jawne, więc każdy zawodnik będzie w stanie ocenić, na ile jego rozwiązania spełniają wymagania zadania. Limity czasowe uwzględniają rozwiązania w Pythonie, ale owszem, może się tak zdarzyć, że nawet rozwiązanie wzorcowe napisane w Pythonie nie otrzyma 100 punktów.

Zachęcamy wszystkich do próbowania swoich sił w języku Python, tym bardziej że jest to często pierwszy język nauki programowania. Z drugiej strony nie ukrywamy, że na najwyższych szczeblach Olimpiady, a tym bardziej później na Międzynarodowej Olimpiadzie Informatycznej, do osiągnięcia sukcesu jest potrzebna znajomość efektywnego języka takiego jak C/C++.

Pozdrawiam
lider Jury OI

Teraz już wiem od tego pana jak działają drzewa przedziałowe ;) i dlaczego pisać w C++ na OI

1

To tak jakby powiedzieć że w formule 1 dyskryminują silniki produkowane seryjnie. W ogóle jak tu porównywać C/C++ do pythona? Samo to że dopuszczają to już jest niezły ukłon. Na Twoim miejscu zapytałbym czy pypy jest dopuszczony do użycia :)

1

Z drugiej strony jakby python miał swoje limity czasowe, to wtedy piszący w python-ie mieli by przewagę, bo w python pisze się szybciej i wygodniej (przy takim samym poziomie opanowania języka).

0

Są testy gdzie Python czy Java mają swoje miejsce, tylko to wymaga specjalnego podejścia od egzaminatora.
Testy przede wszystkim powinny estymować O(n) (CPU i pamięć) a nie czas absolutny.
Na Coursera (kurs "algorytmy") tool potrafi wyliczyć zużycie pamięci co do bajta, O(n) też estymuje.
Na HackerRank lub podobnej stronie Python ma specjalne traktowanie z tego co pamiętam.

1

Ale czemu mają faworyzować język, który daje gorsze rezultaty? Jeżeli w Pythonie osiągniesz rezultat działający odpowiednio szybko, to ok. Faworyzowanie Pythona byłoby niesprawiedliwe, bo to wolniejsze działanie daje w zamian łatwiejsze osiągnięcie celu. Gdyby Python był traktowany inaczej, to skorzystałbyś z korzyści, a wady nie byłyby wzięte pod uwagę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1