Per i non iniziati, Brainfuck è un linguaggio Turing-complete con solo 8 comandi, che hanno tutti equivalenti letterali in C:Strutture di controllo di esecuzione in Brainfuck
bf c
----------------------
> ++ptr;
< --ptr;
+ ++*ptr;
- --*ptr;
. putchar(*ptr);
, *ptr=getchar();
[ while (*ptr) {
] }
In qualsiasi distribuzione Linux che ha un gestore di pacchetti, Dovresti essere in grado di trovare e installare il pacchetto beef
, un interprete Brainfuck in modo da poter suonare a casa.
Come potete vedere sopra, Brainfuck ha ma uno struttura di controllo, che si traduce in […]
C come:
while (*ptr) { … }
che ti dà tutto il controllo di IF VAR = 0 THEN GOTO 10
da BASIC. Di seguito chiamerà getchar()
fino a tornare 0
:
, # *ptr = getchar();
[ # while (*ptr) {
>, # *(++ptr) = getchar();
] # }
Ma cosa succede se voglio solo leggere a un char a capo \n
? Dopo aver qualche difficoltà avvolgere il mio cervello intorno come questo potrebbe essere adattato per funzionare come un semplice if
mi si avvicinò con il seguente:
, # *ptr = getchar(); /* store input */
---------- # *ptr -= 10; /* test for \n by subtracting 10 before loop */
[ # while (*ptr) { /* if *ptr == 0, last char read was \n */
++++++++++ # *ptr += 10; /* wasn't \n, add 10 back to val under ptr */
>, # *(++ptr) = getchar();
---------- # *ptr -= 10;
] # }
(Se qualcuno ha un modo migliore di fare questo, per favore fatemelo sapere)
Ora diciamo che voglio testare l'interruzione di quel ciclo su \r
oltre a \n
. Come posso testare per entrambi, dato che ho solo una possibilità di uscire dal giro? Il mio obiettivo è essere in grado di emulare switch
, nidificato if
s o if/else if
s.
Non ci può essere _no_ seria domanda su un linguaggio come morte cerebrale. In effetti, è quello che dovrebbe essere chiamato: Braindead :-) – paxdiablo
Signore, sei un uomo coraggioso. – Pierreten
@SCMadsen Ecco "Hello World": '++++++++++ [> +++++++> ++++++++++> +++> + <<<<-]> ++. > + +++++++. .. +++.> ++. << +++++++++++++++.> +++. .------ .--------.> +.>. ' – NullUserException