Perfección / Imperfección
Menos mal, eso fue divertido.
La perfección / imperfección solo se completa si hay infinitos números perfectos. Si las hay, se llama Perfección, y si no las hay, se llama Imperfección. Hasta que se resuelva este misterio, tiene ambos nombres.
Un número perfecto es un número cuyos divisores suman el número, entonces seis es un número perfecto porque 1+2+3=6
.
La perfección / imperfección tiene las siguientes funciones:
La perfección / imperfección se basa en la pila, con una pila de índice cero.
Comandos:
p(x, y)
: empuja x a la pila en la posición y.
z(x, y)
: empuja x a la pila en la posición y, se deshace de lo que estaba previamente en la posición
r(x)
: elimina el elemento x de la pila
k(x)
: devuelve el elemento xth en la pila
a(x, y)
: agrega x e y. Cuando se usa con cadenas, las pone en orden xy.
s(x, y)
: resta y de x. con cadenas, elimina la última len (y) de x
m(x, y)
: multiplica x e y. Si se usa con cadenas, multiplica x veces len y.
d(x, y)
: divide x por y
o(x)
: imprime x
i(x, y)
: si x se evalúa como verdadero, entonces ejecuta la función y
n()
: devuelve el contador en el que se invoca el bloque de código.
q()
: devuelve la longitud de la pila
t()
: entrada del usuario
e(x, y)
: Si x es un número entero, si x e y tienen el mismo valor, entonces devuelve 1. si y es una cadena, entonces obtiene la longitud de y. si x es una cadena, convierte y en una cadena y comprueba si son iguales, y si lo son, devuelve 1. De lo contrario, devuelve 0.
l(x, y)
: si x es mayor que y, entonces devuelve 1. Si hay una cadena, entonces usa la longitud de la cadena.
b()
: detiene el programa.
c(x, y)
: ejecuta x, luego y.
Para obtener el equivalente de un Python and
, multiplique los dos valores juntos. Para or
, agregue los valores y paranot
, reste el valor de 1. Esto solo funciona si el valor es 1 o 0, lo que se puede lograr dividiendo el número por sí mismo.
Tipos de datos: enteros y cadenas. Las cadenas se denotan por ''
, y todos los números no enteros se redondean.
Sintaxis:
El código consta de funciones anidadas dentro de diez {}
s. Por ejemplo, un programa que llegaría a los insumos y los imprime añaden sería: {o(a(t(), t()))}
. En el fondo del programa hay un contador que comienza en 0 y progresa en 1 cada vez que ejecuta un bloque de código. El primer bloque de código se ejecuta en 0
, y así sucesivamente. Una vez que se ejecutan los diez bloques de código, el sexto se ejecuta cada vez que el contador alcanza un número perfecto. No necesita tener los diez bloques de código para que el programa funcione, pero necesita 7 si desea hacer un bucle. Para entender mejor cómo funciona este lenguaje, ejecute el siguiente programa, que imprime el contador cada vez que el contador llegue a un número perfecto: {}{}{}{}{}{}{o(n())}
.
El intérprete se puede encontrar aquí: repl.it/GL7S/37 . Seleccione 1 y escriba su código en la terminal, o pegue su código en la code.perfect
pestaña y seleccione 2 cuando ejecute. Tendrá sentido cuando lo intentes.
Prueba de integridad de Turing / falta de integridad de Turing.
De acuerdo con este artículo de intercambio de pila de ingeniería de software , un Turing completo debe poder tener una forma de repetición condicional de salto y tener una forma de leer o escribir memoria. Puede leer / escribir memoria en forma de pila, y puede hacer un bucle debido al hecho de que el sexto bloque de código se ejecuta cada vez que el contador alcanza un número perfecto. Si hay un número infinito de números perfectos, puede repetirse indefinidamente y está completando Turing, y de lo contrario no lo está.
Intérprete de etiqueta cíclica bit a bit que toma 5 caracteres, 1 o 0, como entrada:
{p(t(),0)}{(p(t(),0)}{p(t(),0)}{p(t(),0)}{p(t(),0)}{p(0,0)}{c(i(e(k(s(q(),k(0))),0),c(r(q()),i(l(k(0),0),z(s(k(0),1),0)))),i(e(k(s(q(),k(0))),1),c(z(a(k(0),1),0),i(e(k(q()),1),p(k(s(q(),k(0))),1)))))}
Se puede expandir para tomar cualquier número de caracteres como entrada. ¡Podría tomar una entrada infinita, pero solo si hay números perfectos infinitos!