Jakie są wskazówki dotyczące wyboru odpowiedniego języka do gry w golfa? Jakie czynniki wpływają na wybrany język?
Oto kilka przykładowych typów problemów:
- Problemy wymagające rozwiązania We / Wy , konsoli lub pliku
- Problemy wymagające analizy
- Problemy wymagające napisania rozwiązania jako definicji funkcji
- Problemy matematyczne
- Problem z liczbami pierwszymi
- Rozwiązywanie zagadek liczbowych
- Wykonywanie metod numerycznych
- Przetwarzanie łańcucha
- Przetwarzanie tablic
- Trudne problemy z tablicą 2D
- Geometria obliczeniowa
- Rekurencja
- Grafika 2D
- Grafika 3D
- Audio
- Sieć / sieć
- Równoległe przetwarzanie
Nie mów po prostu takich rzeczy jak „Użyj GolfScript | J”, ponieważ je lubisz.
Odpowiedzi:
W zależności od tego, czego potrzebujesz, C / C ++ jest szybki, ale sam musisz napisać więcej pracy. Python i Ruby są wolniejsze, ale łatwiej je kodować dzięki wbudowanym metodom, które skracają dużo pracy i automatycznie obsługują nieskończenie duże wartości (jeśli jedna ma pamięć RAM). Używanie funkcjonalnego języka, takiego jak Haskell, doskonale nadaje się do czysto matematycznego wykorzystania funkcjonalnego, jeśli można w ten sposób sformułować problem.
źródło
Umieszczając moje dwa centy na tablicach języków programowania , w szczególności J i APL .
K / Kona, Q i Nial również należą do tej kategorii, ale generalnie mają te same zalety i krytykę. Użyj dyskrecji. Użyję poniższych przykładów J, głównie dlatego, że są to ASCII, a zatem łatwe do wpisania - pamiętaj, że znaki APL liczą się jako pojedyncze bajty, więc nie pozwól, aby to był twój problem z językiem jako wyborem do gry w golfa.
Te dwa są bardzo dobrymi językami matematyki i manipulacji danymi, ponieważ podrzucają tablice wokół wysokiego poziomu, a wiele zapętleń wykonuje się domyślnie , mówiąc np. Dodaj dziesięć do każdego z 3, 4 i 5 (
10 + 3 4 5
) lub zsumuj każdy wiersz tablicy (+/"1 arr
- pętla znajduje się w"1
).W szczególności problemy z liczbą pierwszą, J ma szybkie i krótkie wbudowane operacje podstawowe, podobnie jak niektóre dialekty APL. (Edycja: Myślę o Nars2000, który jest częściowo dialektem, a częściowo zupełnie inną implementacją. APL nie ma wbudowanej liczby pierwszych). N-ta liczba pierwsza (
p:
), nie. liczb pierwszych do (_1&p:
), faktoringu (q:
), GCD i LCM (+.
i*.
) itd., jest ich wiele. Jednak w praktyce pytanie często określa, że musisz przygotować własne główne implementacje, aby nie były zbyt przydatne. Nadal istnieją fajne i wymyślne sposoby na zdobycie najlepszych rzeczy, których potrzebujesz, po prostu staje się trochę mniej wycinany i wklejany.Przetwarzanie tablic i ciągów jest trochę mieszaną torbą: jeśli jest to coś, w czym APL / J jest dobry lub ma prymitywny lub wspólny idiom, jest to prawie banalne; jeśli jest to coś, co jest bardzo sekwencyjne i niezbyt równoległe, będziesz miał zły czas. Wszystko pomiędzy jest w powietrzu, choć zwykle zareagują pozytywnie.
IO jest dziwne. APL ma wyrażenia wejściowego pojedynczego znaku, ale z J trzeba wydać co najmniej 8 do czytać w liczbie:
".1!:1]1
. Dane wyjściowe są nieco mniej szczegółowe, ale w praktyce nadal widzisz zmarnowane 6 lub 7 znaków. W szczególności J bardzo ją lubi, jeśli możesz wprowadzić dane wejściowe jako argumenty funkcji, zamiast musieć manipulować samym IO.W praktyce, w przypadku J i APL, rozwiązanie jest zwykle zapisywane jako funkcja, którą wywołujesz na konsoli. Dzięki APL możesz w zasadzie po prostu wstawić nazwy zmiennych dla swoich argumentów, owinąć wyrażenie, z którym pracujesz, w nawiasy klamrowe i nazwać to dniem.
Ale w przypadku J jest pewne narzuty związane z jawnym definiowaniem funkcji
3 :'...'
- i musisz uciec od wszelkich ciągów znaków wewnątrz - więc zwykle wykonuje się coś, co nazywa się programowaniem ukrytym: programujesz na poziomie funkcji, łącząc w pewien sposób prymitywy podobnie jak Haskell. Może to być zarówno błogosławieństwo, jak i przekleństwo, ponieważ nie musisz wydawać tylu postaci odwołujących się do swoich argumentów, ale łatwo utopić się w nawiasach i w rezultacie stracić dziesiątki postaci próbujących włamać się do twojego skądinąd krótkiego i sprytnego rozwiązania w coś, co działa.Nie mam doświadczenia w grze w te problemy, ale powiem to: w końcu języki programowania macierzy są bardzo dobre w pipowaniu i transformowaniu dużej ilości danych w ten sam sposób. Jeśli potrafisz przekształcić problem w ćwiczenie polegające na tasowaniu liczb, możesz uczynić go problemem APL / J, bez potu.
To powiedziawszy, nie wszystko jest problemem APL / J. W przeciwieństwie do Golfscript, APL i J po prostu świetnie nadają się do gry w golfa, obok innych korzyści;)
źródło
Dlaczego nie pochwalono jeszcze Perla? Jest to doskonały język golfowy, dla prawie każdego z nich, szczególnie dla rzeczy związanych ze strunami (regex).
Burleska jest dobra dla programów związanych z liczbami, a Ruby jest świetny do prostszej manipulacji tekstem.
Jest rzeczywiście lista języków i ocenę golfa nad tutaj .
źródło
Lubię używać niejasnych języków programowania, aby (próbować) wykonać zadanie.
Oto moje ulubione szczegóły, które wymieniłeś:
Problemy wymagające rozwiązania We / Wy, konsoli lub pliku
Języki takie jak TI-Basic działają dobrze, ale wolę Ruby z tego powodu
puts
Problemy wymagające analizy
GolfScript z pewnością Ci pomoże
Problemy wymagające napisania rozwiązania jako definicji funkcji
Tabela TI-84 - zezwala na funkcje,
Y=
np.Y=|X|
Zwraca wartość bezwzględną XProblemy matematyczne
TI-Basic - stworzony dla kalkulatora, więc zawiera matematykę;)
Problem z liczbami pierwszymi
Nic specjalnego; Mathematica jest prawdopodobnie właściwym narzędziem do pracy
Rozwiązywanie zagadek liczbowych
TI-Basic, ponieważ automatycznie przechodzi przez tablice
Wykonywanie metod numerycznych
TI-Basic lub Mathematica
Przetwarzanie łańcucha
Python - ma kilka świetnych funkcji łańcuchowych.
Bez względu na to, jak dobrze Twoim zdaniem TI-Basic jest, nie używaj go do ciągów ...
Przetwarzanie tablic
TI-Basic - automatycznie zapętla tablice ; np. zwiększ wszystkie wartości w tablicy -
L1+1→L1
Ruby - ma również bardzo potężne funkcje tablicowe i oczywiście
!
pomoże również skompresować kodTrudne problemy z tablicą 2D
Ruby lub Python działają tutaj najlepiej, ponieważ TI-Basic nie obsługuje tablic 2D
Geometria obliczeniowa
TI-Basic ma cechy geometryczne i może być używany do większości matematyki, aż do rachunku różniczkowego i algebry liniowej
PREMIA
Pętla
Albo Arduino, albo Quomplex . Arduino ma wbudowane,
void loop(){}
a Quomplex ma nieskończone pętle zawarte w nawiasach ([]
)Rysunek / GUI
Game Maker Language ma bardzo rozbudowane funkcje rysowania, a TI-Basic jest również ogólnie przydatnym narzędziem ze względu na obsługę rysowania na wykresie.
Quines
Albo HQ9 + lub Quomplex, ponieważ HQ9 + ma
Q
wyprowadzać kod źródłowy programu, a Quomplex automatycznie wydrukuje swój kod źródłowy, chyba że określono*
(wyjście) lub nie generuje żadnego wyniku, zdefiniowanego za pomocą#
źródło
Jeśli rozwiązujesz problem matematyczny i nie masz Mathematica, wypróbuj Sage . Opiera się na Pythonie, więc jeśli znasz już Pythona, nie potrzebujesz dużo czasu, aby nauczyć się jego składni.
Przykłady:
Jest także przydatny do kreślenia wykresów i rozwiązywania równań (np. Możesz użyć
solve()
funkcji w Sage, lub jeśli jest to zabronione przez reguły, pozwala na łatwą implementację procesu Newtona Raphsona, ponieważ madiff()
funkcję, która może wykonywać różnicowanie symboliczne) .Poza tym, jeśli jesteś programistą w Python2, użycie Sage może pozwolić ci oszukiwać, pomijając długie
import
instrukcje. Na przykładmath
isys
są już domyślnie importowane. (Pamiętaj, że może to nie działać, jeśli Twój program Python2 zależy od podziału na liczby całkowite).źródło
Znam trzy języki - Java, C ++ i Python 3. Nie znam żadnego z nich na wysokim poziomie, ale takie jest moje doświadczenie z nimi.
Jawa:
Nigdy więcej nie użyję Javy do gry w golfa. Pisanie zajmuje ponad 80 znaków
Hello World!
. Ma jednak swoje zalety:C ++
C ++ jest bardzo silnym językiem, ale jest dość długi, gdy próbuje grać w golfa na 56 znaków
Hello world!
.Python 3
Python 3 jest podobny do C ++ i Java. Jest o wiele krótszy, ponieważ nie jest mocno wpisany - innymi słowy, zgaduje tylko, jakie są zmienne.
źródło