Tutorial de programación en Ni


Ni es un esolenguaje de programación que inventé, inspirado en brainfuck. En el artículo anterior hablé sobre él sin embargo en este voy a explicar cómo programar en Ni.

Para poder programar en Ni debes primero saber cómo funciona, Ni funciona con una cinta virtual, esto no es mas que un array, entonces la cinta tiene celdas que almacenan datos, parecido a un Cassette de película, tiene un cabezal o puntero que puede leer o escribir en la cinta. El cabezal se mueve de izquierda a derecha según el script indique.

Entonces al iniciar el script el cabezal se ubica en la celda 0, todas las celdas se inicializan en 0 también. Estas pueden almacenar números enteros.

Ejecución de Ni


Ni puede ejecutar en Windows y Linux.

Puedes decargar Ni aquí: https://github.com/DeybisMelendez/ni/releases

En Windows solo necesitas colocar el .exe junto a tu script y con el CMD ejecutar "ni tucodigo.ni".

En Linux solo necesitas colocar el archivo ni junto a tu script, abrir la terminal y ejecutar "./ni tucodigo.ni"

Instrucciones

"."

Vamos a comenzar con la instrucción ".", si creamos el archivo y solo colocamos "." sin las comillas, al ejecutar va a imprimir 0.

Si colocamos varias veces el "." va a imprimir varias veces 0, esto es porque la instrucción "." imprime el valor que contiene la celda que estamos apuntando, recuerda, al iniciar, el cabezal apunta a la celda cero, y se inicia en cero.

Entonces estamos imprimiento el valor de la celda cero.

"+"

Esta instrucción lo que hace es sumar uno a la celda apuntada, es decir, si en el script ponemos "+." va a imprimir uno.

Si colocamos varias veces "+" y luego ., va a imprimir el resultado de sumar todas las veces y luego imprimirá el resultado.

"-"

Lo contrario de "+", en lugar de sumar, resta uno. Si ponemos en el script "+-." va a imprimir cero, porque primero suma uno y luego resta uno.

">"

Esta instrucción mueve el cabezal a la derecha, si ponemos en el script "+.>." Va a imprimir 10, porque primero imprime el valor de la celda cero, luego se mueve a la celda derecha, que sería la celda uno, y como las celdas inician en cero, entonces imprime cero.

Si ejecutas un script con "+++.>++.>+.>." el resultado será 3210, porque cada vez que se mueve el cabezal su celda inicia en cero y las sumas no interfieren entre celdas.

"<"

Al contrario de ">", en lugar de moverse a la derecha, se moverá a la izquierda. Esto quiere decir que si ejecutamos "+++>++>+>.<.<.<." imprimirá 0123.

"@"

Esta instrucción lee un caracter, es el equivalente read() en otros lenguajes de programación, Ni solo reconoce el primer caracter que escribas. El caracter se convierte a su equivalente número ASCII, por ejemplo, el cero sería 48, el salto de línea sería el 10, etc. Es mejor consultar la tabla ASCII para programar con Ni.

El número resultante se almacena en la celda apuntada. Por ejemplo, si ejecutas "@." te va a imprimir el equivalente número ASCII del primer caracter que escribas.

"!"

Muchos esolenguajes solo manejan una instrucción de salida, Ni maneja dos, esta instrucción imprime el caracter equivalente ASCII de la celda apuntada.

Esto quiere decir que si ejecutamos "@!" nos va a imprimir el mismo caracter que escribamos.

"[]"

Estas instrucciones son el bucle while, todo lo que contenga se ejecutará en bucle, al iniciar cada ciclo si la celda apuntada es cero, el bucle se rompe y continúa a la siguiente instrucción.

Esto quiere decir que si ejecuto solamente "[.]" no pasará nada, ya que el bucle se rompe en el inicio del ciclo, pero si ejecutamos "+[.]" pasaremos a un bucle infinito que imprimirá cero.

Para detener la ejecución presiona Ctrl+C dos veces.

"#"

Esta instrucción almacena un número hexadecimal de dos dígitos desde el código, esto es así para facilitar la impresión de cadenas de texto principalmente.

Por ejemplo, ya podemos imprimir el Hola Mundo!:

#48!#6f!#6c!#61!#20!#4d!#75!#6e!#64!#6f!#21!#0a!

La estructura del código es: (# HexCode !), Coloca el valor hexadecimal en la celda, imprime su equivalente ASCII...

"?"

Ni maneja un "portapapeles", como una variable global, es decir, puedes copiar el valor de la celda y recuperarla en cualquier momento.

"="

Pega el valor copiado en la celda apuntada.

Por ejemplo, "#48?>=." Esto primero almacena el valor hexadecimal 48 en su equivalente decimal 72 en la celda cero, la copia, se mueve la celda uno, pega el valor copiado (72) en la celda uno, luego imprime. El resultado es 72.

"*"

Pasa el número de la celda apuntada a cero, esto puede ser útil para algúnos scripts con bucle infinito.

"$"

Esta instrucción envía el cabezal a la celda que se indique con 4 dígitos hexadecimal, Ni maneja un total de 65536 celdas, es decir que va desde 0000 hasta ffff.

"{}"

Este es el equivalente For en Ni, ejecuta el bloque el número que contiene la celda apuntada, es decir, que si la celda tiene 10, el bloque se ejecutará solo 10 veces.

"()"

Esta instrucción es el equivalente If, si la celda apuntada es igual al clipboard entonces ejecuta las instrucciones que contenga.

"/"

Esta instrucción hace que Ni ignore el resto de la línea, sirve para comentar el código.

Ahora ya puedes programar en Ni, ¿O no?.

Puedes contribuir a Ni creando código que resuelva problemas comunes, desde tu propio Hola mundo hasta uno que imprima los números de Pi, si quieres contribuir pasa al enlace: https://github.com/DeybisMelendez/ni

Puedes revisar el artículo de Ni en esolangs.org: https://esolangs.org/wiki/Ni

También he creado un servidor en Discord sobre este esolenguaje: https://discord.gg/dxYxZs5