Introducción:
Echemos un vistazo a una calculadora estándar en Windows:
para este desafío, solo veremos los siguientes botones e ignoraremos todo lo demás:
7 8 9 /
4 5 6 *
1 2 3 -
0 0 . +
Desafío:
Entrada:
Recibirá dos entradas:
- Uno es algo para indicar la rotación en incrementos de 90 grados
- La otra es una lista de coordenadas que representan los botones presionados en la calculadora girada.
Según la primera entrada, giramos el diseño mencionado anteriormente en el sentido de las agujas del reloj en incrementos de 90 grados. Entonces, si la entrada es 0 degrees
, permanece como está; pero si la entrada es 270 degrees
, se rotará tres veces en sentido horario (o una vez en sentido antihorario). Aquí están los cuatro diseños posibles:
Default / 0 degrees:
7 8 9 /
4 5 6 *
1 2 3 -
0 0 . +
90 degrees clockwise:
0 1 4 7
0 2 5 8
. 3 6 9
+ - * /
180 degrees:
+ . 0 0
- 3 2 1
* 6 5 4
/ 9 8 7
270 degrees clockwise / 90 degrees counterclockwise:
/ * - +
9 6 3 .
8 5 2 0
7 4 1 0
La segunda entrada es una lista de coordenadas en cualquier formato razonable † . Por ejemplo (0-index 2D integer-array):
[[1,2],[2,3],[0,3],[1,0],[1,1]]
Salida:
sacamos tanto la suma como el resultado (y un signo igual =
).
Ejemplo:
Entonces, si la entrada es 270 degrees
y [[1,2],[2,3],[0,3],[1,0],[1,1]]
, la salida se convertirá en:
517*6=3102
Reglas de desafío:
- † Las entradas pueden estar en cualquier formato razonable. La primera entrada puede ser
0-3
,1-4
,A-D
,0,90,180,270
, etc. La segunda entrada puede ser una matriz de 0 indexados 2D, array 1 indexadas-2D, una cadena, lista de Point-objetos, etc. Su llamada. Incluso es posible intercambiar las coordenadas x e y en comparación con las entradas de ejemplo proporcionadas. ¡Indique qué formatos de entrada ha utilizado en su respuesta! - Se le permite agregar espacios (es decir
517 * 6 = 3102
) si lo desea. - Se le permite agregar ceros finales después de la coma, hasta un máximo de tres (es decir,
3102.0
/3102.00
/ en3102.000
lugar de3102
o en0.430
lugar de0.43
). - No está permitido agregar paréntesis en la salida, por
(((0.6+4)-0)/2)/4=0.575
lo que no es una salida válida. - Puede utilizar otros símbolos de operando para su idioma. Entonces
×
o en·
lugar de*
; o en÷
lugar de/
; etc. - Dado que una calculadora calcula automáticamente al ingresar un operando, ¡debe ignorar la precedencia del operador! Entonces
10+5*3
dará como resultado45
((10+5)*3=45
), no25
(10+(5*3)=25
)
(es decir,10
→+
→5
→*
(ahora muestra 15 en la pantalla) →3
→=
(ahora muestra la respuesta45
)). Tenga esto en cuenta cuando useeval
funciones similares en la suma resultante. - No habrá casos de prueba para la división por 0.
- No habrá casos de prueba con más de tres dígitos decimales como resultado, por lo que no es necesario redondear el resultado.
- No habrá ningún caso de prueba en el que varios operandos se sigan, o donde dos puntos se sigan.
- No habrá casos de prueba para números negativos. El signo menos (
-
) solo se usará como operando, no como negativo. - No habrá ningún caso de prueba
.##
sin un número inicial antes de la coma (es decir2+.7
, no será un caso de prueba válido, pero2+0.7
podría serlo).
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de code-golf lo desanimen a publicar respuestas con lenguajes que no sean codegolf. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Se aplican reglas estándar para su respuesta, por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados, programas completos. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código.
- Además, agregue una explicación si es necesario.
Casos de prueba:
Input: 270 degrees & [[1,2],[2,3],[0,3],[1,0],[1,1]]
Output: 517*6=3102
Input: 90 degrees & [[3,1],[0,0],[0,1],[3,3],[2,0],[0,3],[0,0],[0,2],[3,0],[2,1]]
Output: 800/4+0.75=200.75
Input: 0 degrees & [[0,0],[1,0],[2,0],[3,0],[1,2],[2,1],[2,2]]
Output: 789/263=3
Input: 180 degrees & [[3,0],[1,0],[1,2],[0,0],[3,2],[0,1],[2,0],[0,3],[2,1],[0,3],[3,2]]
Output: 0.6+4-0/2/4=0.575
fuente
1+-*/+-*/2
will da0.5
en la calculadora de Windows (10).[1,3],
2+.7
?Respuestas:
SOGL V0.12 ,
706967 bytesPruébelo aquí , o pruebe una versión que toma entradas como se indica en los casos de prueba
usa el
I
operador SOGL , que gira la matriz. Luego lee una cadena como una matriz de JavaScript y, cuando se utiliza una operación, encierra el resultado anterior entre paréntesis, evalúa como JavaScript y luego elimina los paréntesis.fuente
Dyalog APL,
94888685 bytesPruébalo en línea!
Toma las rotaciones como argumento izquierdo
0-3
, y los índices basados en 1 como argumento derecho, como una lista dey x
coordenadas, como(1 1)(2 3)(4 5)
etc.Esto se volvió bastante complicado debido a la evaluación diestra de las expresiones en APL.
fuente
C (gcc) , 282
294295296300304306 310bytesTodas las optimizaciones deben desactivarse y solo funcionan en GCC de 32 bits.
1 byte gracias a @Orion!
Pruébalo en línea!
Prototipo de la función:
Formato de entrada (como en TIO):
Versión sin golf con comentarios:
El código puede manejar casos como
1+.7
o-8*4
.Muy triste C no tiene un
eval
😭.fuente
3*-5
inválidos. He especificado esto en las reglas.double
confloat
un byte libre. Además, ¿no esputc()
idéntico aputchar()
? Sin embargo, podría estar equivocado.putc
necesita un segundo argumento para especificar en qué transmisión está escribiendo?JavaScript (ES6),
162160157 bytesToma la entrada como orientación
o
y matriz de coordenadas (y, x)a
en la sintaxis de curry(o)(a)
.La orientación es un número entero en [0..3] :
Casos de prueba
Mostrar fragmento de código
fuente
Rubí ,
135 133132 bytesPruébalo en línea!
Orientación como entero: 0 para 0 °, 1 para 90 ° y así sucesivamente.
fuente
Python 3,
235234230 bytesUn poco feo, pero funciona para todos los casos de prueba, excepto el primero, que no parece coincidir con la calculadora de ejemplo. Tomo la rotación como 0-3 (0-270) y multiplico por 16 para compensar.
eval()
es una función integrada que intenta compilar cadenas como código y maneja la conversión de los símbolos de texto a operadores.Método alternativo, resultó un poco más largo, pero realmente me gusta este consejo SO para rotar la matriz.
fuente
Java 10,
418380 bytesDecidí responder mi propia pregunta también. Estoy seguro de que se puede jugar un poco más utilizando un enfoque diferente.
Ingrese como
int
(0-3
) yint[][]
(0-indexado / igual que en la descripción del desafío). Salida comofloat
con el interlineado.0
si el resultado es un número entero en lugar de un número decimal.Explicación:
Pruébalo aquí
fuente