elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Duda Brainfuck
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda Brainfuck  (Leído 2,259 veces)
Baal_30

Desconectado Desconectado

Mensajes: 248



Ver Perfil
Duda Brainfuck
« en: 2 Julio 2015, 13:06 »

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
  1. ++++++++++
  2. [
  3.   >+++++++>++++++++++>+++++++++++>+++>+< <<<<-
  4. ]
  5. >++.
  6. >>+.
  7. -.
  8. <-.
  9. >>++.
  10. < +.
  11. ++++++++.
  12. ———-.
  13. <+++.
  14. >+.
  15. >+.
  16. >.

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 :)


En línea

«La suerte es el cuidado de los detalles». -Winston Churchill
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: Duda Brainfuck
« Respuesta #1 en: 2 Julio 2015, 13:51 »

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).
"]" - Retrocede a la instrucción inmediatamente posterior al [ correspondiente si el byte actualmente apuntado no es nulo (si es distinto de 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.



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



Saludos.


« Última modificación: 2 Julio 2015, 14:15 por Eleкtro » En línea


Spectatorem

Desconectado Desconectado

Mensajes: 55



Ver Perfil
Re: Duda Brainfuck
« Respuesta #2 en: 2 Julio 2015, 19:52 »

Mier.da!! Estas bien demente para entender esto  Elektro xD
En línea

engel lex
CoAdmin
***
Desconectado Desconectado

Mensajes: 15.347



Ver Perfil
Re: Duda Brainfuck
« Respuesta #3 en: 2 Julio 2015, 20:09 »

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
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Spectatorem

Desconectado Desconectado

Mensajes: 55



Ver Perfil
Re: Duda Brainfuck
« Respuesta #4 en: 2 Julio 2015, 21:16 »

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
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.410


ASMático


Ver Perfil WWW
Re: Duda Brainfuck
« Respuesta #5 en: 2 Julio 2015, 23:11 »

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)
En línea

Baal_30

Desconectado Desconectado

Mensajes: 248



Ver Perfil
Re: Duda Brainfuck
« Respuesta #6 en: 3 Julio 2015, 17:44 »

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 ^^
En línea

«La suerte es el cuidado de los detalles». -Winston Churchill
ivancea96


Desconectado Desconectado

Mensajes: 3.410


ASMático


Ver Perfil WWW
Re: Duda Brainfuck
« Respuesta #7 en: 3 Julio 2015, 18:32 »

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
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: Duda Brainfuck
« Respuesta #8 en: 3 Julio 2015, 18:34 »

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!
« Última modificación: 3 Julio 2015, 18:37 por Eleкtro » En línea


engel lex
CoAdmin
***
Desconectado Desconectado

Mensajes: 15.347



Ver Perfil
Re: Duda Brainfuck
« Respuesta #9 en: 3 Julio 2015, 20:16 »

teoricamente es tambien una maquina turing completa, por ese principio, hacer una aplicación seria infinitamente dificil
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines