Wskazówki do gry w golfa w Haxe

12

Jakie masz ogólne wskazówki na temat gry w golfa w Haxe ? Szukam pomysłów, które można by zastosować do problemów z golfem i które są przynajmniej w pewnym stopniu specyficzne dla Haxe (np. „Usuń komentarze” nie jest odpowiedzią).

Proszę zamieścić jedną wskazówkę na odpowiedź.

Haxe można uruchomić tutaj online !

Yytsi
źródło
W przeszłości dość często korzystałem z Haxe, ale odkąd zacząłem grać w golfa, nie używałem go zbyt często. Będę musiał spróbować użyć go do gry w golfa ...
ETHproductions
@ETHproductions To samo tutaj. Dzisiaj grałem z nim dwa razy i było fajnie. Ma kilka dobrych możliwości gry w golfa (na przykład) ze zrozumieniem listy i iteratorami, więc postanowiłem otworzyć pytanie, aby sprawdzić, czy ktoś ma jakieś wskazówki do podzielenia się.
Yytsi

Odpowiedzi:

8

Interpolacja ciągów

Haxe obsługuje interpolację łańcuchów w łańcuchach pojedynczych cudzysłowów. Podobnie jak ciągi szablonów w JavaScript ES6, możesz zawrzeć wyrażenie w ciągu ${...}:

trace('2 + 2 = ${2 + 2}');

W przeciwieństwie do ES6 można jednak pominąć nawiasy klamrowe, gdy wyrażenie jest pojedynczą zmienną:

var x = 2 + 2;
trace('2 + 2 = $x');

Wydrukowano oba te przykłady 2 + 2 = 4.

ETHprodukcje
źródło
7

Zrozumienia tablic

Haxe obsługuje tablice:

trace([for (i in 0...5) i]); // Prints 0,1,2,3,4

W przeciwieństwie do wielu innych języków, możesz także używać whilew zrozumieniu:

var i = 5;
trace([while (i > 0) i--]); // Prints 5,4,3,2,1

Może to być bardzo przydatne, gdy nie wiesz, jak długo potrzebujesz tablicy.

Można również łańcuchowe for, while, i ifoświadczenia:

trace([for (x in ['A','B','C','D'])
       for (y in ['x','y'])
       if (x + y != "Cx")
       x + y
]); // Prints Ax,Ay,Bx,By,Cy,Dx,Dy
ETHprodukcje
źródło
Łał. Usunę moją odpowiedź. Dosłownie zbudowałem tę samą odpowiedź, tylko minutę później. Warto też zauważyć, że faktycznie drukuje nawiasy kwadratowe wokół list, więc czytelnicy nie będą pomyleni, ponieważ niektóre wyzwania wymagają ścisłych formatów wyjściowych.
Yytsi
@TuukkaX Haha, to się czasem zdarza :) Dołączę tutaj jeden z twoich przykładów, jeśli nie masz nic przeciwko. Ponadto try.haxe.org nie drukuje nawiasów kwadratowych ...
ETHproductions
Ten, który oblicza iloczyn kartezjański, jest schludny. Myślę, że byłby to dobry dodatek do twojego posta :)
Yytsi
6

Operator zasięgu

Haxe ma operator zakresu, ...którego można używać do tworzenia zakresów liczb całkowitych. Na przykład zamiast tego:

var i = 0;
while (i < 10) trace(i++);

Możesz to zrobić:

for (i in 0...10) trace(i++);

Specyfika dla x...y:

  • xi yoba muszą być Ints.
  • xnie może być większy niż y.
  • Zwraca obiekt IntIterator , którego można używać w tych samych miejscach, co dowolny Iterable.
ETHprodukcje
źródło
1

Warunkowe uruchomienie instrukcji

Oczywiście możesz uruchomić wszystko warunkowo za pomocą if:

if(n>5)doSomething(n);

Jeśli jednak masz tylko jedną instrukcję jak powyżej, możesz użyć trójskładnikowego operatora warunkowego, aby zapisać bajt:

n>5?doSomething(n):0;

Czasami możesz zapisać kolejny bajt &&, chociaż jest to bardzo rzadkie, ponieważ &&działa tylko wtedy, gdy oba wyrażenia zwracają logiczne:

n>5&&doSomething(n);

Jednym z głównych wyjątkiem jest wyszukiwane : jeśli Haxe napotyka na return, breaklub continue gdziekolwiek , to natychmiast uruchomić go i rzucić cokolwiek ekspresja była ona pracuje. Oznacza to, że zamiast tego:

if(n>5)return n;

Możesz to zrobić, aby zapisać 2 bajty:

n>5&&return n;
ETHprodukcje
źródło
1

Używaj słów kluczowych w wyrażeniach

Inną niezwykłą cechą Haxe jest to, że wszystko jest wyrażeniem . Na przykład ten kod jest całkowicie poprawny:

function(n){while(n>0)n%4==1?return 6:n--;return 3;}

Ok, to dość bezużyteczny przykład, ale mam nadzieję, że rozumiesz. Działa to z większością słów kluczowych:

function(n){while(n>0)n%4==1?break:n--;return n;}

Pozwala to na użycie if/ elseinline p=if(n>1)7else 4;, chociaż oczywiście p=n>1?7:4;jest ono krótsze.

Słowa kluczowe, których nie można używać bezpośrednio

  • var - Kompilator będzie narzekał na próbę użycia Void jako wartości.
  • for/ while- Taki sam jak powyżej, ale można ich używać w interpretacjach tablicowych .
ETHprodukcje
źródło
1

Pomiń nawiasy funkcyjne

W przeciwieństwie do większości języków, wszystko w Haxe jest wyrażeniem , w tym {blocks}. Zatem nawiasy klamrowe w dowolnym miejscu w programie Haxe (z wyjątkiem switchwyrażeń) można pominąć, jeśli zawierają tylko jedną instrukcję. Zamiast tego:

function f(n){return Math.pow(3,n);}

Możesz to zrobić:

function f(n)return Math.pow(3,n);

Łatwe dwa bajty zapisane na wielu funkcjach.

Nawet jeśli funkcja musi zawierać wiele instrukcji, często można zapisać bajt, przesuwając return poza blok:

function f(a){var b=a*a;return a<0?-b:b;}
function f(a)return{var b=a*a;a<0?-b:b;}

Działa to, ponieważ blok ocenia do ostatniego wyrażenia w bloku.

ETHprodukcje
źródło
Edycja: jeśli potrzebujesz kostki liczby, lepiej jest użyć jej n*n*nlub jej odpowiednika n*n*n*ndla tesseract liczby, itp. Jednak Math.powsłuży tutaj jako dobry przykład.
Yytsi
@TuukkaX Heh, dzięki. Użyję Math.pow(3,n)zamiast ;-)
ETHproductions