Veo tus BIDMAS y te crío un BADMIS
Reto
Dado un conjunto de números con operadores entre ellos: "5 + 4 * 9/3 - 8", devuelve todos los resultados posibles de la expresión para cada permutación del orden de operaciones básicas: [/, *, +, -].
Reglas
- Lagunas estándar prohibidas
- I / O
- La entrada debe ordenarse con operaciones infijadas, pero sin embargo eso es más fácil (cadena o matriz)
- No es necesario que admita operadores unarios (por ejemplo, "-3 * 8 / +2")
- Los enteros se pueden reemplazar por flotantes para los idiomas que analizan implícitamente el tipo (por ejemplo, 45 ⟶ 45.0)
- La salida debe ser todos los resultados posibles de la expresión, sin formato u orden especificado
- Todas las entradas son válidas (por ejemplo, no es necesario tratar con "7/3 + *"). Esto también significa que nunca necesitará dividir por cero.
- Todos los operadores son asociativos a la izquierda, por lo que "20/4/2" = "(20/4) / 2"
- Este es Code Golf, por lo que gana la menor cantidad de bytes
Casos de prueba (con explicación)
- "2 + 3 * 4" = [14, 20]
- 2 + (3 * 4) ⟶ 2 + (12) ⟶ 14
- (2 + 3) * 4 ⟶ (5) * 4 ⟶ 20
- "18/3 * 2 - 1" = [11, 2, 6]
- ((18/3) * 2) - 1 ⟶ ((6) * 2) - 1 ⟶ (12) - 1 ⟶ 11
- (18/3) * (2 - 1) ⟶ (6) * (1) ⟶ 6
- (18 / (3 * 2)) - 1 ⟶ (18 / (6)) - 1 ⟶ (3) - 1 ⟶ 2
- 18 / (3 * (2 - 1)) ⟶ 18 / (3 * (1)) ⟶ 6
- 18 / ((3 * 2) - 1) ⟶ 18/5 ⟶ 3.6
Casos de prueba (sin explicación)
- "45/8 + 19/45 * 3" = [6.891666666666667, 18.141666666666666, 0.11111111111111113, 0.01234567901234568, 0.01234567901234568, 5.765740740740741]
- "2 + 6 * 7 * 2 + 6/4" = [112196 23 87.5]
code-golf
permutations
Freddie R
fuente
fuente
2 - 3 + 4
=>[-5, 3]
2*3-6+2-9/6*8+5/2-9
da 24 resultados distintos.Respuestas:
JavaScript (V8) ,
118112 bytesImprime los resultados.
Pruébalo en línea!
O vea los resultados deduplicados .
fuente
C # (compilador interactivo de Visual C #) , 285 bytes
Pruébalo en línea!
fuente
JavaScript (Node.js) , 132 bytes
Pruébalo en línea!
Esto permite salidas duplicadas.
JavaScript (Node.js) ,
165161155153152137 bytesPruébalo en línea!
Toma una cadena con espacios entre operadores y números.
fuente
[3, -5]
ahora.Perl 6 ,
92 9088 bytesPruébalo en línea!
Toma una cadena con un espacio después de cualquier operador y devuelve un conjunto de números. Esto funciona principalmente sustituyendo todas las instancias de
n op n
con el resultado evaluado por todas las permutaciones de los operadores.Explicación:
fuente
set
, ya que se eliminó la condición para eliminar duplicados. Buen códigoPython 3 , 108 bytes
Pruébalo en línea!
La función toma una sola cadena como entrada y devuelve una lista de posibles resultados.
Sin golf
Pruébalo en línea!
fuente
Jalea , 30 bytes
Pruébalo en línea!
Un par de enlaces. El segundo es el enlace principal, y toma como argumento una lista Jelly de flotantes / enteros intercalados con los operadores como caracteres. Esta es una versión plana de la forma en que Jelly toma su entrada cuando se ejecuta como un programa completo con argumentos de línea de comandos. El valor de retorno del enlace es una lista de listas de miembros individuales, cada una de las cuales es un valor posible para la expresión.
Explicación
Enlace auxiliar
Toma una lista de flotantes / enteros alternando con operadores (como caracteres) como argumento izquierdo y un operador como carácter como argumento derecho; devuelve la lista de entrada después de evaluar números separados por el operador relevante, trabajando de izquierda a derecha.
Enlace principal
Toma una lista de flotantes / enteros alternando con operadores (como caracteres)
fuente
Python 2 ,
182172 bytesPruébalo en línea!
Toma datos con ints formateados como flotantes, según "Los enteros pueden reemplazarse por flotantes para idiomas que implícitamente analizan el tipo".
fuente
Julia 1.2 , 88 (82) bytes
Toma una cinta en forma de un vector de números y funciones de infijo, evalúa cada llamada de función individual y pasa recursivamente cada cinta resultante de vuelta a sí misma hasta que solo quede un solo número. Desafortunadamente,
get(t, (), ...)
no funciona correctamente en Julia 1.0, por lo que se necesita una versión más nueva.Se pueden guardar seis bytes, si un conjunto de matrices anidadas es aceptable como salida:
Salida:
fuente
Perl 5 (
-alp
), 89 bytesTIO
o valores únicos, 99 bytes
fuente