Suggerimenti per giocare a golf a Haxe


12

Quali consigli generali hai per giocare a golf a Haxe ? Sto cercando idee che possano essere applicate a problemi di code-golf e che siano anche in qualche modo specifiche per Haxe (ad esempio "rimuovere i commenti" non è una risposta).

Si prega di inviare un suggerimento per risposta.

Haxe può essere eseguito online qui !


Ho usato un po 'Haxe in passato, ma da quando ho iniziato a giocare a golf non l'ho usato molto. Dovrò provare ad usarlo per giocare a golf ...
ETHproductions,

@ETHproductions Come qui. Oggi ho giocato a golf due volte, ed è stato divertente. Ha alcune buone capacità di golf con (per esempio) la sua lista di comprensione e iteratori, quindi ho deciso di aprire la domanda per vedere se qualcuno ha suggerimenti da condividere.
Yytsi,

Risposte:


8

Interpolazione di stringhe

Haxe supporta l'interpolazione di stringhe su stringhe a virgoletta singola. Come le stringhe di modello in JavaScript ES6, puoi includere un'espressione in una stringa con ${...}:

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

A differenza di ES6, tuttavia, è possibile omettere le parentesi graffe quando l'espressione è una singola variabile:

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

Entrambi questi esempi vengono stampati 2 + 2 = 4.


7

Comprensioni dell'array

Haxe supporta la comprensione di array:

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

A differenza di molte altre lingue, è anche possibile utilizzare whilein termini di comprensione:

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

Questo può essere molto utile quando non sai per quanto tempo hai bisogno di un array.

È anche possibile a catena for, whilee ifle dichiarazioni:

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

Wow. Eliminerò la mia risposta. Ho letteralmente costruito la stessa risposta, con un minuto di ritardo. Inoltre, potresti notare che in realtà stampa parentesi quadre intorno agli elenchi, quindi i lettori non saranno confusi, poiché alcune sfide richiedono formati di output rigorosi.
Yytsi,

@TuukkaX Haha, a volte succede :) Includerò uno dei tuoi esempi qui, se non ti dispiace. Inoltre, try.haxe.org non sembra stampare parentesi quadre ...
ETHproductions

Quello che calcola il prodotto cartesiano è pulito. Penso che sarebbe una buona aggiunta al tuo post :)
Yytsi,

6

Operatore di gamma

Haxe ha un operatore di intervallo ...che può essere utilizzato per creare intervalli di numeri interi. Ad esempio, invece di questo:

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

Puoi farlo:

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

Specifiche per x...y:

  • xe ydevono essere entrambi Ints.
  • xnon può essere più grande di y.
  • Ciò restituisce un oggetto IntIterator , che può essere utilizzato negli stessi punti di qualsiasi Iterable.

1

Esecuzione di un'istruzione in modo condizionale

Ovviamente puoi eseguire qualsiasi cosa in modo condizionale con if:

if(n>5)doSomething(n);

Se, tuttavia, hai una sola istruzione come sopra, puoi usare l'operatore condizionale ternario per salvare un byte:

n>5?doSomething(n):0;

A volte puoi salvare un altro byte usando &&, anche se questo è molto raro perché &&funziona solo se entrambe le espressioni restituiscono valori booleani:

n>5&&doSomething(n);

Una delle principali eccezioni è rappresentata dalle parole chiave : se Haxe si imbatte in una return, breako continue dovunque , la eseguirà immediatamente e abbandonerà qualsiasi espressione su cui stesse lavorando. Ciò significa che invece di questo:

if(n>5)return n;

Puoi farlo per salvare 2 byte:

n>5&&return n;

1

Usa parole chiave nelle espressioni

Un'altra caratteristica insolita di Haxe è che tutto è un'espressione . Ad esempio, questo codice è perfettamente valido:

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

Ok, questo è un esempio abbastanza inutile, ma spero che tu ottenga il mio punto. Funziona con la maggior parte delle parole chiave:

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

Questo ti permette di usare if/ in elselinea, come p=if(n>1)7else 4;, anche se ovviamente p=n>1?7:4;è più breve.

Parole chiave che non puoi usare in linea

  • var - Il compilatore si lamenterà del tentativo di utilizzare Void come valore.
  • for/ while- Come sopra, sebbene sia possibile usarli per comprendere l'array .

1

Ometti parentesi di funzione

A differenza della maggior parte delle lingue, tutto in Haxe è un'espressione , incluso {blocks}. Pertanto, le parentesi graffe in qualsiasi punto di un programma Haxe (ad eccezione delle switchespressioni) possono essere lasciate fuori se contengono solo una singola istruzione. Quindi invece di questo:

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

Puoi farlo:

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

Due byte facili salvati su molte funzioni.

Anche se una funzione deve contenere più istruzioni, è spesso possibile salvare un byte spostando l' return esterno del blocco:

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

Questo funziona perché un blocco restituisce l'ultima espressione all'interno del blocco.


Modifica: se hai bisogno del cubo di un numero, è meglio usarlo n*n*n, o equivalentemente n*n*n*nper il tesseract di un numero, ecc ... Tuttavia, qui Math.powserve come un buon esempio.
Yytsi,

@TuukkaX Heh, grazie. Userò Math.pow(3,n)invece ;-)
ETHproductions
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.