Título: Duda Brainfuck Publicado por: Baal_30 en 2 Julio 2015, 13:06 pm Muy buenas.
Estaba leyendo una entrada de genbetadev, en la que muestra 10 lenguajes de programación un poco diferentes de lo común... Entre ellos muestra Brainfuck, y como ejemplo de un hola mundo lo escribe así : Código
Teniendo en cuenta esto : Cuenta con sólo 8 instrucciones de un solo carácter cada una: ">" - Incrementa el puntero. "<" - Decrementa el puntero. "+" - Incrementa el byte apuntado. "-" - Decrementa el byte apuntado. "." - Escribe el byte apuntado en el flujo de salida. "," - Lee un byte del flujo de entrada y lo almacena en el byte apuntado. "[" - Avanza a la instrucción inmediatamente posterior al ] correspondiente si el byte actualmente apuntado es nulo (si es 0). "]" - Retrocede a la instrucción inmediatamente posterior al [ correspondiente si el byte actualmente apuntado no es nulo (si es distinto de 0). Lo que no logro entendes es como sólo con 8 instrucciones se puede crear un "Hola Mundo" ¿donde empieza para sacar la "H"? ¿Como sabe el programa que tiene que mostrarlo por pantalla? Alguien me podría explicar el código ¿? Gracias de antemano :) Título: Re: Duda Brainfuck Publicado por: Eleкtro en 2 Julio 2015, 13:51 pm Lo que no logro entendes es como sólo con 8 instrucciones Citar Código: "[" - Avanza a la instrucción inmediatamente posterior al ] correspondiente si el byte actualmente apuntado es nulo (si es 0). Esos son los operadores que hacen posible un loop y simplifican (dentro de lo que cabe) el código para que no sea tan... repetitivo (dentro de lo que cabe también, por que vaya tela con este lenguaje...). Peores cosas se pueden ver cómo un loop en el lenguaje 2L: https://esolangs.org/wiki/2L En fin, este código asigna 7 celdas de memoria a las que le asigna un valor inicial de 0 a cada una, y con el búcle le va asignando distintos valores a cada celda, valores que corresponden a la tabla de caracteres ASCII. Código: ++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++. Cuando termina el búcle aquí: Código: ++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-] Estas son las celdas y el valor de cada celda: Celdas : 0 1 2 3 4 5 6 Valores: 0 0 72 104 88 32 8 Despues de eso, el resto del código simplemente va moviendo el puntero de una celda a otra, incrementando o disminuyendo su valor. Código: >>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++. La celda 2 contiene un 72, que equivale a una H. La celda 3 contiene un 104, al que se le substrae 3, dando 101, que equivale a una e. despues, se le incrementa el valor para obtener l, l, y o. (http://www.asciitable.com/index/asciifull.gif) Y ese tipo de operaciones sucesivamente... Creo que más o menos es algo así la forma en la que trabaja. Aquí lo explican detalladamente: https://esolangs.org/wiki/Brainfuck (http://i.imgur.com/J45CbcI.png) Saludos. Título: Re: Duda Brainfuck Publicado por: Spectatorem en 2 Julio 2015, 19:52 pm Mier.da!! Estas bien demente para entender esto Elektro xD
Título: Re: Duda Brainfuck Publicado por: engel lex en 2 Julio 2015, 20:09 pm Mier.da!! Estas bien demente para entender esto Elektro xD se llega un momento que uno aprende estas locuras por ocio, tambien ayudan a aprender a pensar :P por un tiempo estuve programando en eso XD Título: Re: Duda Brainfuck Publicado por: Spectatorem en 2 Julio 2015, 21:16 pm se llega un momento que uno aprende estas locuras por ocio, tambien ayudan a aprender a pensar :P por un tiempo estuve programando en eso XD No te sangraron los ojos, los oidos por último? :xD Título: Re: Duda Brainfuck Publicado por: ivancea96 en 2 Julio 2015, 23:11 pm Realmente si lo pensáis, es un lenguaje muy, muy simple. Hay 1 puntero a una memoria inicializada toda a ceros. Solo hay operaciones para incrementar el puntero, incrementar el byte apuntado, leer y sacar por pantalla.
ASM es mucho más complejo jajaja (decenas de veces más complejo) Título: Re: Duda Brainfuck Publicado por: Baal_30 en 3 Julio 2015, 17:44 pm Pero... entonces ¿sólo se puede mostrar carácteres por pantalla con ese lenguaje? ¿No sirve para nada más? Porque no entiendo como se puede hacer un while, o un Scanner con esto... :/
PD: Muchas gracias por la explicacion Elektro ^^ Título: Re: Duda Brainfuck Publicado por: ivancea96 en 3 Julio 2015, 18:32 pm Un while se hace con [] como dijo Elektro.
Es un lenguaje esotérico bastante limitado, pese a que hay gente que hace barbaridades con él xD No fue ideado para ser un lenguaje para desarrollar aplicaciones xD Título: Re: Duda Brainfuck Publicado por: Eleкtro en 3 Julio 2015, 18:34 pm Pero... entonces ¿sólo se puede mostrar carácteres por pantalla con ese lenguaje? ¿No sirve para nada más? Mostrar caracteres es solo una manera de interpretar los bytes, los valores asignados a cada celda. Es un lenguaje muy extravagante, ¿para que más esperas que se utilice comunmente si no es para saciar la curiosidad de representar un texto? xD. no entiendo como se puede hacer un while El loop de tipo while se hace con los símbolos [, y ], cómo ya he comentado. Aquí tienes una IDE que incluye un generador automático de código brainfuck para cualquier cadena de texto: http://4mhz.de/bfdev.html Saludos! Título: Re: Duda Brainfuck Publicado por: engel lex en 3 Julio 2015, 20:16 pm teoricamente es tambien una maquina turing completa, por ese principio, hacer una aplicación seria infinitamente dificil
|