Skip to content

Costruisci con me un linguaggio da golfista

Dopo aver consultato esperti in materia, programmatori di varie branche e docenti, abbiamo trovato la risposta al dilemma e la condividiamo in questo post.

Soluzione:

2. Punteggio: 2938 2583

L'interprete modificato è qui su TIO.

Il letterale di stringa è l'aggiunta più ovvia al linguaggio, principalmente per combattere le sfide della complessità di Kolmogorov.

Soluzioni

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

#"Hello, World!"[o>]

Qualsiasi sfida di kolmogorov-complessità può essere completata utilizzando la struttura #""[o>] che produce la stringa data finché non viene raggiunto lo 0 dopo la 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 fantastico gioco del golf.

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

#"ĒĎ"[O>]

Utilizza i due caratteri 20 e 14 nei codici Bugle.

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

#"Ifmmp!Xpsme"[-o>]

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

5. Canta Buon compleanno 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 golf in codice, tu conosci le regole e anch'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. Golfarti un quino per un gran bene! - 62 byte (-12)

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

Aggiunta di una funzione linguistica

  • "...": Letterale di stringa.
    • Pila / Deque: Spinge i punti di codifica Bugle di ciascun carattere in cima / davanti alla pila / deque.
    • Nastro / Griglia: Scrive i punti di codifica Bugle di ciascun carattere sul nastro/griglia a destra, a partire dalla cella corrente. Non sposta il cursore.
    • n viene gestito come gli altri caratteri.
    • Per il momento non esiste un carattere di escape, quindi non è possibile scrivere " (34) in memoria usando questo comando. Non è un grosso problema, almeno per ora, dato che tutte le sfide di kolmogorov-complessità elencate qui non hanno " nell'output.

Ogni ulteriore risposta è sempre benvenuta, soprattutto per "Never gonna give you up" e per il quine. In particolare, la quine di cui sopra è la prima quine non banale che abbia mai fatto, quindi credo fermamente che qualcuno possa trovarne una più breve.

3. Punteggio: 29382583 2532 (-51)

Il nuovo interprete è qui.

Principalmente per rendere più facile l'output, ho aggiunto la possibilità di duplicare lo stack/deque e anche di mostrare l'intero modello in forma di testo renderizzato invece che di numeri interi.

Soluzioni

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

#"Hello, World!"a

5. Canta Buon Compleanno 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 golf in codice, tu conosci le regole e anch'io le conosco - 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 a quine per un grande bene! - 23 byte (-39)

$"R34RdR36Ra"R34RdR36Ra

Caratteristiche linguistiche aggiunte

  • a

    • Tutti: Stampa l'intero modello come testo, ad es. #"Hello, World!"a stampa Hello, World!
  • d

    • Pila/Deque: Spinge la pila su se stessa.

1. Punteggio: 9638

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

Soluzioni

Tutte queste soluzioni sono programmi Unicode, eseguiti con l'opzione -u ma i punteggi vengono conteggiati come se fossero codificati con la pagina di codice di Bugle.

1. "Hello, World!" - 48 byte

$72o101o108o108o111o44o32o87o111o114o108o100o33o

È sufficiente spingere, quindi emettere il codice di ciascun carattere della stringa.

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

$49o10o50o10o70o105o122o122o10o52o10o66o117o122o122o10o70o105o122o122o10o55o10o56o10o70o105o122o122o10o66o117o122o122o10o49o49o10o70o105o122o122o10o49o51o10o49o52o10o70o105o122o122o66o117o122o122o10o49o54o10o49o55o10o70o105o122o122o10o49o57o10o66o117o122o122o10o70o105o122o122o10o50o50o10o50o51o10o70o105o122o122o10o66o117o122o122o10o50o54o10o70o105o122o122o10o50o56o10o50o57o10o70o105o122o122o66o117o122o122o10o51o49o10o51o50o10o70o105o122o122o10o51o52o10o66o117o122o122o10o70o105o122o122o10o51o55o10o51o56o10o70o105o122o122o10o66o117o122o122o10o52o49o10o70o105o122o122o10o52o51o10o52o52o10o70o105o122o122o66o117o122o122o10o52o54o10o52o55o10o70o105o122o122o10o52o57o10o66o117o122o122o10o70o105o122o122o10o53o50o10o53o51o10o70o105o122o122o10o66o117o122o122o10o53o54o10o70o105o122o122o10o53o56o10o53o57o10o70o105o122o122o66o117o122o122o10o54o49o10o54o50o10o70o105o122o122o10o54o52o10o66o117o122o122o10o70o105o122o122o10o54o55o10o54o56o10o70o105o122o122o10o66o117o122o122o10o55o49o10o70o105o122o122o10o55o51o10o55o52o10o70o105o122o122o66o117o122o122o10o55o54o10o55o55o10o70o105o122o122o10o55o57o10o66o117o122o122o10o70o105o122o122o10o56o50o10o56o51o10o70o105o122o122o10o66o117o122o122o10o56o54o10o70o105o122o122o10o56o56o10o56o57o10o70o105o122o122o66o117o122o122o10o57o49o10o57o50o10o70o105o122o122o10o57o52o10o66o117o122o122o10o70o105o122o122o10o57o55o10o57o56o10o70o105o122o122o10o66o117o122o122o

Stessa tecnica dell'esempio Hello, World!

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

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

# utilizza il nastro, + incrementa la cella, O produce un numero intero e - decrementa

4. Hello World offuscato - 172 byte

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

Sfrutta la sua intrinseca somiglianza con brainfuck. Soddisfa le regole #1 e #3

5. Canta Buon Compleanno al tuo linguaggio di programmazione preferito - 328 byte

$72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o68o101o97o114o32o66o117o103o108o101o10o72o97o112o112o121o32o66o105o114o116o104o100o97o121o32o116o111o32o89o111o117o

Tutte le sfide di complessità di Kolmogorov hanno questo tipo di struttura, al momento.

6. Non siamo estranei al code golf, tu conosci le regole e anch'io le conosco - 6893 byte

$87o101o39o114o101o32o110o111o32o115o116o114o97o110o103o101o114o115o32o116o111o32o108o111o118o101o10o89o111o117o32o107o110o111o119o32o116o104o101o32o114o117o108o101o115o32o97o110o100o32o115o111o32o100o111o32o73o10o65o32o102o117o108o108o32o99o111o109o109o105o116o109o101o110o116o39o115o32o119o104o97o116o32o73o39o109o32o116o104o105o110o107o105o110o103o32o111o102o10o89o111o117o32o119o111o117o108o100o110o39o116o32o103o101o116o32o116o104o105o115o32o102o114o111o109o32o97o110o121o32o111o116o104o101o114o32o103o117o121o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o87o101o39o118o101o32o107o110o111o119o110o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o65o110o100o32o105o102o32o121o111o117o32o97o115o107o32o109o101o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o68o111o110o39o116o32o116o101o108o108o32o109o101o32o121o111o117o39o114o101o32o116o111o111o32o98o108o105o110o100o32o116o111o32o115o101o101o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o44o32o103o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o40o79o111o104o41o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o44o32o110o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o10o40o71o105o118o101o32o121o111o117o32o117o112o41o10o32o10o87o101o39o118o101o32o107o110o111o119o32o101o97o99o104o32o111o116o104o101o114o32o102o111o114o32o115o111o32o108o111o110o103o10o89o111o117o114o32o104o101o97o114o116o39o115o32o98o101o101o110o32o97o99o104o105o110o103o32o98o117o116o10o89o111o117o39o114o101o32o116o111o111o32o115o104o121o32o116o111o32o115o97o121o32o105o116o10o73o110o115o105o100o101o32o119o101o32o98o111o116o104o32o107o110o111o119o32o119o104o97o116o39o115o32o98o101o101o110o32o103o111o105o110o103o32o111o110o10o87o101o32o107o110o111o119o32o116o104o101o32o103o97o109o101o32o97o110o100o32o119o101o39o114o101o32o103o111o110o110o97o32o112o108o97o121o32o105o116o10o32o10o73o32o106o117o115o116o32o119o97o110o110o97o32o116o101o108o108o32o121o111o117o32o104o111o119o32o73o39o109o32o102o101o101o108o105o110o103o10o71o111o116o116o97o32o109o97o107o101o32o121o111o117o32o117o110o100o101o114o115o116o97o110o100o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o10o32o10o78o101o118o101o114o32o103o111o110o110o97o32o103o105o118o101o32o121o111o117o32o117o112o10o78o101o118o101o114o32o103o111o110o110o97o32o108o101o116o32o121o111o117o32o100o111o119o110o10o78o101o118o101o114o32o103o111o110o110o97o32o114o117o110o32o97o114o111o117o110o100o32o97o110o100o32o100o101o115o101o114o116o32o121o111o117o10o78o101o118o101o114o32o103o111o110o110o97o32o109o97o107o101o32o121o111o117o32o99o114o121o10o78o101o118o101o114o32o103o111o110o110o97o32o115o97o121o32o103o111o111o100o98o121o101o10o78o101o118o101o114o32o103o111o110o110o97o32o116o101o108o108o32o97o32o108o105o101o32o97o110o100o32o104o117o114o116o32o121o111o117o

7. Emettere il segno - 18 byte

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

Verifica se l'input è maggiore di zero, minore di zero (modificato in modo da ottenere -1 invece di 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

Esegue il ciclo sullo stack, ma passa al nastro per incrementare il conteggio a ogni iterazione.

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

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

Questa è una leggera modifica della risposta di Mitch Schwartz alla sfida esistente, votatela!

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 aver realizzato questo

11. Questo numero è un primo? - 31 byte

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

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

12. Sono un palindromo. E tu? - 13 byte

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

La prima metà del programma, fino a Oimposta lo stack come [x, x] dove x è o True o False. O estrae il valore superiore e lo invia in uscita. Il resto del programma si assicura che non vengano prodotti errori. Fortunatamente, quando ? incontra la fine del file, spinge semplicemente '' (la stringa vuota).

13. Somma i numeri sullo standard in - 19 byte

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

Questo può essere diviso in due parti: ?:[?:]; e L0s[+L1s-]. La prima parte raccoglie tutti gli elementi in ingresso allo stack. La seconda parte spinge la somma dei primi due elementi, se la lunghezza è superiore a 1.

14. Trova il fattoriale - 25 byte

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

Questo programma ha una struttura simile a quella del programma somma, ma invece di spingere gli ingressi multipli, il programma [:1s-:]; spinge l'intervallo da 1 .. n allo stack e [×L1s-] prende il prodotto.

15. Il codice più breve per produrre un output infinito - 5 byte

#+[O]

Utilizzare un ciclo while, con l'opzione 1 continuamente sotto il puntatore. Uscita 1 per sempre.

16. Cuocere una fetta di Pi - 439 byte

$40o41o40o41o40o41o40o41o40o41o40o41o10o124o92o51o46o49o52o49o53o57o50o54o124o10o124o58o92o53o51o53o56o57o55o57o51o124o10o92o58o58o92o50o51o56o52o54o50o54o124o10o32o92o58o58o92o52o51o51o56o51o50o124o10o32o32o92o58o58o92o55o57o53o48o50o124o10o32o32o32o92o58o58o92o56o56o52o49o124o10o32o32o32o32o92o58o58o92o57o55o49o124o10o32o32o32o32o32o92o58o58o92o54o57o124o10o32o32o32o32o32o32o92o58o58o92o51o124o10o32o32o32o32o32o32o32o92o95o95o92o124o

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

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

Si utilizza la divisione per tentativi, che termina quando il risultato del modulo non è uguale a 0.

18. È pari o dispari? - 5 byte

$2?%O

Semplice modulo per 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 you a quine for great good!

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

Il merito va all'utente202729 per aver realizzato questo


Specifica della lingua

Chiamata

bugle.py attualmente richiede una serie di flag, poi il nome del file/codice da eseguire. Per ora, ha 4 flag da riga di comando:

  • -f/--file specifica che il codice deve essere letto da un file
  • -c/--cmd/--cmdline specifica che il codice viene fornito dalla riga di comando.

    -c e -f non possono essere utilizzati nella stessa chiamata

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

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

La seguente chiamata è stata utilizzata per testare le sottomissioni di cui sopra

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

Pagina di codice

Bugle utilizza 512 caratteri nella sua pagina di codice. Il 0xFF non deve essere usato per un comando poiché viene utilizzato per indicare che il valore esadecimale successivo deve essere indicizzato nella seconda metà della pagina di codice. I caratteri utilizzati sono:

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

Oppure vedetelo in formato tabella. Si noti che t e n rappresentano rispettivamente tabulazione e newline. Si noti anche che la 16a riga termina con un carattere non stampabile: e potrebbe non essere visualizzato da tutti i browser.

Memoria

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

  • Pila ($): una pila standard, che supporta l'inserimento e il prelievo di valori, ecc.
  • Nastro infinito (#): Un nastro, alla maniera di brainfuck, che inizialmente è solo 0s.
  • Griglia infinita (G): Una griglia 2d, infinita in entrambe le direzioni, che contiene solo 0s
  • Deque (D): Un deque, come implementato dalla classe collections .
  • Registro (S): Un singolo valore, che può essere utilizzato per memorizzare uno valore.

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

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

  • Nastro (À): Prende due valori: dimensione (int) e avvolgimento (bool)
  • Nastro (Á): Prende un valore - dimensione (int). Si avvolge alla fine del nastro
  • Nastro (Â): Prende un valore - dimensione (int). Non va a capo alla fine
  • Griglia (Ǵ): Prende 4 valori - dimensione x (int), dimensione y (int), avvolgimento x (bool) e y (bool)

Il tipo di memoria utilizzato può essere modificato durante il programma mediante l'uso di ₀₁₂₃₄₅₆₇₈₉che accedono all'indice 0 nal primo tipo di memoria utilizzata ( è il primo, è il secondo, ecc.), ma attualmente non è possibile scambiare i valori tra diversi tipi di memoria.

Diramazione

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

  • Mentre ([): cicli while in stile Brainfuck. Questi popolano un valore dallo stack/deque, se utilizzato, o accedono alla cella sotto il puntatore nel nastro/griglia.

    Esempio: #?[-O] conta dall'ingresso fino a 0

  • Se/se ({ e }). Loop while a esecuzione singola. Se il valore spuntato è falso, la clausola if viene saltata e si passa alla clausola else, separata da }. Si comportano come i cicli while per quanto riguarda l'accesso alla memoria.

    Esempio: {0}1] è una porta logica NOT

Funzioni integrate

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

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

  • +

    • Stack/Deque: Aggiunge i primi due valori
    • Nastro/Griglia: Incrementa la cella corrente
  • -

    • Pila/Deque: Sottrae i primi due valori
    • Nastro/Griglia: Decrementa la cella corrente
  • %

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

    • Pila/coppia: Duplica il valore superiore
  • ;

    • Pila/coppia: Aprire il valore superiore
    • Nastro/Griglia: Azzera la cella corrente
  • <

    • Nastro/Griglia: Sposta a sinistra di una cella
  • =

    • Pila: I primi due valori sono uguali?
    • Griglia: Spostamento in basso di una cella
  • >

    • Nastro/Griglia: Sposta a destra di una cella
  • ?

    • Pila/Deque: Valuta una riga di input
    • Nastro/Griglia: Prende un carattere di input
  • L

    • Pila/Deque: Spinge la lunghezza della pila/deque
  • O

    • Tutti: Emette il valore corrente
  • R

    • Pila: Inverte l'elemento superiore se possibile, altrimenti inverte la pila
  • Z

    • Pila: L'elemento superiore è positivo?
  • ^

    • Griglia: Sposta una cella in alto
  • h

    • Tutti: Stampa il modello di memoria completo
  • o

    • Tutti: Stampa il valore corrente come carattere
  • r

    • Pila: Ruota i primi 3 valori
    • Deque: Ruota il deque n volte, dove n è il valore superiore
  • s

    • Pila/Deque: Scambia i primi due valori
    • Pila: Scambia il valore superiore
  • ×

    • Pila: Moltiplica i due valori superiori
    • Griglia: Scrive il valore del puntatore nella cella corrente
  • ÷

    • Pila: Divide i due valori superiori
    • Griglia: Scrive la cella corrente nel valore del puntatore

Se sei d'accordo, puoi lasciare un articolo su ciò che ti ha colpito di questo scritto.



Utilizzate il nostro motore di ricerca

Ricerca
Generic filters

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.