Czy ograniczenie olimpiad do C/C++ i Pascala (podobno też Javy) podchodzi pod rasizm (programistyczny)?

0

Clickbait, ale tak na serio, to dlaczego na Olimpiadach jest tylko C/C++/Pascal i podobno Java gdzieś się pojawiła?

Czy np. w takim C# nie dałoby się dojść do jakiegoś dalszego etapu (lub wygrać) w takiej olimpiadzie?

pagging u/ @somekind (c#?) @Shalom @jarekr000000 (java?) @kq @_13th_Dragon (c/cpp?) i całą resztę ekspertów

0

Być może organizatorzy olimpiad nie potrafią skompilować C#. Poza tym większość z nich jest w takim wieku, że Pascala i C mieli szanse poznać w młodości, więc potrafią czytać kod w tych językach. Z nowszymi językami najwyraźniej mają problemy.

0
somekind napisał(a):

Być może organizatorzy olimpiad nie potrafią skompilować C#. Poza tym większość z nich jest w takim wieku, że Pascala i C mieli szanse poznać w młodości, więc potrafią czytać kod w tych językach. Z nowszymi językami najwyraźniej mają problemy.

Spotkałem się z opinią, że c++ jest szybkie. A według ciebie, jeżeli chodzi o wydajność to C# mógłby konkurować z C++ w takich zadankach?

4
  1. C/C++ jest generalnie szybsze w takich zadaniach. JIT się tutaj słabo sprawdzi bo to nie są aplikacje które działają długi czas a dodatkowo GC wprowadza potecjalnie niedeterminizm w czasie wykonania co znów utrudnia sprawdzanie.
  2. Często trzeba rzeźbić w zużyciu pamięci co trudno osiągnąć w językach wysokiego poziomu (akcje w stylu pola bitowe, upakowane struktury itd)
  3. Wydaje mi się że nie wielki byłby pożytek z Javy czy C# bo o sile tych języków stanowi łatwość pisania splikowanego "technologicznie" kodu (postawienie webserwera w kilku linijkach, połączenie do bazy danych, rozproszenie wykonania czegoś na wiele wątków itd) a na olimpiadzie to trzeba w 3 pętlach coś wyczarować i najwyżej gdzieś sie przyda lista, mapa i drzewo.
0

Jak są dobrze zadanka skonstruowane (małe próbki, ogromne próbki i przypadki brzegowe) to wydajność języka można pominąć.
Ja na HackerRank używam tylko Javy.
Gdzieś widziałem że jest automatyczne skalowanie czasu względem wybranego języka, może to był HackerRank, może coś innego.
Testy algorytmiczne powinny badać przede wszystkim poprawność i skalowalność.
Jakiś czas temu @katelx tu udowodniła że nawet C/C++ może mieć problem z czytaniem pliku jak się to zrobi tak zwyczajnie z marszu.

0

Jak kojarze, to za moich czasów był tylko Pascal - co już wtedy było obciachem (chyba... już, nie pamiętam, ale to był chyba jedyny powód, że się Pascala uczyłem).
Co do szybkości działania... jeśli zadania są wykonywalne w max kilka sekund -> to wszystko na maszynach wirtualnych ma trochę przegrane. Ale to wg mnie kiepskie zadania. Jeśli już mierzyć czasy to powinny być kilkunastosekundowe, minutowe - inaczej raczej promuje się mikrooptymalizacje nad lepszymi algorytmami (za małe n). Jak dla mnie nie powinno o to chodzić (bo to wiedza raczej szybko się zmieniająca i specyficzna). Jak napisał @vpiotr - powinno się raczej promować poprawnośc i skalowalnosć - ale to nie ja (ani on ) ustalamy reguły.

Rzeźbienia w pamieci nie ogarniam - tzn. nadal sie to robi w praktycznych aplikacjach i trzeba umić , ale jest to tak trywialne/automatyczne zadanie, że nie kumam czemu miałoby stanowić jakiś element w olimpiadach informatycznych. Ale cóż jak niektórzy się tego nauczyli w latach 80tych to pewnie nadal uważają za majsterszyk oprogramowania upychanie rekordów do pól bitowych.

To co robią dobrze: to odpalanie na w miarę dobrze zdefiniowanym "wirtualnym" sprzęcie (których ma wirtualnie dużo cache) - więc przynajmniej jakieś rozsądne porównywaniee jest.... z drugiej strony żaden kompilator chyba nie optymalizuje kodu pod kątem takiego procka (ale też chyba akurat w C/C++/Pascal to nie ma znaczenia).

Jak już ograniczać jezyki to bym tam zostawił tylko Haskella - tej koncepcji z C/C++/Pascal nie ogarniam - ale też bardzo mnie to nie boli - ot taki dowcip. Dobrze, że nie brainfuck albo malbolge.
Tak, że nie robiłbym z tego CC++/Pascal wielkiej tragedii tylko przyjął na klatę jako element zabawy.
Btw. z C++ da się całkiem porządnie pisać - tylko dużo się trzeba naumieć, jeśli to ma nadal być zmikrooptymalizowane.

1

Jeśli jest Java to po co C#? Różnice w kodzie i tak byłyby minimalne, bo na OI często nawet standardowych kolekcji się nie używa. W zadaniu jest np ograniczenie na rozmiar danych do X rekordów, więc na sztywno się taki rozmiar tablicy ustawia i po co nam ArrayListy czy std::vectory?

Poza tym serwery na których odpalane są programy mogą stać na X-letnich Linuksach, na których nawet nie da się postawić .NET Core. Jeśli chcesz wiedzieć co jest dokładnie powodem braku możliwości pisania w C# to zapytaj adminów OI.

0

Jak dla mnie po prostu organizatorzy nie chcą na to poświęcać czasu. Na MAIN-ie nawet nie ma C++11, więc gdzie tam do C# lub Haskella, na PA jest troszkę lepiej, bo są rundy rozproszone i jest Java.

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