Costruisci un linguaggio da golf con me


30

Molti utenti di PPCG hanno contribuito alla creazione di questa sfida, sia nella chat che nel Sandbox, in particolare Martin Ender , AdmBorkBork , Emigna e user202729

La nostra comunità ha ritenuto necessario creare un insieme di lingue progettate appositamente per il golf, le "lingue del golf" come le chiamiamo noi. Tali linguaggi si sono evoluti dal GolfScript un tempo brillante, ora goffo, a linguaggi concisi ed eleganti come Jelly e Husk . Come possiamo vedere, queste lingue diventano continuamente sempre più brevi per una serie di attività. Quindi, come ovvi esperti qui intorno riguardo alle lingue del golf, dovremmo progettare una lingua insieme per battere ogni altra lingua che osa competere. Presentazione di Bugle!

Bugle: Da l'acronimo BuGoL: Bu ILT Vai lfing L anguage.

Come funzionerà questa sfida

Nel caso in cui tu non abbia ottenuto ciò a cui alludo nell'introduzione, questa sfida è una sfida cui ognuno di noi contribuisce con qualcosa all'interprete di un nuovo linguaggio del golf, migliorando la sua capacità di competere su PPCG con ogni risposta.

Pubblicherò la prima risposta consistente sulla base della specifica / interprete della lingua, e tutte le altre risposte continueranno da quella. I nuovi invii forniranno le seguenti cose:

  • Una modifica alle specifiche della lingua
  • Un interprete aggiornato, che incontra esattamente ciò che è disposto nelle modifiche
  • Il punteggio aggiornato della lingua (maggiori dettagli tra poco)

Puoi modificare le specifiche in tre modi:

  • È possibile aggiungere un singolo comando
  • È possibile aggiungere due nuovi comandi
  • È possibile modificare il comportamento di un comando esistente

Per quanto riguarda il nuovo interprete, è necessario utilizzare l'ultima versione, scritta in Python. Non deve essere giocato a golf. Ogni comando precedentemente aggiunto deve essere testabile con l'ultimo interprete, nonché i comandi più recenti (quello che aggiungi). Inoltre, non è necessario utilizzare un linguaggio offensivo in nessun momento durante l'aggiornamento dell'interprete, ad esempio nei commenti, nei letterali di stringa ecc.

I comandi aggiunti possono fare tutto ciò che desideri . Gli unici requisiti sono:

  • Non produce un output offensivo
  • Non è lo stesso di un altro comando
  • Non impedisce il completamento di una delle sfide del campione

A parte questi, può essere specifico o generale come desideri. Può anche essere qualsiasi personaggio tu voglia. Se non sei sicuro che la tua aggiunta costituisca un "nuovo comando", sentiti libero di chiedere nei commenti.

Il punteggio della lingua

Potresti aver notato che devi includere il punteggio della lingua in tutti i nuovi invii. Il suo punteggio è ciò che impedisce che questa sfida vada per sempre, ed è definito come segue:

Il punteggio corrente è la somma dei conteggi dei byte necessari affinché la lingua completi i 20 compiti seguenti

Per ciascuna attività, si applicano le regole I / O standard , così come le scappatoie standard .

I 20 compiti:

  1. "Ciao mondo!" - Emette la stringaHello, World!
  2. 1, 2, Fizz, 4, Buzz : emette un numero intero compreso tra 1 e 100 (incluso) su una riga separata, con multipli di 3 sostituiti da Fizz, multipli di 5 sostituiti da Buzze multipli di entrambi conFizzBuzz
  3. Produci il numero 2014 senza numeri nel codice sorgente - Emetti il ​​numero 2014 senza utilizzare nessuno dei caratteri 0123456789nel codice sorgente, senza accedere a variabili esterne o seed casuali
  4. Obfuscated Ciao Mondo - Uscita la stringa Hello, World!, senza l'utilizzo di uno qualsiasi dei caratteri in almeno due dei seguenti gruppi: hlwd, eor01e 27(case-insensitive)
  5. Canta Happy Birthday al tuo linguaggio di programmazione preferito - In una lingua a tua scelta, dai il seguente risultato:

    Happy Birthday to You
    Happy Birthday to You
    Happy Birthday Dear [the name of your favourite programming language]
    Happy Birthday to You
    
  6. Non siamo estranei al codice del golf, conosci le regole, e anche io - Emetto il testo completo di "Never Gonna Give You Up"

  7. Emette il segno - Dato un numero, stampa -1 se è negativo, 0 se è 0 o 1 se è positivo
  8. Congettura di Collatz (OEIS A006577) - Partendo da un numero intero, dividerlo per 2 se è pari, o moltiplicarlo per 3 e aggiungere 1 se è dispari, e ripetere il processo fino a raggiungere 1. L'output dovrebbe essere il numero di iterazioni ti porta a raggiungere 1.
  9. An Array of Challenges # 1: Array alternati - Dato un array di numeri interi, controlla se tutti gli oggetti con indicizzazione pari sono uguali e tutti gli oggetti con indicizzazione dispari sono uguali e genera un valore di verità o falsa di conseguenza
  10. Sono un array insignificante? - Dato un array di numeri interi, controlla se le differenze assolute tra elementi consecutivi sono tutte minori o uguali a 1 e genera un valore di verità o falsa di conseguenza
  11. Questo numero è un numero primo? - Dato un numero intero positivo, scrivi un programma completo per verificare se è primo e genera un valore di verità o falsa di conseguenza
  12. Sono un palindromo. Tu sei? - Dato una stringa, controlla se è palindromo, mentre anche il tuo programma / funzione è palindromo e genera di conseguenza due valori distinti e coerenti
  13. Somma i numeri sullo standard in - Prendi una serie di numeri da STDIN e genera la loro somma.
  14. Trova il fattoriale - Dato un numero intero n, genera il prodotto di tutti i numeri interi compresi 1e ncompresi.
  15. Codice più breve per produrre output infinito - Senza alcun input, produce output infinito, che teoricamente non smetterà mai di emettere.
  16. Prepara una fetta di Pi - Stampa questo testo esatto:
()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|
  1. Trova il numero più piccolo che non divide N - Dato un numero intero positivo N, genera il numero intero più piccolo positivo che non divide N
  2. È pari o dispari? - Dato un numero intero N, genera la sua parità come valori di verità / falsità.
  3. Output con la stessa lunghezza del codice - Scrivi il codice più breve il cui output ha la stessa lunghezza del codice, dove l'output non è uguale al codice.
  4. Golf te a quine per il bene! - Scrivi il quine più corto nella tua lingua.

Per essere valido, un nuovo invio deve disporre di invii golfizzati per almeno 2 dei problemi, di almeno 1 byte per ciascuno. Puoi aumentare la durata di altri invii, ma il punteggio totale deve diminuire di almeno 2 per risposta. Inoltre, considera di includere un link ai programmi aggiornati. Le soluzioni aggiornate non devono funzionare se eseguite con una versione precedente dell'interprete.

Come ottenere i cookie

Ho un elenco di 5 sfide, che non sono obbligatorie da tentare e non influiscono sul tuo punteggio, ma sono semplicemente sfide aggiuntive da testare se Bugle è abbastanza capace. Sentiti libero di includere una soluzione a qualsiasi numero di questi nella tua risposta:

  1. Crea un interprete personale
  2. Crea un quine capace di payload
  3. Covfefify una stringa
  4. Iperprogrammazione: N + N, N × N, N ^ N tutto in uno
  5. "Nodo" o "NON"?

Descrizioni non incluse in quanto non sono necessarie per consentire a tutti di competere nella sfida.

Come vincere

Una volta raggiunto il punteggio minimo ( riteniamo essere 16, anche se ogni tentativo di giocare a golf che è molto apprezzato) è stato raggiunto, ovviamente la catena è terminata poiché le soluzioni non possono ottenere un punteggio migliore. Una volta raggiunti i 16 anni, la sfida rimane viva per 1 mese dopo, per dare a chiunque la possibilità di giocare a golf con le soluzioni. Trascorso questo mese, la sfida è finita.

Una volta terminata la sfida, eseguirò la migrazione dell'interprete in un repository GitHub e passerò attraverso le solite macchinazioni di rilascio di un linguaggio stabile. Puoi anche iniziare a pubblicare soluzioni alle sfide su PPCG in questo momento, usando il linguaggio detto, ma per favore cerca di non inondare la prima pagina di risposte. Invece, distribuiscili su un periodo di tempo.

Formattazione

Per facilitare la ricerca delle informazioni nella risposta, si prega di formattare come segue:

# [N]. [Score]

[New command + description]

[Interpreter/link to interpreter]

[Link to programs]

Dov'è il [N]tuo numero di risposta (1 per il primo, 2 per il secondo ecc.)

Regole

  • Devi aspettare 3 ore tra la pubblicazione delle risposte
  • Non puoi pubblicare due volte di seguito, a meno che non sia stata inviata una risposta per 10 giorni (esattamente 240 ore)
  • Non è possibile rimuovere i comandi precedenti.
  • Il tuo interprete non deve essere giocato a golf, e il suo conteggio dei byte è completamente irrilevante qui.
  • Se qualcuno suggerisce un golf ai programmi mentre la tua risposta è l'ultima, devi modificarlo nei golf e aggiornare il tuo punteggio.
    • Puoi anche farlo quando la tua risposta è al centro della catena, purché il tuo punteggio non diventi più basso di qualsiasi risposta successiva.
  • Si prega di astenersi dal rispondere a qualsiasi sfida PPCG esistente utilizzando questo linguaggio, almeno fino a quando la sfida non sarà terminata
  • L'interprete è scritto in Python 3 e dovrebbe continuare così in tutta la catena. È vietato cambiare la lingua.
  • Anche in questo caso, per essere valido, un nuovo invio deve avere invii golfati per almeno 2 dei problemi, di almeno 1 byte per ciascuno.

Iniziamo!



1
Potrebbe anche chiedere: a qualcuno piace spiegare il downvote? Gradirei qualsiasi feedback che vorresti dare.
caird coinheringaahing

2
@Kaldo Non ne siamo abbastanza sicuri. Il quine deve essere di almeno due byte, ma se il programma vuoto viene emesso Hello, World!, allora è di 19 byte. Ma se cambia il comportamento del programma vuoto, a seconda dell'input, potrebbe essere possibile ridurlo
caird coinheringaahing

1
@WeijunZhou "Per favore, astieniti dal rispondere a qualsiasi sfida PPCG esistente usando questo linguaggio, almeno fino a quando la sfida non sarà finita"
caird coinheringaahing,

1
I costrutti @LyricLy Syntax (come i forloop) sono consentiti e incoraggiati ad essere aggiunti
caird coinheringaahing

Risposte:


3

3. Punteggio: 2938 2583 2532 (-51)

Il nuovo interprete è qui .

Principalmente allo scopo di giocare a golf con le quine e rendere più semplice l'output, ho aggiunto la possibilità di duplicare lo stack / deque e anche di produrre l'intero modello in forma di testo renderizzato anziché come numeri interi.

soluzioni

1. "Ciao, mondo!" - 17 byte (-3)

#"Hello, World!"a

5. Canta Happy Birthday al tuo linguaggio di programmazione preferito - 95 byte (-3)

#"Happy Birthday to You
Happy Birthday to You
Happy Birthday Dear Bugle
Happy Birthday to You"a

6. Non siamo estranei al codice golf, conosci le regole, e anche io - 1884 byte (-3)

#"We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

We've known each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it
And if you ask me how I'm feeling
Don't tell me you're too blind to see

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

(Ooh, give you up)
(Ooh, give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)

We've know each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it

I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you"a

16. Cuocere una fetta di Pi - 149 byte (-3)

#"()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|"a

20. Golf te a quine per il bene! - 23 byte (-39)

$"R34RdR36Ra"R34RdR36Ra

Aggiunte funzionalità linguistiche

  • a

    • Tutto: stampa l'intero modello come testo, ad es. #"Hello, World!"aStampeHello, World!
  • d

    • Stack / Deque: spingi la pila sopra se stessa.

8

2. Punteggio: 2938 2583

L'interprete modificato è qui su TIO .

La stringa letterale è l'aggiunta più ovvia al linguaggio, principalmente per combattere le sfide della .

soluzioni

1. "Ciao, mondo!" - 20 byte (-28)

#"Hello, World!"[o>]

Qualsiasi può essere completata utilizzando la struttura #"<string>"[o>]che genera la stringa data fino allo 0 dopo il raggiungimento della stringa.

2. 1, 2, Fizz, 4, Buzz - 419 64 byte (-1332)

$1[1+1s:3s%{}"zziF"oooos;0s]:5s%{}"zzuB"oooos;0s]s{:O}]10o:100-]

Grazie a @ user202729 per il golf fantastico su questo.

3. Produrre il numero 2014 senza numeri nel codice sorgente - 9 byte (-4)

#"ĒĎ"[O>]

Utilizza i due caratteri 20 e 14 nei punti di codice Bugle.

4. Obfuscated Hello World - 19 byte (-153)

#"Ifmmp!Xpsme"[-o>]

Soddisfa le regole # 1 (no HLWDhlwd) e # 3 (no 27).

5. Canta Happy Birthday al tuo linguaggio di programmazione preferito - 98 byte (-230)

#"Happy Birthday to You
Happy Birthday to You
Happy Birthday Dear Bugle
Happy Birthday to You"[o>]

6. Non siamo estranei al codice golf, conosci le regole, e anche io - 1887 byte (-5006)

#"We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

We've known each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it
And if you ask me how I'm feeling
Don't tell me you're too blind to see

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

(Ooh, give you up)
(Ooh, give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)
(Ooh)
Never gonna give, never gonna give
(Give you up)

We've know each other for so long
Your heart's been aching but
You're too shy to say it
Inside we both know what's been going on
We know the game and we're gonna play it

I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you"[o>]

16. Cuocere una fetta di Pi - 149 byte (-290)

#"()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|"[o>]

20. Golf te a quine per il bene! - 62 byte (-12)

#"[>]<o-o+[<]>[o>]<-o;<[<]>[o>]#"[>]<o-o+[<]>[o>]<-o;<[<]>[o>]

Funzionalità lingua aggiunta

  • "...": Stringa letterale.
    • Stack / Deque: spingi i punti di codice Bugle di ciascun carattere nella parte superiore / anteriore dello stack / deque.
    • Tape / Grid: Scrivi i punti di codice Bugle di ogni carattere sul nastro / griglia a destra, a partire dalla cella corrente. Non sposta il cursore.
    • \n è gestito proprio come gli altri caratteri.
    • Non ci sono caratteri di escape per ora, quindi non puoi scrivere "(34) in memoria usando questo comando. Non è un grosso problema, almeno per ora, dal momento che tutte le elencate qui non hanno "nell'output.

Ogni ulteriore golf è sempre il benvenuto, soprattutto per "Non ti arrenderò mai" e il quine. In particolare, il quine sopra è il primo quintale non banale che io abbia mai fatto, quindi credo fermamente che qualcuno possa inventarne uno più corto.


Ci sono i tipi di aggiunte che spero facciano tutti gli altri, piuttosto che aggiungere solo builtin per le sfide specifiche. +1
caird coinheringaahing

@ user202729 Probabilmente sono io che ho introdotto il bug; grazie per averlo riparato e la soluzione FizzBuzz.
Gorgogliatore

3

1. Punteggio: 9638

L'interprete di base può essere trovato qui e gli invii qui . È piuttosto lungo, quindi l'ho incluso su GitHub, piuttosto che occupare la maggior parte del post.

soluzioni

Tutte queste soluzioni sono i programmi Unicode, eseguiti con il -uflag della riga di comando, ma i punteggi vengono contati come se fossero codificati con la codepage di Bugle.

1. "Ciao, mondo!" - 48 byte

$72o101o108o108o111o44o32o87o111o114o108o100o33o

Basta spingere e quindi emettere il codice carattere di ciascun carattere nella stringa.

2. 1, 2, Fizz, 4, Buzz - 1396 byte

$49o10o50o10o70o105o122o122o10o52o10o66o117o122o122o10o70o105o122o122o10o55o10o56o10o70o105o122o122o10o66o117o122o122o10o49o49o10o70o105o122o122o10o49o51o10o49o52o10o70o105o122o122o66o117o122o122o10o49o54o10o49o55o10o70o105o122o122o10o49o57o10o66o117o122o122o10o70o105o122o122o10o50o50o10o50o51o10o70o105o122o122o10o66o117o122o122o10o50o54o10o70o105o122o122o10o50o56o10o50o57o10o70o105o122o122o66o117o122o122o10o51o49o10o51o50o10o70o105o122o122o10o51o52o10o66o117o122o122o10o70o105o122o122o10o51o55o10o51o56o10o70o105o122o122o10o66o117o122o122o10o52o49o10o70o105o122o122o10o52o51o10o52o52o10o70o105o122o122o66o117o122o122o10o52o54o10o52o55o10o70o105o122o122o10o52o57o10o66o117o122o122o10o70o105o122o122o10o53o50o10o53o51o10o70o105o122o122o10o66o117o122o122o10o53o54o10o70o105o122o122o10o53o56o10o53o57o10o70o105o122o122o66o117o122o122o10o54o49o10o54o50o10o70o105o122o122o10o54o52o10o66o117o122o122o10o70o105o122o122o10o54o55o10o54o56o10o70o105o122o122o10o66o117o122o122o10o55o49o10o70o105o122o122o10o55o51o10o55o52o10o70o105o122o122o66o117o122o122o10o55o54o10o55o55o10o70o105o122o122o10o55o57o10o66o117o122o122o10o70o105o122o122o10o56o50o10o56o51o10o70o105o122o122o10o66o117o122o122o10o56o54o10o70o105o122o122o10o56o56o10o56o57o10o70o105o122o122o66o117o122o122o10o57o49o10o57o50o10o70o105o122o122o10o57o52o10o66o117o122o122o10o70o105o122o122o10o57o55o10o57o56o10o70o105o122o122o10o66o117o122o122o

Stessa tecnica di Hello, World! esempio

3. Produrre il numero 2014 senza numeri nel codice sorgente - 13 byte

#++O--O+O+++O

#usa il nastro, +incrementa la cella, Oproduce come numero intero e -diminuisce

4. Obfuscated Hello World - 172 byte

#+++++++++[>++++++++<-]>o<++++[>+++++++<-]>+o+++++++oo+++o>++++[>+++++++++++<-]>o------------o[-]++++++++[>+++++++++++<-]>-o<<<o+++o------o--------o[-]+++[>+++++++++++<-]>o

Usa la sua intrinseca somiglianza con Brainfuck. Soddisfa le regole 1 e 3

5. Canta Happy Birthday al tuo linguaggio di programmazione preferito - 328 byte

$72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o68o101o97o114o32o66o117o103o108o101o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o

Tutte le del hanno questo tipo di struttura, al momento.

6. Non siamo estranei al codice del golf, conosci le regole e anche io - 6893 byte

$87o101o39o114o101o32o110o111o32o115o116o114o97o110o103o101o114o115o32o116o111o32o108o111o118o101o10o89o111o117o32o107o110o111o119o32o116o104o101o32o114o117o108o101o115o32o97o110o100o32o115o111o32o100o111o32o73o10o65o32o102o117o108o108o32o99o111o109o109o105o116o109o101o110o116o39o115o32o119o104o97o116o32o73o39o109o32o116o104o105o110o107o105o110o103o32o111o102o10o89o111o117o32o119o111o117o108o100o110o39o116o32o103o101o116o32o116o104o105o115o32o102o114o111o109o32o97o110o121o32o111o116o104o101o114o32o103o117o121o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o87o101o39o118o101o32o107o110o111o119o110o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o65o110o100o32o105o102o32o121o111o117o32o97o115o107o32o109o101o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o68o111o110o39o116o32o116o101o108o108o32o109o101o32o121o111o117o39o114o101o32o116o111o111o32o98o108o105o110o100o32o116o111o32o115o101o101o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o32o10o87o101o39o118o101o32o107o110o111o119o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o32o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o

7. Emettere il segno - 18 byte

$?:Zs0=0s-s:1s-++O

Verifica se l'ingresso è maggiore di zero, minore di zero (modificato in yield -1anziché 1) e uguale a zero, prima di prendere la loro somma.

8. Congettura di Collatz (OEIS A006577) - 36 byte

#$?:1-[:2s%{3×1+}2s÷]:1s-₀+₁]₀O

Ciò esegue il loop sullo stack, ma passa al nastro per aumentare il conteggio di ogni iterazione.

9. Un array di sfide # 1: array alternati - 35 byte

#?>?>+>?[[<+<<->>>-]+<[-<<]>[>]?]<O

Questa è una leggera modifica della risposta di Mitch Schwartz alla sfida esistente, va votata a favore!

10. Sono un array insignificante? - 46 byte

$1 0-?…1[s:sr-:Z1s-2×1+×1s-Z1-L2s-×]1+Z1-O

Tutto il merito va a Emigna per fare questo

11. Questo numero è un numero primo? - 31 byte

$?:1s-:[:1s-:];L1s[×L2s-]:×%O

Usa il teorema di Wilson e calcola (n-1)!² % n

12. Sono un palindromo. Tu sei? - 13 byte

$?:R=:O:=R:?$

La prima metà del programma, fino a O, imposta lo stack su [x, x]dove si xtrova o Trueo False. Oapre il valore più alto e lo emette. Il resto del programma si assicura solo che non vengano prodotti errori. Fortunatamente, quando ?incontra la fine del file, spinge ''(la stringa vuota).

13. Sommare i numeri su standard in - 19 byte

$?:[?:];L0s[+L1s-]O

Questo può essere diviso in due parti: ?:[?:];e L0s[+L1s-]. La prima parte raccoglie tutti gli input nello stack. La seconda parte spinge la somma dei primi due elementi, mentre la lunghezza è maggiore di 1.

14. Trova il fattoriale - 25 byte

$?:[:1s-:];L1s-Z[×L1s-]O

Questo ha una struttura simile al programma di somma, ma invece di spingere piccoli input, [:1s-:];spinge il range dallo 1 .. nstack e [×L1s-]prende il prodotto.

15. Codice più breve per produrre output infinito - 5 byte

#+[O]

Usa un ciclo while, con 1continuamente sotto il puntatore. Produce 1per sempre.

16. Cuocere una fetta di Pi - 439 byte

$40o41o40o41o40o41o40o41o40o41o40o41o10o124o92o51o46o49o52o49o53o57o50o54o124o10o124o58o92o53o51o53o56o57o55o57o51o124o10o92o58o58o92o50o51o56o52o54o50o54o124o10o32o92o58o58o92o52o51o51o56o51o50o124o10o32o32o92o58o58o92o55o57o53o48o50o124o10o32o32o32o92o58o58o92o56o56o52o49o124o10o32o32o32o32o92o58o58o92o57o55o49o124o10o32o32o32o32o32o92o58o58o92o54o57o124o10o32o32o32o32o32o32o92o58o58o92o51o124o10o32o32o32o32o32o32o32o92o95o95o92o124o

17. Trova il numero più piccolo che non divide N

$?:1:[:rs%0=s1+srr:Rs]1s-O

Questo utilizza la divisione di prova, terminando quando il risultato del modulo non è uguale 0.

18. È pari o dispari? - 5 byte

$2?%O

Modulo semplice di 2

19. Uscita con la stessa lunghezza del codice - 16 byte

$16:[32+:o33s-:]

Emette i primi 16 caratteri ASCII stampabili al contrario: 0/.-,+*)('&%$#"!

20. Golf te a quine per il bene!

$1[93, 76, 111, 91, 49, 59, 104, 48, 79, 49, 111, 54, 51, 0]
36o1O0h;1[oL]

Il merito va all'utente202729 per averlo fatto


Specifica del linguaggio

chiamata

bugle.pyattualmente accetta una serie di flag, quindi il nome / codice del file da eseguire. Al momento, ha 4 flag della riga di comando:

  • -f/ --filespecifica che il codice deve essere letto da un file
  • -c/ --cmd/ --cmdlinespecifica che il codice viene fornito tramite la riga di comando.

    -ce -fnon può essere utilizzato nella stessa chiamata

  • -u/ --unicodedice all'interprete di leggere il codice con la codifica Unicode. L'impostazione predefinita è utilizzare la codifica Bugle di seguito

  • -l/ --lengthrestituisce la lunghezza del file, in byte, a STDERR dopo l'esecuzione

La seguente chiamata è stata utilizzata per testare i suddetti invii

$ python bugle.py -f -u [file]

Codice pagina

Bugle utilizza 512 caratteri nella sua tabella codici. Il 0xFFcarattere non deve essere utilizzato per un comando , poiché indica che il valore esadecimale successivo verrà indicizzato nella seconda metà della tabella codici. I personaggi usati sono:

ÀÁÂÄÆÃÅĀĄ\t\nĆČÇĎÐ
ÈÉÊËĒĖĚĘÌÍÎÏĪĮĹĽ
 !"#$%&'()*+,-./
0123456789:;<=>?
@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_
`abcdefghijklmno
pqrstuvwxyz{|}~¶
ŁŃŇÑŊÒÓÔÖŒÕØŌŔŘŚ
ŠŤŦÙÚÛÜŮŪŴÝŶŸŹŽŻ
àáâäæãåāąćčçďðèé
êëēėěęìíîïīįĺľłń
ňñŋòóôöœøōõŕřßśš
ťŧùúûüůūŵýŷÿźžż◊
ΑΆΒΓΔΕΈΖΗΉΘΙΊΚΛΜ
ΝΞΟΌΠΡΣΤΥΎΦΧΨΩΏ
αάβγδεέζηήθιίΐκλ
μνξοόπσςτυύΰφχψω
ώǴḰḾṔẂǵḱḿṕẃḂḞĠḢṀ
ȮṖṠṪẊḃḟġḣṁȯṗṡṫẋ§
ĂĞĬŎŬĴăğĭŏŭĵªº‹›
ƁƇƊƑƓƘⱮƝƤƬƲȤɓƈɗƒ
ɠɦƙɱɲƥʠɼʂƭʋȥ©®ıȷ
ЉЊЕРТЗУИОПШАСДФГ
ХЈКЛЧЋЅЏЦВБНМЂЖљ
њертзуиопшасдфгх
јклчћѕџцвбнмђжÞþ
†∂∆≈≠√∈∉∌∋∩∪¬∧∨⊕
¤₽¥£¢€₩‰¿¡⁇⁈‼⁉‽⸘
…°•”“„’‘≤«·»≥ᴇ∞¦
×⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾
÷₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎

O vederlo in formato tabella . Si noti che \te \nscheda e nuova riga rappresentano rispettivamente. Si noti inoltre che la sedicesima riga termina con un carattere non stampabile: e potrebbe non essere visualizzata su tutti i browser.

Memoria

L'interprete attualmente ha 5 modelli di memoria integrati. Ogni modello di memoria richiede un carattere per dire all'interprete di iniziare a usare quel modello:

  • Stack ( $): uno stack standard, che supporta i valori inviati, estratti, ecc.
  • Infinite tape ( #): un nastro, à la brainfuck, che inizialmente è solo 0s.
  • Griglia infinita ( G): una griglia 2d, infinita in entrambe le direzioni, contenente solo 0s
  • Deque ( D): un deque , come implementato dal collectionsmodulo.
  • Register ( S): un singolo valore, che può essere utilizzato per memorizzare un valore.

La griglia ha anche un singolo valore salvato nel suo puntatore che può essere scritto o scritto nelle celle.

Inoltre, è possibile modificare le dimensioni del nastro e della griglia e il comportamento di avvolgimento, utilizzando un comando invoke diverso. Questi diversi comandi prendono un determinato numero di valori dal modello di memoria corrente come parametri di personalizzazione:

  • Tape ( À): accetta due valori: size ( int) e wrapping ( bool)
  • Tape ( Á): accetta un valore - size ( int). Avvolge alla fine del nastro
  • Tape ( Â): accetta un valore - size ( int). Non termina alla fine
  • Grid ( Ǵ): accetta 4 valori: x size ( int), y size ( int), x wrap ( bool) e y wrap ( bool)

Il tipo di memoria utilizzato può cambiare durante un programma mediante l'uso di ₀₁₂₃₄₅₆₇₈₉, che accedono al ntipo di memoria utilizzato 0 indicizzato ( è il primo, è il secondo ecc.), Ma, attualmente, i valori non possono essere scambiati tra diversi tipi di memoria.

branching

Finora Bugle ha due comandi di ramificazione, entrambi terminati con un ]carattere:

  • While ( [): stile brainfuck mentre loop. Questi pop un valore dallo stack / deque se utilizzato, o accedono alla cella sotto il puntatore in nastro / griglia.

    Esempio: #?[-O]conta dall'input fino a0

  • If / else ( {e }). Esecuzione singola durante i loop. Se il valore visualizzato è falso, la clausola if viene ignorata, andando alla clausola else, separata da }. Si comportano allo stesso modo dei loop relativi all'accesso alla memoria.

    Esempio: {0}1]è un gate NOT logico

Funzioni integrate

Le serie di cifre vengono interpretate come numeri interi e vengono semplicemente inviate / scritte nel modello di memoria corrente così come sono.

Ovviamente, ho dotato Bugle di alcune funzioni integrate di base, il meno possibile, per consentire ad altri di aggiungerne altre man mano che la catena avanza. I comandi di base sono i seguenti:

  • +

    • Stack / Deque: aggiungi i primi due valori
    • Tape / Grid: incrementa la cella corrente
  • -

    • Stack / Deque: sottrai i primi due valori
    • Tape / Grid: decrementa la cella corrente
  • %

    • Stack / Deque: Modulo i primi due valori
  • :

    • Stack / Deque: duplica il valore più alto
  • ;

    • Stack / Deque: Pop il valore più alto
    • Tape / Grid: azzera la cella corrente
  • <

    • Nastro / griglia: sposta a sinistra di una cella
  • =

    • Stack: i primi due valori sono uguali?
    • Griglia: sposta in basso di una cella
  • >

    • Nastro / griglia: sposta a destra di una cella
  • ?

    • Stack / Deque: valuta una riga di input
    • Tape / Grid: accetta un carattere di input
  • L

    • Stack / Deque: spingi la lunghezza della pila / deque
  • O

    • Tutto: emette il valore corrente
  • R

    • Stack: se possibile, invertire l'elemento superiore, altrimenti invertire la pila
  • Z

    • Stack: l'elemento superiore è positivo?
  • ^

    • Griglia: sposta in alto di una cella
  • h

    • Tutto: stampa il modello di memoria completa
  • o

    • Tutto: stampa il valore corrente come carattere
  • r

    • Stack: ruota i primi 3 valori
    • Deque: ruota i ntempi di deque , dove nè il valore più alto
  • s

    • Stack / Deque: scambia i primi due valori
    • Stack: Splat il valore più alto
  • ×

    • Stack: moltiplica i primi due valori
    • Griglia: scrivere il valore del puntatore nella cella corrente
  • ÷

    • Stack: dividere i primi due valori
    • Griglia: scrivere la cella corrente sul valore del puntatore
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.