Wpis z mikrobloga

Utarło się, że C++ jest językiem stosowanym do competitive programmingu. W statystykach google code jamu prawie wszyscy finaliści w nim rozwiązywali zadania. Dlaczego podczas #adventofcode prawie cała topka pisze w Pythonie?


#programowanie
  • 12
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@cordianss ponieważ w pythonie pisze się o wiele szybciej. Do tego wśród najnowszego narybku python jest najpopularniejszy. No i ostatecznie w adventofcode nie ma narzutu czasowego na wykonanie algorytmu a w wielu konkursach jest. Więc tam wybiera się rodzinę C bo jest najszybsza :)
  • Odpowiedz
@cordianss: @DoubleAxxis
Dlatego najlepiej połączyć oba światy i pisać w D :) Tak, wiem, stosunkowo niszowy (przynajmniej w porównaniu do C++/Pythona), ale imho ma wszystko czego potrzeba do zadanek (szybki input, łatwość w pisaniu kodu, m.in dzięki wielu pomocnym lukrom syntaktycznym, duży zbiór funkcji w standardowej bibliotece). Bardzo lubię i polecam gdzie się da :)
https://dlang.org/
  • Odpowiedz
@cordianss: Po pierwsze topka z konkursów międzynarodowych to nie to samo co topka z AoC. AoC to zabawa, te zadania są zbyt łatwe aby ludzie mocni z algorytmiki się nimi jarali. W AoC widziałem że biorą głównie udział ludzie np. uczący się programowania. Po drugie w AoC liczy się tylko wynik a nie szybkość czy zajętość pamięci. Gdyby wydajność była kryterium to te rozwiązania w Pythonie przegrałyby z kretesem.
  • Odpowiedz
@zibizz1: Python jest akurat dość rozwlekły. Istnieją języki znacznie ekspresywniejsze - Haskell, Ocaml, Scala, Swift, Lisp. Nawet nowoczesna Java ze streamami nie jest gorsza.

@radekr: D to ślepa uliczka, nieudana próba zrobienia następcy C++. D nie rozwiązał żadnego problemu C++, to po prostu C++ z ładniejszą składnią a składnia nie ma tak naprawdę większego znaczenia (do składni każdy się wcześniej czy później przyzwyczaja i nie jest ona ograniczeniem).
  • Odpowiedz
@radekr: w Pythonie pisze się szybciej tylko małe rzeczy takie jak właśnie do AoC. Duże projekty pisze się wolniej niż w modern C++ :P
  • Odpowiedz
Dlaczego podczas #adventofcode prawie cała topka pisze w Pythonie?


@cordianss: python jest dobry do pisania takich programów jak robi się to rzadko tj. raz w roku jak to ma miejsce w przypadku AOC. Pisanie takich programów w C++ jest mało wygodne, jeśli nie napiszesz sobie dużo helperów do robienia takich programów jak to ma miejsce w przypadku competetive programming w C++.

Do tego masz sprawdzanie typów i szybkie wykonanie co jest przydatne dla większych
  • Odpowiedz
Python jest akurat dość rozwlekły. Istnieją języki znacznie ekspresywniejsze - Haskell, Ocaml, Scala, Swift, Lisp. Nawet nowoczesna Java ze streamami nie jest gorsza.


@Krolik: ja używam pythona w AOC tylko dlatego, że mam go ogarniętego do tego typu zadań, gdyż całe studia robiłem podobne rzeczy w pythonie (jakieś parsowanie tekstu, algorytmy). W językach których używam np. C++ czy Go nie byłbym tak produktywny
  • Odpowiedz
@Krolik: Ale ja właśnie mówię o pisaniu takich programików na AoC. I tutaj już, przynajmniej dla mnie, składnia, czytelność i szybkość pisania ma duże znaczenie :)

A co do komentarza o rozwlekłości - chyba trochę czym innym jest język czysto funkcyjny jak Haskell, a czym innym Python :) Część takich zadanek pewnie dużo trudniej zrobić w Haskellu niż w Pythonie, np. jak wejdą jakieś grafy.
  • Odpowiedz
@cordianss: w AoC nie liczy się praktycznie wydajność napisanych programów. Ludzie dostają gwiazdki również za rozwiązania działające po kilka godzin. Akurat z takim tragicznym rozwiązaniem nie zakwalifikujesz się do topki, ale z wciąż powolnym programikiem liczączym rozwiązanie w 5-100s to i owszem

W competitive programming najpopularniejsza formuła to wysyłanie pliku z kodem, który system potem kompiluje i uruchamia testy z limitem czasowym. Python jest OKROPNY do tego. Nie jest nieużywalny,
  • Odpowiedz