Brainf*ck ei ole saanut putkassa arvoistaan suosiota, joten tässä sille yksinkertainen esimerkki. Blue Fern ainakin ajoi. Ohjelma tulostaa laskemaansa fibonaccin 10:ttä lukua vastaavan ascii-merkin, "7":n. Plus-merkkien määrä alussa määrää kuinka moneen fibonaccin lukuun lasketaan (+-merkkien määrä +2 :).
++++++++>+>+<< initial values [- while "0" >[->>+>+<<<] "1" to "3" and "4" >>>[-<<<+>>>]<< "4 to "1" [->>+>+<<<] "2 to "4","5" >>>[-<<<+>>>]< "5 to "2" <[->>>+<<<] add "3" to "6" >[->>+<<] add "4" to "6" <<<[-] zero "1" >[-<+>] "2" to "1" >>>>[-<<<<+>>>>] "6" to "2" <<<<<<] test "0" >>. print "2"
Voi kun näppärää. :)
Hieno kieli kieltämättä tuo Brainfuck, mutta ehkä niissä tutummissa C++:ssa, Javassa ja Basiceissa sun muissa on kuitenkin omat hyvät puolensa... Joskin yhtä tyylikkään näköisen koodin tekeminen ei ole ainakaan yhtä helppoa niillä.
while "0"
Eikös tuo ole sama kuin ei silmukkaa lainkaan?
Voisit vähän selventää mitä tuossa tapahtuu, nuo "5 to "2" selitykset eivät oikein auenneet.
Ah, siinä vasta kätevä kieli :) Lainausmerkeissä ovat muistipaikkojen (tavujen) numerot. > siirtyy seuraavaan tavuun, < edelliseen. - vähentää yhden kohdalla olevasta tavusta, + lisää siihen yhden. [ ja ] määräävät silmukan, jota toistetaan niin kauan kuin kohdalla oleva tavu ei ole nolla. Piste tulostaa kohdalla olevan tavun.
Tämä taitaa olla esimerkki sarjassa obfuscated brainfuck. Saman voisi kirjoittaa paljon yksinkertaisemmin näin.
++++++++>+>+<< [- >[->>+<<] >[-<+>>+<] >[-<+>] <<<] >>.
niin tai näin (sama koodi)
++++++++>+>+<<[->[->>+<<]>[-<+>>+<]>[-<+>]<<<]>>.
näppärä kieli :=)
Ovela kieli tosiaan. Alla FooBatin koodi C:nä. Pointtereitakin voisi tietysti käyttää, mutta tein nyt näin.
#include <stdio.h> int main(void) { int a = 8; int b = 1; int c = 1; int d = 0; while(a) { a--; while(b) { b--; d++; } while(c) { c--; b++; d++; } while(d) { d--; c++; } } printf("%d", c); return 0; }
Kannattaa poistaa tuo pilkku '"2" to "4","5"' -kommentista, sehän on nimittäin komento - getcharin pyöräytys.
Täydennyksen vuoksi vielä alkuperäinen koodi C:nä, osoittimineen ja taulukkoineen Brainfuck-ympäristön emuloimiseksi.
#include <stdio.h> int main() { // Brainfuckissa on muistia 30000 nollatavua... static char mem[30000]; // ja sitä käsitellään osoittimella. char * p = mem; // sitten itse ohjelmaan... *p += 8; ++p; ++*p; ++p; ++*p; p -= 2; while (*p) { --*p; ++p; while (*p) { --*p; p += 2; ++*p; ++p; ++*p; p -= 3; } p += 3; while (*p) { --*p; p -= 3; ++*p; p += 3; } p -= 2; while (*p) { --*p; p += 2; ++*p; ++p; ++*p; p -= 3; } p += 3; while (*p) { --*p; p -= 3; ++*p; p += 3; } p -= 2; while (*p) { --*p; p += 3; ++*p; p -= 3; } ++p; while (*p) { --*p; p += 2; ++*p; p -= 2; } p -= 3; while (*p) --*p; ++p; while (*p) { --*p; --p; ++*p; ++p; } p += 4; while (*p) { --*p; p -= 4; ++*p; p += 4; } p -= 6; } p += 2; putchar(*p); }
ai ai, että BF vetää lyhyemmäksi tuon koodin. BF RULES! (en osaa oikeastaan mitään sillä)
itte tein sille toimivan tulkin qb:lla, tai kutsun sitä bf+:ssaksi omien pikku lisäysteni ansiota(randomit ja if- lausekkeet)
Aihe on jo aika vanha, joten et voi enää vastata siihen.