Skip to main content

Brainfuck Contingut Disseny Exemples Implementacions Menú de navegacióEtiquetaBFFAlso Written In Brainfuck (awib)Brainfucked

Llenguatges de programació esotèrics


llenguatge de programació esotèricTuring completUrban MüllerAmigaAmiNet1993compiladorbytesbytepunterteclatmonitorASCIIsecció Brainfuck d'Hola món












Brainfuck




De Viquipèdia






Salta a la navegació
Salta a la cerca


















Infotaula de llenguatge de programacióBrainfuck

Hello World Brainfuck.png
Tipus
llenguatge de programació esotèric, turing tarpit Tradueix i llenguatge de programació
Data de creació
1993
Desenvolupador
Urban Müller
Epònim
cervell i fuck
Influenciat per
P′′ i FALSE
Extensió dels fitxers
b i bf
Etiqueta d'Stack Exchange
Etiqueta
Modifica les dades a Wikidata

Brainfuck és un llenguatge de programació esotèric. Es distingeix pel baix nombre d'instruccions que fa servir, només en té 8. No obstant això és Turing complet.




Contingut





  • 1 Disseny

    • 1.1 Instruccions


    • 1.2 Traducció a llenguatge C



  • 2 Exemples

    • 2.1 Trivials

      • 2.1.1 Netejar posició


      • 2.1.2 Bucle simple


      • 2.1.3 Movent el punter


      • 2.1.4 Afegir


      • 2.1.5 Instruccions condicionals


      • 2.1.6 Copiant un byte



    • 2.2 No trivials

      • 2.2.1 Hola Món!


      • 2.2.2 Suma


      • 2.2.3 Multiplicació


      • 2.2.4 Divisió




  • 3 Implementacions




Disseny


Urban Müller, famós per gestionar la major col·lecció de programari lliure pel Amiga i per a qualsevol sistema informàtic (incloent Unix i Windows) en aquell moment anomenada AmiNet, una mica com una broma, va crear brainfuck el 1993 amb la intenció de dissenyar un llenguatge que pogués ser implementat amb el compilador més petit possible. Es va inspirar en el compilador de 1024 bytes pel llenguatge FALSE. Existeixen diversos compiladors de brainfuck més petits que 200 bytes.


El llenguatge consisteix de 8 instruccions. Un programa de brainfuck és una seqüència d'aquestes instruccions, possiblement intercalades amb altres caràcters (que són ignorats). Les instruccions s'executen seqüencialment, excepte les dues de salt condicional.


El llenguatge es basa en un model d'execució simple que consisteix, a més del programa en una llista de 30.000 posicions, d'un byte de grandària cadascuna, inicialitzades a zero; un punter mòbil a la llista (inicialitzat a la primera posició, a l'esquerra), i dos 'streams' de bytes per entrada/sortida (sovint connectats al teclat i al monitor respectivament, i fent servir ASCII per codificar els caràcters).



Instruccions


Les 8 instruccions del llenguatge, cada una consistint en un simple caràcter, són les següents:




















Caràcter
Significat

>
incrementar el punter (per apuntar a la següent posició de la llista, a la dreta).

<
decrementar el punter (per apuntar a la següent posició de la llista, a l'esquerra).

+
increment (incrementar per 1) el byte on apunta el punter.

-
decrement (decrementar per 1) el byte on apunta el punter.

.
fer sortir el valor del byte a la posició del punter.

,
acceptar un byte d'entrada, desant el seu valor al byte on sigui el punter.

[
salta l'execució a la instrucció posterior al corresponent ] si el byte del punter és zero.

]
salta a la instrucció posterior al corresponent [ si el byte del punter no és zero.


Traducció a llenguatge C


Els programes de brainfuck es poden traduir al llenguatge de programació C fent servir les següents substitucions, assumint que ptr és de tipus unsigned char* i ha estat inicialitzat per apuntar a una llista de bytes inicialitzats a zero:




















instrucció brainfuck
equivalent C

>

++ptr;

<

--ptr;

+

++*ptr;

-

--*ptr;

.

putchar(*ptr);

,

*ptr=getchar();

[

while (*ptr)

]



Exemples



Trivials



Netejar posició


[-]

Aquesta simple porció de programa neteja la posició actual a zero, iterativament decrementa el seu valor fins que és zero, llavors surt del bucle i continua l'execució.



Bucle simple


,[.,]

Això és un bucle continu, pren text d'entrada (del teclat) i el copia a la sortida (la pantalla). Modifica la posició actual del punter. Només surt quan el valor ASCII zero entra pel teclat.


Aquesta versió fa el mateix però surt quan es prem 'enter' (ASCII 10) al teclat:


,----------[++++++++++.,----------]


Movent el punter


>,[.>,]

Una versió de l'anterior que mou el punter cada cop per desar tot el text entrat a la llista per ús futur.



Afegir


[->+<]

Això afegeix la posició actual (destructivament, la deixa a zero) a la propera.



Instruccions condicionals


,----------[----------------------.,----------]

Aquest codi converteix el text entrat en minúscules pel teclat, el converteix en majúscules i el mostra a la pantalla en prémer la tecla 'enter'.


Primer el caràcter entra fent servir el codi , i immediatament es resta 10 (La majoria d'implementacions de brainfuck, si no totes, fan servir 10 pel retorn) Si l'usuari ha premut 'enter' la instrucció condicional [ saltarà a la posició just després de ] perquè haurem tornat el primer byte a zero. El programa acabarà. Si el primer caràcter no era 'enter' assumim que és una minúscula i li restem 22, per un total de 32, que és la diferència entre una minúscula i la seva respectiva majúscula en ASCII.


Després mostrem per pantalla . i fem entrar el proper caràcter , restant-li 10 un altre cop, si no era 10 anirem a la primera posició del bucle i restarem altre cop 22. El programa acaba en prémer 'enter' perquè no hi ha més instruccions després.



Copiant un byte


(A partir d'aquest punt ens referirem als bytes de la llista com a [0], [1], [2]... successivament)


Brainfuck no inclou una instrucció per copiar bytes. Això ha de fer-se amb les instruccions de bucle. Moure un byte és simple si la destinació és zero (sempre ho és en iniciar el programa) però la posició inicial es perd, com hem vist abans. Així movem [0] a [1]:


[->+<]

Podríem restituir el valor de [0] si l'haguéssim copiat a dues posicions a la vegada. Per copiar [0] a [1] i [2] a la vegada faríem:


[->+>+<<]

Ara podem aprofitar això per restituir [0]. En resum, per copiar [0] a [1] fent servir [2] com espai de treball fem:


[->+>+<<]>>[-<<+>>]<<


No trivials



Hola Món!


Vegeu la secció Brainfuck d'Hola món



Suma


,>++++++[<-------->-],[<+>-],<.>.

Aquest programa suma dos nombres d'un sol dígit i el resultat només és correcte si també té un sol dígit:


entrada: 43'enter'

sortida: 7

El primer nombre entra a [0] i li restem 48 per corregir-lo (ha entrat el codi ASCII, i aquests codis per als dígits 0-9 són 48-57). Això ho fem escrivint 6 en [1] i fent servir el primer bucle per restar-li 8 a [0] 6 cops (Aquest és el mètode normal per sumar o restar nombres llargs.). Després, el segon nombre entra en [1].


El proper bucle [<+>-] mou el segon nombre al primer tot afegint-los, i posat [1] a zero. En cada volta afegeix 1 a [0] i resta 1 a [1], quan [1] és zero el bucle surt. Després un 'enter' entra a [1].


Es mou el punter altra volta a la posició [0] i es mostra el resultat ([0] és ara a + b + 48 donat que no s'ha corregit b). Es mou el punter a [1] que tenia el 'enter' i es fa sortir, el programa acaba.



Multiplicació


,>,>++++++++[<------<------>>-]
<<[>[>+>+<<-]>>[<<+>>-]<<<-]
>>>++++++[<++++++++>-],<.>.


Igual que el programa anterior, però en comptes de sumar multiplica. Té les mateixes limitacions: 1 dígit per cada valor i resultats d'un dígit.


El primer nombre entra a [0], el segon a [1], es corregeixen tots dos restant-los 48 (primera línia).


Ara s'entra al bucle principal de la multiplicació. La idea bàsica és que cada cop que el programa hi passa restarà 1 a [0] i afegirà el valor de [1] al total que estarà a [2]. En detall: el primer bucle interior mou [1] a [2] i [3] i deixa [1] a zero (La manera bàsica de duplicar un nombre). El següent bucle intern mou [3] un altre cop a [1], deixant [3] a zero. Llavors es resta 1 de [0], i acaba el bucle exterior. En sortir [0] és zero, [1] encara té el segon nombre i [2] té el producte dels dos nombres inicials.


A la tercera línia afegim 48 al producte, s'introdueix un 'enter' en [3], surt el producte en ASCII i després el retorn que havia entrat en [3].



Divisió


,>,>++++++[-<--------<-------->>] entren 2 nombres a (0) i (1) i restem 48 als dos
<<[ bucle fins que el dividend sigui zero
>[->+>+<<] el divisor es mou de (1) a (2) i (3), posant (1) a zero
>[-<<- resta 1 al dividend(0) i al divisor(2) fins que (2) sigui zero
[>]>>>[<[>>>-<<<[-]]>>]<<] si el dividend és zero, sortir del bucle
>>>+ afegir 1 al quocient en (5)
<<[-<<+>>] es mou el divisor de (3) a (2)
<<<] el punter es mou a (0) i es repeteix el bucle
>[-]>>>>[-<<<<<+>>>>>] el quocient en (5) es mou a (0)
<<<<++++++[-<++++++++>]<. afegir 48 i mostrar el resultat
>>>>>>++++++++++. surt 'enter' al final


Quan l'usuari entra dos nombres, aquest codi els divideix, ignorant la resta, i mostra el quocient a la pantalla.



Implementacions



  • BFF(anglès) intèrpret optimitzat escrit en C portable


  • Also Written In Brainfuck (awib)(anglès) compilador escrit en brainfuck per GNU/Linux en i386.


  • Brainfucked(anglès) compilador amb validació de sintaxi i optimització per Microsoft Windows/DOS




Obtingut de «https://ca.wikipedia.org/w/index.php?title=Brainfuck&oldid=18616590»













Menú de navegació


























(RLQ=window.RLQ||[]).push(function()mw.config.set("wgPageParseReport":"limitreport":"cputime":"0.152","walltime":"0.209","ppvisitednodes":"value":427,"limit":1000000,"ppgeneratednodes":"value":0,"limit":1500000,"postexpandincludesize":"value":6443,"limit":2097152,"templateargumentsize":"value":38,"limit":2097152,"expansiondepth":"value":9,"limit":40,"expensivefunctioncount":"value":0,"limit":500,"unstrip-depth":"value":0,"limit":20,"unstrip-size":"value":54,"limit":5000000,"entityaccesscount":"value":1,"limit":400,"timingprofile":["100.00% 159.943 1 -total"," 96.79% 154.812 1 Plantilla:Infotaula_llenguatge_programació"," 94.66% 151.409 1 Plantilla:Infotaula"," 7.71% 12.327 1 Plantilla:If_empty"," 6.42% 10.273 3 Plantilla:Colors_infotaules"," 4.18% 6.693 1 Plantilla:Títol_sense_cua"," 2.95% 4.723 3 Plantilla:En"," 1.32% 2.112 1 Plantilla:Indicació_d'idioma"],"scribunto":"limitreport-timeusage":"value":"0.066","limit":"10.000","limitreport-memusage":"value":2133756,"limit":52428800,"cachereport":"origin":"mw1318","timestamp":"20190830210732","ttl":2592000,"transientcontent":false););"@context":"https://schema.org","@type":"Article","name":"Brainfuck","url":"https://ca.wikipedia.org/wiki/Brainfuck","sameAs":"http://www.wikidata.org/entity/Q244627","mainEntity":"http://www.wikidata.org/entity/Q244627","author":"@type":"Organization","name":"Contributors to Wikimedia projects","publisher":"@type":"Organization","name":"Wikimedia Foundation, Inc.","logo":"@type":"ImageObject","url":"https://www.wikimedia.org/static/images/wmf-hor-googpub.png","datePublished":"2006-01-27T15:14:53Z","dateModified":"2017-07-04T21:28:58Z","image":"https://upload.wikimedia.org/wikipedia/commons/b/b4/Hello_World_Brainfuck.png","headline":"llenguatge de programaciu00f3"(RLQ=window.RLQ||[]).push(function()mw.config.set("wgBackendResponseTime":139,"wgHostname":"mw1272"););

Popular posts from this blog

19. јануар Садржај Догађаји Рођења Смрти Празници и дани сећања Види још Референце Мени за навигацијуу

Israel Cuprins Etimologie | Istorie | Geografie | Politică | Demografie | Educație | Economie | Cultură | Note explicative | Note bibliografice | Bibliografie | Legături externe | Meniu de navigaresite web oficialfacebooktweeterGoogle+Instagramcanal YouTubeInstagramtextmodificaremodificarewww.technion.ac.ilnew.huji.ac.ilwww.weizmann.ac.ilwww1.biu.ac.ilenglish.tau.ac.ilwww.haifa.ac.ilin.bgu.ac.ilwww.openu.ac.ilwww.ariel.ac.ilCIA FactbookHarta Israelului"Negotiating Jerusalem," Palestine–Israel JournalThe Schizoid Nature of Modern Hebrew: A Slavic Language in Search of a Semitic Past„Arabic in Israel: an official language and a cultural bridge”„Latest Population Statistics for Israel”„Israel Population”„Tables”„Report for Selected Countries and Subjects”Human Development Report 2016: Human Development for Everyone„Distribution of family income - Gini index”The World FactbookJerusalem Law„Israel”„Israel”„Zionist Leaders: David Ben-Gurion 1886–1973”„The status of Jerusalem”„Analysis: Kadima's big plans”„Israel's Hard-Learned Lessons”„The Legacy of Undefined Borders, Tel Aviv Notes No. 40, 5 iunie 2002”„Israel Journal: A Land Without Borders”„Population”„Israel closes decade with population of 7.5 million”Time Series-DataBank„Selected Statistics on Jerusalem Day 2007 (Hebrew)”Golan belongs to Syria, Druze protestGlobal Survey 2006: Middle East Progress Amid Global Gains in FreedomWHO: Life expectancy in Israel among highest in the worldInternational Monetary Fund, World Economic Outlook Database, April 2011: Nominal GDP list of countries. Data for the year 2010.„Israel's accession to the OECD”Popular Opinion„On the Move”Hosea 12:5„Walking the Bible Timeline”„Palestine: History”„Return to Zion”An invention called 'the Jewish people' – Haaretz – Israel NewsoriginalJewish and Non-Jewish Population of Palestine-Israel (1517–2004)ImmigrationJewishvirtuallibrary.orgChapter One: The Heralders of Zionism„The birth of modern Israel: A scrap of paper that changed history”„League of Nations: The Mandate for Palestine, 24 iulie 1922”The Population of Palestine Prior to 1948originalBackground Paper No. 47 (ST/DPI/SER.A/47)History: Foreign DominationTwo Hundred and Seventh Plenary Meeting„Israel (Labor Zionism)”Population, by Religion and Population GroupThe Suez CrisisAdolf EichmannJustice Ministry Reply to Amnesty International Report„The Interregnum”Israel Ministry of Foreign Affairs – The Palestinian National Covenant- July 1968Research on terrorism: trends, achievements & failuresThe Routledge Atlas of the Arab–Israeli conflict: The Complete History of the Struggle and the Efforts to Resolve It"George Habash, Palestinian Terrorism Tactician, Dies at 82."„1973: Arab states attack Israeli forces”Agranat Commission„Has Israel Annexed East Jerusalem?”original„After 4 Years, Intifada Still Smolders”From the End of the Cold War to 2001originalThe Oslo Accords, 1993Israel-PLO Recognition – Exchange of Letters between PM Rabin and Chairman Arafat – Sept 9- 1993Foundation for Middle East PeaceSources of Population Growth: Total Israeli Population and Settler Population, 1991–2003original„Israel marks Rabin assassination”The Wye River Memorandumoriginal„West Bank barrier route disputed, Israeli missile kills 2”"Permanent Ceasefire to Be Based on Creation Of Buffer Zone Free of Armed Personnel Other than UN, Lebanese Forces"„Hezbollah kills 8 soldiers, kidnaps two in offensive on northern border”„Olmert confirms peace talks with Syria”„Battleground Gaza: Israeli ground forces invade the strip”„IDF begins Gaza troop withdrawal, hours after ending 3-week offensive”„THE LAND: Geography and Climate”„Area of districts, sub-districts, natural regions and lakes”„Israel - Geography”„Makhteshim Country”Israel and the Palestinian Territories„Makhtesh Ramon”„The Living Dead Sea”„Temperatures reach record high in Pakistan”„Climate Extremes In Israel”Israel in figures„Deuteronom”„JNF: 240 million trees planted since 1901”„Vegetation of Israel and Neighboring Countries”Environmental Law in Israel„Executive branch”„Israel's election process explained”„The Electoral System in Israel”„Constitution for Israel”„All 120 incoming Knesset members”„Statul ISRAEL”„The Judiciary: The Court System”„Israel's high court unique in region”„Israel and the International Criminal Court: A Legal Battlefield”„Localities and population, by population group, district, sub-district and natural region”„Israel: Districts, Major Cities, Urban Localities & Metropolitan Areas”„Israel-Egypt Relations: Background & Overview of Peace Treaty”„Solana to Haaretz: New Rules of War Needed for Age of Terror”„Israel's Announcement Regarding Settlements”„United Nations Security Council Resolution 497”„Security Council resolution 478 (1980) on the status of Jerusalem”„Arabs will ask U.N. to seek razing of Israeli wall”„Olmert: Willing to trade land for peace”„Mapping Peace between Syria and Israel”„Egypt: Israel must accept the land-for-peace formula”„Israel: Age structure from 2005 to 2015”„Global, regional, and national disability-adjusted life years (DALYs) for 306 diseases and injuries and healthy life expectancy (HALE) for 188 countries, 1990–2013: quantifying the epidemiological transition”10.1016/S0140-6736(15)61340-X„World Health Statistics 2014”„Life expectancy for Israeli men world's 4th highest”„Family Structure and Well-Being Across Israel's Diverse Population”„Fertility among Jewish and Muslim Women in Israel, by Level of Religiosity, 1979-2009”„Israel leaders in birth rate, but poverty major challenge”„Ethnic Groups”„Israel's population: Over 8.5 million”„Israel - Ethnic groups”„Jews, by country of origin and age”„Minority Communities in Israel: Background & Overview”„Israel”„Language in Israel”„Selected Data from the 2011 Social Survey on Mastery of the Hebrew Language and Usage of Languages”„Religions”„5 facts about Israeli Druze, a unique religious and ethnic group”„Israël”Israel Country Study Guide„Haredi city in Negev – blessing or curse?”„New town Harish harbors hopes of being more than another Pleasantville”„List of localities, in alphabetical order”„Muncitorii români, doriți în Israel”„Prietenia româno-israeliană la nevoie se cunoaște”„The Higher Education System in Israel”„Middle East”„Academic Ranking of World Universities 2016”„Israel”„Israel”„Jewish Nobel Prize Winners”„All Nobel Prizes in Literature”„All Nobel Peace Prizes”„All Prizes in Economic Sciences”„All Nobel Prizes in Chemistry”„List of Fields Medallists”„Sakharov Prize”„Țara care și-a sfidat "destinul" și se bate umăr la umăr cu Silicon Valley”„Apple's R&D center in Israel grew to about 800 employees”„Tim Cook: Apple's Herzliya R&D center second-largest in world”„Lecții de economie de la Israel”„Land use”Israel Investment and Business GuideA Country Study: IsraelCentral Bureau of StatisticsFlorin Diaconu, „Kadima: Flexibilitate și pragmatism, dar nici un compromis în chestiuni vitale", în Revista Institutului Diplomatic Român, anul I, numărul I, semestrul I, 2006, pp. 71-72Florin Diaconu, „Likud: Dreapta israeliană constant opusă retrocedării teritoriilor cureite prin luptă în 1967", în Revista Institutului Diplomatic Român, anul I, numărul I, semestrul I, 2006, pp. 73-74MassadaIsraelul a crescut in 50 de ani cât alte state intr-un mileniuIsrael Government PortalIsraelIsraelIsraelmmmmmXX451232cb118646298(data)4027808-634110000 0004 0372 0767n7900328503691455-bb46-37e3-91d2-cb064a35ffcc1003570400564274ge1294033523775214929302638955X146498911146498911

Черчино Становништво Референце Спољашње везе Мени за навигацију46°09′29″ СГШ; 9°30′29″ ИГД / 46.15809° СГШ; 9.50814° ИГД / 46.15809; 9.5081446°09′29″ СГШ; 9°30′29″ ИГД / 46.15809° СГШ; 9.50814° ИГД / 46.15809; 9.508143179111„The GeoNames geographical database”„Istituto Nazionale di Statistica”Званични веб-сајтпроширитиуу