Imprimiendo «GEEKS FOR GEEKS» en Brainfuck

Hace unos meses, mientras miraba el perfil de desarrollador de HackerEarth de uno de mis estudiantes de último año en la universidad, descubrí que uno de los lenguajes en su actividad de lenguaje incluía BRAINFUCK . Esto despertó mi interés, así que lo busqué en Google y, para mi sorpresa, no encontré ni un solo enlace a un artículo sobre GeeksForGeeks que estuviera en Brainfuck. De todos modos, leí un poco sobre esto en Wikiwand y LearnXinYMinutes y luego resolví mi primer problema en SPOJ , lo que me dio 0.6 puntos y aumentó mi clasificación global de 44000 a 22296 .

Desde entonces, quise escribir un artículo sobre Brainfuck en GeeksForGeeks, ya que es el primer sitio web al que los estudiantes se refieren para cualquier artículo relacionado con la programación.

Dado que es un código de escritura de lenguaje minimalista, puede ser bastante largo y debe realizar un seguimiento meticuloso de cada declaración, operación y carácter que escriba. Pone a prueba tu paciencia como programador y es absolutamente frustrante (de ahí su nombre), pero cuando obtienes la marca de aceptación, es una de las sensaciones más satisfactorias que un programador puede experimentar.

Antes de comenzar con el código real, echemos un vistazo a algunas de sus características =>

  • Es un lenguaje de programación esotérico ( Esolang )
  • Consta de solo 8 comandos que se enumeran a continuación.
  1. > incrementar el puntero de datos (para apuntar a la siguiente celda a la derecha).
  2. < disminuir el puntero de datos (para apuntar a la siguiente celda a la izquierda).
  3. + incrementar (aumentar en uno) el byte en el puntero de datos.
  4. decrementar (disminuir en uno) el byte en el puntero de datos.
  5. . emite el byte en el puntero de datos.
  6. , acepte un byte de entrada, almacenando su valor en el byte en el puntero de datos.
  7. [ si el byte en el puntero de datos es cero, en lugar de mover el puntero de instrucción hacia adelante al siguiente comando, salte hacia adelante al comando después del comando coincidente].
  8. ] si el byte en el puntero de datos es distinto de cero, entonces, en lugar de mover el puntero de instrucción hacia adelante al siguiente comando, vuelva al comando después del comando [.
  • Brainfuck almacena datos en forma de celdas de tamaño de 8 bits (las celdas son bytes).
  • En la distribución clásica, la array de celdas tiene 30 000 celdas y el puntero comienza en la celda más a la izquierda (Celda 0).
  • Para poner en práctica nuestro conocimiento recién adquirido de brainfuck, vamos a escribir un programa simple para imprimir GEEKS FOR GEEKS .

    El enfoque es simple. Primero necesitamos listar los tipos de caracteres que queremos imprimir y listar sus códigos ASCII. Luego, debemos almacenar los valores más cercanos a sus códigos ASCII en el número requerido de celdas para que podamos obtener los códigos ASCII exactos aumentando o disminuyendo esos valores de celda e imprimiendo los caracteres requeridos.

    Storage of ASCII values in different cells

    Antes de desplazarse hacia abajo y ver el código, le sugiero encarecidamente que intente escribir el código por su cuenta. Puede probar su código en este IDE: Le Brainfuck específicamente para compilar código BrainFuck.

    // You need to use https://copy.sh/brainfuck/ to run 
    // this code.
      
    /** Using different cells to store different numeric values
      * Cell 1 = 70; Cell 2 = 80; Cell 3 = 30
      * These base values can then be incremented or decremented
      * to store ASCII values of the characters we need to print */
    ++++++++++ //Cell 1 = 70(To run the loop 10 times)
    [
    >+++++++ // Cell 1 = 7*10 
    >++++++++ // Cell 2 = 8*10
    >+++ // Cell 3 = 3*10
    <<<- // Setting the pointer back to cell 0 & decrement
    ] // end of loop
      
    /**Final numeric values in each cell
       *Cell 0 = 0; Cell 1 = 70; Cell 2 = 80; Cell 3 = 30*/
      
    // Moving from Cell 0 to Cell 1
    >+.--..++++++. // Printing "GEEK"(ASCII 71, 69, 69 75)
      
    // Moving from Cell 1 to Cell 2
    >+++. // Printing "S"(ASCII 83)
      
    // Moving from Cell 2 to Cell 3
    >++. // Printing " "(ASCII 32)
      
    // Moving the pointer back to Cell 1
    <<-----. // Printing "F"(ASCII 70)
      
    //Moving from Cell 1 to Cell 2
    >----.+++. // Printing "OR"(ASCII 79, 82)
      
    // Moving from Cell 2 to Cell 3
    >. // Printing " "(ASCII 32)
      
    //Moving from Cell 3 to Cell 1
    <<+.--..++++++. //Printing "GEEK"(ASCII 71, 69, 69 75)
      
    //Moving from Cell 1 to Cell 2
    >+. //Printing "S"(ASCII 83)
    
    Output : GEEKS FOR GEEKS
    

    Aplicaciones de Brainfuck:
    1) Brainfuck no tiene muchos usos prácticos.
    2) Su creador Urban Müller diseñó brainfuck con el objetivo de implementarlo con el compilador más pequeño posible.
    3) Los lenguajes de programación esotéricos generalmente se usan para probar los límites del diseño de lenguajes de programación de computadoras, como software de arte o simplemente para la programación recreativa.

    Si quieres echar un vistazo a algunos programas más escritos en brainfuck, haz clic en este enlace .

    Problemas para practicar:
    1) BGEEK
    2) BFMUL

    Fuentes:
    Brainfuck-Wikiwand

    Este artículo es una contribución de Palash Nigam .
    ID de correo electrónico: npalash25@gmail.com

    Escriba comentarios si encuentra algo incorrecto o si tiene una versión más corta del código anterior, o si desea compartir más información sobre el tema tratado anteriormente.

    Publicación traducida automáticamente

    Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *