¡Es hora de que implemente mi nuevo lenguaje basado en pila! Se llama StackyMath. Este será un lenguaje basado en la pila con 8 operaciones en la pila y formas de agregar números a la pila.
Lista de operaciones:
/: División. Realizado en los 2 primeros números de la pila. Empuja el resultado nuevamente en la pila.*: Multiplicación. Realizado en los 2 primeros números de la pila. Empuja el resultado nuevamente en la pila-: Resta. Realizado en los 2 primeros números de la pila. Empuja el resultado nuevamente en la pila+: Además. Realizado en los 2 primeros números de la pila. Empuja el resultado nuevamente en la pila^: Exponenciación. Realizado en los 2 primeros números de la pila. Empuja el resultado nuevamente en la pila%: Modulo. Realizado en los 2 primeros números de la pila. Empuja el resultado nuevamente en la pila!: Factorial. Realizado en el número superior en la pila. Empuja el resultado nuevamente en la pilaD: Duplica el número superior en la pila
Operaciones definidas en pseudocódigo:
/:push(pop divided by pop)*:push(pop times pop)-:push(pop minus pop)+:push(pop plus pop)^:push(pop to the pop)%:push(pop mod pop)!:push(factorial pop)D:t = pop; push(t); push(t)
Cómo empujar números a la pila:
Agregar números a la pila es fácil, solo coloque el número sin procesar en su programa donde lo necesite. Si necesita poner varios números en la pila, puede separarlos con una coma ( ,). Su programa no necesitará procesar -números en la entrada. Si el usuario quiere uno, debe presionar el número que quiere negado, cero y -. Los números en la entrada del programa también están restringidos a enteros positivos.
Entrada:
Su programa debe tomar la entrada en la línea de comando, o desde la entrada estándar. La entrada solo consistirá en números (sin notación científica o decimales) delimitados según ,sea necesario, y las operaciones definidas anteriormente.
Salida:
Su programa debe imprimir el número en la parte superior de la pila.
Casos de error:
- Si el programa intenta sobrecargar la pila, debe imprimir
StackUnderflowException!!!. - Si tiene división por cero, imprima
DivisionByZeroException!!! - Si un número que excede los 64 bits, ya sea mientras ejecuta el programa o procesa un número en la entrada, imprima
NumberOverflowException!!! - Si de alguna manera obtienes un número negativo en la parte superior de la pila y necesitas hacer un factorial, imprime
NegativeFactorialException!!! - Si tiene un número de coma flotante en la parte superior de la pila y la siguiente operación es factorial, imprima
FloatingFactorialException!!! - Si no hay números en la pila cuando el programa sale (es decir, el programa estaba vacío) imprimir
EmptyProgram!!!
Notas:
- Toda salida de error debe tener su error estándar o el equivalente más cercano.
- Todos los números están restringidos a coma flotante de 64 bits.
Programas de ejemplo:
50,47* -> 2350
50,47/ -> 0.94
100,8! -> 40320
100D* -> 10000
! -> StackUnderflowException!!!
5,2/! -> FloatingFactorialException!!!
4,3!2*/ -> 3
654,489,48,43/5*7D+-*% -> 77.68749999999909
-> EmptyProgram!!!
(Puedo agregar más si es necesario)
fuente

!aF).654,489,48,43/5*7D+-*%Debería volver77.6875. (43/48*5-(7+7)debería ser(7+7)-43/48*5)Respuestas:
Ruby,
412410404392380377 caracteresEsta es una versión de precisión regular usando
Float. La precisión del resultado es como en el código de muestra, pero la detección numérica de desbordamiento no es exacta.Ejecución de muestra:
Ruby,
378377 caracteresEsta es una versión de alta precisión utilizando
Rational. La precisión del resultado no siempre es la misma que en el código de muestra, pero la detección numérica de desbordamiento es exacta.Ejecución de muestra:
fuente
JavaScript (ES6), 430 bytes
422 bytes con ES7 cambiando
Math.pow(2,2)a2**2Explicación
Usos
evalpara reemplazar ciertas frases comunes. Sin golf y sin elevalse ve así:fuente
Math.pow(p(),p())conp()**p().Groovy, 718 bytes. ¡Delantero!
También podría publicar mi impl golf. Conoce mi gran muro de código:
Sin golf:
Edición 1: ahorre ~ 15 bytes gracias a @Doorknob
Edición 2: elimine ~ 130 bytes con algunos trucos más
fuente
for/if, etc.System.in.textlugar deSystem.in.newReader().readLine()..textes codicioso y mientras los datos ingresen en el lector, no volverá.Caramelo ,
298348392 bytesAunque Candy está basado en la pila, no estoy seguro de que realmente haya ayudado ...
Formateado un poco revela un poco de estructura:
La matemática real ocurre en las últimas dos líneas. Lo conduce una mesa de salto en la tercera línea.
fuente