Anti-golfscript anti-golf: crea un'attività in cui GolfScript o J sono superati dal tuo lang (convenzionale) [chiuso]


29

Devi fare tre cose:

  1. Dichiarazione di un compito, T .
  2. Soluzione del compito in lingua non in genere utilizzato per giocare a golf, A .
  3. Soluzione del compito in un linguaggio tipicamente usato per giocare a golf, B . Non cercare di gonfiare B per aumentare il punteggio, invece pensa come se B fosse stato scritto dal tuo concorrente.

Usa il buon senso nella definizione typically used for golfing, cerca di massimizzare il divertimento per gli altri utenti.

Altri utenti possono proporre Bs migliori (magari anche in altre lingue "da golf").

Il punteggio è (length_in_bytes(B)+5)/(length_in_bytes(A)+5), di più è meglio. (Forse la formula del punteggio dovrebbe essere cambiata? ..)

L'idea principale è quella di inventare un'attività in cui le lingue che in genere funzionano bene in Codegolf incontrano un problema. Può essere la forza improvvisa di una lingua normale nel compito dato o la debolezza improvvisa di qualche golflang.

Evita compiti che menzionano specifici linguaggi di programmazione, come Input a string and execute it as a Scheme code.


1
Suppongo che tu faccia di questo un concorso di popolarità anziché un codice-golf. Altrimenti la gente si lamenterà che non si tratta di "vittorie con codice più corto".
Victor Stafusa,

OK, passando al concorso di popolarità. Puoi anche suggerire un titolo migliore o un punteggio migliore.
Vi.

Presumo che la mia domanda precedente si qualifichi? codegolf.stackexchange.com/questions/18633/… La soluzione perl è di 48 caratteri mentre la soluzione J è di 54 caratteri
user12205

1
Possiamo specificare la lingua B (purché sia ​​brava a giocare a golf)? O qualcuno può dire "ecco un programma in lingua <inserire il nome della lingua> e ha una soluzione molto breve di lunghezza <n>:"?
Justin,

1
A proposito alcune lingue come il Perl possono essere sia sul lato A che sul lato B, a seconda del contesto.
Vi.

Risposte:


14

La mia domanda precedente, Stampa un'onda sinusoidale (in verticale), si qualifica in questo momento. Lo sto pubblicando qui come soluzione, anche sperando che voi ragazzi possiate trovare alcune soluzioni più brevi alla mia domanda originale.

Come richiesto da Vi, posterò un riassunto della domanda.

Stampa un'onda sinusoidale continua che scorre verticalmente su un terminale. Il programma non dovrebbe terminare e dovrebbe scorrere continuamente verso il basso (tranne fino a SIGINT). È possibile supporre che l'overflow non sia un problema (ovvero è possibile utilizzare loop infiniti con contatori incrementali o ricorsione infinita).

L'onda dovrebbe soddisfare le seguenti proprietà:

  • Ampiezza = 20 caratteri (ampiezza di picco)
  • Periodo = da 60 a 65 righe (incluso)
  • L'output dovrebbe consistere solo di spazi, newline e |
  • Dopo ogni riga di output, mettere in pausa per 50ms

C'è un output di esempio sulla mia domanda originale, ma non lo sto pubblicando qui, perché questo renderà la mia risposta ridicolmente lunga. La mia domanda originale può essere vista qui: Stampa un'onda sinusoidale (in verticale)

AAttualmente la più corta : una soluzione Perl con 48 caratteri: https://codegolf.stackexchange.com/a/18655/12205

print$"x(25+20*sin).'|
';$_+=.1;`sleep .05`;do$0

La più corta Battualmente: una soluzione J con 54 caratteri: https://codegolf.stackexchange.com/a/18649/12205

($:+&0.1[6!:3@]&0.05[2:1!:2~' |'#~1,~[:<.20*1+1&o.)0  




Attualmente, il punteggio di questa risposta è 1.113 (un punteggio terribilmente basso)


Il punteggio attuale secondo la formula attuale è di circa 1.113
Vi.

@Vi. dovrei cancellare questa risposta o dovrei aspettare un po 'di tempo e vedere cosa succede? Se quest'ultimo, per quanto tempo dovrei aspettare?
user12205,

L'istruzione indica byte, non caratteri. Convertita in UTL-8, la soluzione APL ha creato 61 byte (70 per UTF-16).
Vi.

2
Stai sostenendo che il Perl non è una lingua tipicamente utilizzata per il golf, ma è la lingua che è stata inizialmente associata alla parola golf ! Ruby, a 56 anni, sembra la vera lingua A nelle risposte attuali alle tue domande.
Peter Taylor,

8

Aggiungi due numeri

Ottieni due numeri da STDIN e aggiungili insieme. Devi supportare numeri in virgola mobile, quindi 0,5 + 1,5 deve essere uguale a 2.

Perl 5 (con -E)

say<>+<>

GolfScript

n%'+'*'"#{
}"'n/\*~

Punteggio calcolato come (24+5)/(8+2+5) = 1.9(3). -Eanche contati come byte di programma.
Vi.

Lo stesso commento che ho fatto all'asso: stai affermando che Perl non è una lingua tipicamente usata per giocare a golf, ma è la lingua che è stata inizialmente associata alla parola golf !
Peter Taylor,

E il tuo programma GolfScript non funziona. Un programma di lavoro sarebbe n%'+'*'"#{ }"'n/\*~dove il personaggio in mezzo {}è una nuova riga letterale (non supportato nei commenti).
Peter Taylor,

@PeterTaylor, Rispetto a GolfScript, Perl è un linguaggio "normale"; rispetto a Java, è un linguaggio "golf".
Vi.

1
Il J per questo non è troppo male, in realtà: +/".1!:1,~1. L'APL sarebbe probabilmente ancora più piccolo.
algoritmo


7

Punteggio 48/37 o 1. (297)

T: scrivi uno snippet di codice che termina il programma dopo esattamente un'ora (il più vicino possibile, come entro un secondo) di esecuzione. Non preoccuparti delle eccezioni, possono essere non gestite.

A: Java (32)

Thread.sleep(3600000);int a=1/0;

B: è per Befunge 98, richiede l' impronta digitale TIME (43)

"EMIT"4(HMS00p01p02p#;gS-!01gM-!H-!++3-!j;@

Questo richiede l'ora, i minuti e i secondi al momento della corsa e inserisce le celle 02, 01 e 00. Quindi, passa ;alla seconda parte. La seconda parte funziona come segue:

g          get the value at 00
"EMIT"4(S) get the current time in seconds
-!         subtracts the values and changes a 0 to 1, anything else to 0

allo stesso modo per il minuto e l'ora.

++  sums up the values
3-! i the sum is 3, we get a 1, otherwise, we get a 0.
j   jump over the next that many cells
;   skip code execution until the next ;
@   end program

Si noti che Befunge tornerà automaticamente all'inizio della riga quando viene raggiunta la fine di una riga.


Come possiamo vedere, Befunge non è buono quando si tratta di aspettare tempi specifici. Tuttavia, Java non è male.


9
APL:⎕DL 3600
marinus

14
Java di solito legge come class Main{public static void main...
Vi.

3
@Vi. vedi "snippet di codice". Fondamentalmente, richiede il codice che fa effettivamente il lavoro, non di più.
Justin,

2
Non conosco Befunge, ma lo snippet Java non "termina il programma" come richiesto dalle specifiche. Ciò richiederebbe System.exit(0);o avvolgendo il sonno in un mainmetodo.
Peter Taylor,

3
@DoorknobofSnow non riesce a compilare:error: not a statement
Bob

5

Emette un determinato file di testo (498.388888 punti)

L'output dell'obiettivo è qui .

Lo script Python 3.4.3 per stamparlo è di 49 byte:

for b in dir(__builtins__):print(eval(b).__doc__)

Il programma ingenuo CJam uguale all'output dell'obiettivo, avvolgendo la stringa di output "..."e sfuggendo a ciascuna "di esse presente, sarebbe 26908 byte.


Molto intelligente, sebbene possa ostacolare la restrizione delle "lingue specifiche" (che è vaga, è vero).
BMac,

La regola più vicina è "evitare di menzionare un linguaggio specifico". Python non è menzionato, ma è chiaramente inteso.
Vi.

Sì, questa risposta è un po 'ironica, volevo solo sottolineare che la regola è una specie di pendenza scivolosa. Immagina se avessi "alterato" di più l'output - diciamo, prendendo il checksum SHA1 di ogni dotstring - sarebbe molto strano affermare che "questo gruppo confuso di cifre esadecimali è troppo specifico per la lingua" :)
Lynn

Se volessi fare una risposta più "equa", probabilmente userei Mathematica. Puoi fare molte cose estremamente specifiche del dominio che richiederebbero migliaia di byte di CJam / Pyth / qualsiasi altra cosa. Ma purtroppo non conosco la lingua.
Lynn,

Il collegamento all'output è morto.
pepery

4

Dì "Ciao mondo!" (50/26 ≈ 1,92)

Mostra una finestra di messaggio per dire "Ciao mondo!"

JavaScript

alert('Hello world!')

In un browser con supporto per DOM Level 0+.

Perl

use Win32;Win32::MsgBox('Hello world!','',48)

In esecuzione su ActivePerl con Win32 :: GUI.


alertnon è intrinsecamente parte di JS e il programma GolfScript è solo un commento.
Peter Taylor,

Ho cambiato la risposta per usare il semplice Perl.
Spazzolino da denti

3

Uscita "Ciao mondo!" fino a quando l'utente preme "q", 1.842 105/44 = 2.386

  1. Stampa "Ciao mondo!" (incluso newline).
  2. L'utente preme un tasto, che non viene ripetuto sullo schermo.
  3. Ripetere fino a quando il tasto premuto era "q".

QBasic ( 52 39 caratteri)

1?"Hello world!":IF"q"<>INPUT$(1)THEN 1

Da quando ho pubblicato la mia risposta originale, ho scoperto che avrei potuto disattivare la formattazione automatica in QB64. : ^ D Con il numero di riga e il ?collegamento perPRINT , sembra piuttosto un'espressione ternaria in linguaggi simili a C.

Prima versione:

PRINT "Hello world!"
IF INPUT$(1) <> "q" THEN RUN

Perl 5 (100 caratteri)

while("q"ne$e){print"Hello world!\n";system"stty cbreak -echo";$e=getc;system"stty -cbreak echo";}

Quanto sopra funzionerà solo su (certi?) Sistemi UNIX (testato su Ubuntu 12.04). È possibile che si possa passare su più piattaforme e portarlo a 91 caratteri usando il modulo Term :: ReadKey , ma non l'ho provato:

use Term::ReadKey;while("q"ne$e){print"Hello world!\n";ReadMode 3;$e=ReadKey 0;ReadMode 0;}

1

Ciao, mondo (3 1/3 punti)

Scrivi il programma che emette Hello World..

HQ9 + (1 carattere)

Questo non è un linguaggio "tipicamente usato per il golf", quindi credo che si adatti qui. Funziona in questo interprete, a proposito .

H

GolfScript (15 caratteri)

Dubito che possa essere più breve, anche se si tratta di GolfScript.

"Hello World."

8
Non penso che i HQ9+semi siano una lingua. È progettato per trucchi / indovinelli / divertimento. Brainfuck / unlambda / altre lingue esoteriche, inoltre, non sembra vestito come A .
Vi.

@Vi .: Ma in genere non è usato per giocare a golf.
Konrad Borowski il

4
Puoi cercare di usare HQ9+come linguaggio B e batterlo con Java o simili ...
Vi.

7
Sembra che ci sia una gerarchia: rispetto a Java, Perl è un golflang. Rispetto al Perl, GolfScript è un golflang. Rispetto a GolfScript, HQ9 + è un golflang ...
Vi.

@Vi .: Ho controllato attentamente la descrizione della tua attività. HQ9 + non viene mai utilizzato per il golf, ad eccezione di due compiti particolari: "99 bottiglie" e "Ciao, mondo". A meno che tu non possa mostrare qualche altra attività in cui HQ9 + vince con qualsiasi altro linguaggio di programmazione, penso ancora che si adatti alla definizione, anche se la abusa (ehi, è contest di popolarità ). HQ9 + non viene semplicemente utilizzato per le cose da golf non correlate a questi due compiti. Quindi, non è in genere utilizzato per il golf. Il secondo è ovviamente progettato per CodeGolf: è GolfScript.
Konrad Borowski il

0

Uscita "Hello world!", 33/97 = 2.94

Scrivi un programma che emette Hello world!

Arduino o GML

Serial.print("Hello world!")

o

show_message("Hello world!")

Entrambi sono 28 caratteri.

GTB

Uso GTB molto per giocare a golf (specialmente da quando l'ho creato da solo, ed è Turing completo). Sfortunatamente, c'è solo un supporto limitato per i caratteri minuscoli (perché la calcolatrice TI-84 non può gestirlo). Questo è probabilmente il programma GTB più breve in grado di produrre Hello world!

S;"lower",1,1)→_~"H"+S;"expr(",1,1)+_+_+S;"cos(",2,1)+" W"+S;" or ",2,2)+_+S;" and ",4,1)+"!

92 caratteri.


La versione GTB lo emette anche sulla porta seriale?
Vi.

È la versione GTB intenzionalmente gonfio con varie coss e exprso può genuintely non solo qualcosa di uscita in modo regolare? O il "personaggio non è in realtà una stringa letterale e mi confonde ...
Vi.

@Vi. Non è affatto gonfio ... deve rimuovere e da expr, due l da inferiore, o da cos, o da o, l da inferiore e d da e.
Timtech,

'Altri utenti possono proporre B&B migliori (magari anche in altre lingue "da golf"). '--- fammi provare golfscript:"Hello world!"
John Dvorak,

@JanDvorak Probabilmente hai ragione.
Timtech,
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.