Quali tecniche vengono utilizzate per risolvere i problemi del codice golf?

4

Golf "normale" vs golf codice:

Entrambe sono gare. Entrambi hanno un insieme ben definito di regole, che tralascerò per semplicità. Entrambi hanno obiettivi ben definiti; in breve, "usa meno hit / personaggi rispetto ai tuoi concorrenti".

Per vincere le partite, i golfisti atletici si affidano a

  • attrezzature
    • Alcune situazioni richiedono un sand wedge; altri, un ferro 9.
  • tecniche
    • L'unità funziona meglio quando i tuoi piedi hanno la larghezza delle spalle divaricata e le braccia sono rilassate.
  • e strategie
    • Certo, potresti prendere quella scorciatoia diretta verso il buco ... ma vuoi veramente rischiare il pericolo d'acqua o il bunker di sabbia quando quegli alberi sono di ostacolo e il vento è così strong? Potrebbe essere meglio andare in giro.

Che codice hanno i giocatori di golf che sono analoghi alle attrezzature, alle tecniche e alle strategie dei giocatori di golf degli atleti?

Esempio di risposta per iniziare: usa il club giusto! Scegli GolfScript invece di C #.

    
posta Pops 02.09.2010 - 07:57
fonte

4 risposte

3

Direi che una conoscenza approfondita delle stranezze sintattiche del tuo linguaggio aiuta. Ecco uno che ho trovato in Ruby quando si fa un po 'di golf del codice:

Invece di

require "sequel"
require "nokogiri"
require "chronic"

Puoi fare qualcosa di simile:

 body_of_your_program if %w{sequel nokogiri chronic}.each{|i| require i}

Con questo genere di cose, anche tu puoi scrivere incredibilmente elaborate one-liner Ruby!

In Ruby e Perl, ottieni anche le variabili magiche come "$ _" che possono essere usate per fare ogni sorta di magia con stringhe ed espressioni regolari. I tuoi dati non sono stringhe? Beh, potresti volerlo trasformare in stringhe.

Ovviamente, in C, il preprocessore è tuo amico.

    
risposta data 09.09.2010 - 03:35
fonte
2

Quando faccio una sfida di Code Golf, inevitabilmente raggiungo una serie comune di schemi di progettazione che portano inevitabilmente a un codice più breve: questo set aumenta col passare del tempo con l'aumentare delle sfide del golf in codice o semplicemente nel corso del normale uso di un lingua.

Ad esempio, se ho bisogno di avere un ciclo incrementale, una cosa che potrei fare normalmente è:

for ($i = 1; $i <= 10; $i++) {
  // code
}

o

$i = 1;

while ($i < 10) {
  // code

  $i++;
}

Ma funziona sempre anche così:

while ($i++<10) {
  // code
}

Altre cose includono:

  • Uso di versioni più brevi delle funzioni di libreria standard ( fwrite() anziché file_put_contents() )
  • Uso delle variabili per ripetere le espressioni
  • sfruttando il modo in cui una lingua gestisce parentesi e interruzioni di riga; nella maggior parte dei campi da golf, l'output richiede raramente un blocco di codice complesso che copre più di una riga (a meno che non si stia utilizzando una lingua in cui lo spazio è sostanziale)
  • sfruttando il modo in cui un linguaggio gestisce l'output ( <?= più breve di print o echo )
risposta data 09.09.2010 - 06:56
fonte
2

E come sempre: conosci la tua libreria!

Per la maggior parte dei problemi, esistono già funzioni essenziali nelle librerie spedite. Ovviamente devi scegliere un linguaggio non verboso per questo o le importazioni delle funzioni necessarie saranno più lunghe di una breve definizione in linea.

    
risposta data 27.12.2010 - 12:58
fonte
1

A seconda della sfida Golf Code, inizia semplicemente codificandolo. No mather la quantità di carattere iniziale, è il primo passo. Provare a codificare da zero con il minimo carattere può solo renderlo più difficile. Dopo questo cerca dove puoi ottimizzare il tuo codice (usa 1 variabile di caratteri, esegui operazioni di chainning, ecc.). Questa parte comporta il controllo della lingua in cui stai facendo il codice del golf, meglio lo sai, più saprai modificare che ti salverà i personaggi.

Esempio di questa strategia / tecnica:
link

Per quanto riguarda l'equipaggiamento, per la maggior parte delle sfide Golf Code, l'attrezzatura ideale è usare un linguaggio personalizzato creato appositamente per la sfida. A volte quel linguaggio esiste già, a volte puoi solo inventarlo e codificarne un interprete.

    
risposta data 02.09.2010 - 15:27
fonte

Leggi altre domande sui tag