¿Qué se puede programar con Ni?


Una pregunta que me han hecho algunas personas que no conocen los esolenguajes es esa, técnicamente es posible programar cualquier algoritmo con Ni.

Sin embargo, no suele ser tan sencillo como en lenguajes de programación de alto nivel como C, C++, Python, Javascript, etc. Es muy difícil comprender cómo hacer un programa si no tienes las facilidades de los lenguajes de programación modernos, sin embargo, no es imposible.

Recordemos que Ni deriva de Brainfuck, por tanto su funcionamiento es similar a una Máquina de Turing.

Veamos, en Ni solo se puede insertar números en celdas, incrementarlas o disminuirlas en 1, entonces, si queremos que un programa haga una suma de números enteros, sin la función suma no la vemos posible al inicio. ¿Seguro?

Si nosotros colocamos en 2 celdas los números que deseamos sumar, tal cual sería:
#5>#4
La instrucción # inserta un número hexadecimal en la celda, por tanto, en este código, insertamos 5 en la celda inicial (0), luego se mueve a la derecha e inserta 4 en la celda (1).

Bien, ya insertamos número, ahora, con las instrucciones +,- podemos incrementar o disminuir valores en las celdas, entonces ¿Cómo sumamos?
{<+>}
la instrucción {} sirve para repetir el bloque de código el número de veces que la celda apuntada indica, entonces, si nos encontramos en la celda 1, su valor es 4, se repetirá 4 veces, irá a la izquierda (celda 0), incrementará 1 su valor, y se regresa a la celda 1. Al repetirse 4 veces la celda 0 se incrementará 4 veces, ejerciendo la suma de los dos números. Luego:
<.
Al terminar el ciclo de {} el puntero se queda en la celda 1, pero el resultado se ubica en la celda 0, entonces nos movemos a la izquierda y con la instrucción . imprimimos el número. El resultado será 9.

El código completo:
#5 /Colocamos el número 5 en la celda 0
> /Se mueve a la celda 1
#4 /Coloca el número 4 en la celda 1
{ /Ejecuta 4 veces el siguiente codigo
< / Se regresa a la celda 0
+ / Incrementa la celda en 1
> /Se regresa a la celda 1
}
< /Se regresa a la celda 0
. /Imprime el resultado.
Puedes colocar cualquier número que desees, la suma se realizará.

Entonces, si se puede sumar, también debería poder restar. Basta con cambiar la instrucción + por -, pero, ¿Se puede multiplicar?

Claro que sí, multiplicar es sumar N veces un número, es decir, 2x3 = 2+2+2 o 3+3, si podemos sumar, podemos multiplicar, por tanto también dividir, calcular potencia, raíces, etc. Aunque la complejidad para realizar esas operaciones aumenta.

Esto es lo divertido y curioso de Ni como esolenguaje, te invita a realizar cálculos desde su forma mas básica.

Hagamos algo mas complejo, el cálculo de factorial.

Muchos ya tenemos casi memorizado cómo calcular el factorial con un método recursivo, sin embargo, en Ni ni siquiera hay métodos o funciones, pero hay otras formas no recursivas que permiten realizar el cálculo.
#9 /insertamos el numero a calcular factorial

( /Si la celda insertada vale 0 (clipboard vale 0 al inicio)
#1 /insertamos el valor 1
. /imprime el resultado 1
* /limpia la celda, pasa a valer 0
)
[ /Si la celda no vale cero ejecuta, (se usa como pseudo "else")
? /lo copiamos
>=- /lo pegamos en la siguiente celda y le restamos 1
[ /Si la celda no vale cero
-<{ /ejecuta la suma de sumas (multiplicacion)
>{<+>}< /ejecuta la suma
}
>
]
<. /imprime el resultado
* /limpia la celda para romper el ciclo
]
Puedes insertar cualquier número hexadecimal y realizará el cálculo, pero toma en cuenta que en Ni será mas lento a medida que aumentamos el número, porque la cantidad de cálculos a realizar es mucho mayor.

En fin, Ni es un lenguaje que te invita a usar la lógica, a aplicar algoritmos desde lo mas básico, es desafiante crear programas que funcionen, incluso los mas simples.

¿Puedes crear un programa que calcule los números Fibonacci?

Estoy seguro que sí. ¡Inténtalo!