Eu vejo seu BIDMAS e levanto um BADMIS
Desafio
Dado um conjunto de números com operadores entre eles: "5 + 4 * 9/3 - 8", retorne todos os resultados possíveis da expressão para cada permutação da ordem das operações básicas: [/, *, +, -].
Regras
- Lacunas padrão proibidas
- I / O
- A entrada deve ser ordenada com operações de infix, mas, no entanto, é mais fácil (sequência ou matriz)
- Você não é obrigado a oferecer suporte a operadores unários (por exemplo, "-3 * 8 / +2")
- Os números inteiros podem ser substituídos por números flutuantes para idiomas que analisam implicitamente o tipo (por exemplo, 45 ⟶ 45.0)
- A saída deve conter todos os resultados possíveis da expressão, sem formato ou ordem especificados
- Todas as entradas são válidas (por exemplo, não é necessário lidar com "7/3 + *"). Isso também significa que você nunca precisará dividir por zero.
- Os operadores são todos associativos à esquerda, então "20/4/2" = "(20/4) / 2"
- Este é o Code Golf, o menor número de bytes ganha
Casos de teste (com explicação)
- "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 teste (sem explicação)
- "45/8 + 19/45 * 3" = [6.891666666666667, 18.141666666666666, 0.1111111111111111113, 0.01234567901234568, 0.01234567901234568, 5.765740740740741]
- "2 + 6 * 7 * 2 + 6/4" = [112 196 23 87,5]
code-golf
permutations
Freddie R
fonte
fonte
2 - 3 + 4
=>[-5, 3]
2*3-6+2-9/6*8+5/2-9
fornecendo 24 resultados distintos.Respostas:
JavaScript (V8) ,
118112 bytesImprime os resultados.
Experimente online!
Ou veja os resultados deduplicados .
fonte
C # (compilador interativo do Visual C #) , 285 bytes
Experimente online!
fonte
JavaScript (Node.js) , 132 bytes
Experimente online!
Isso permite saídas duplicadas.
JavaScript (Node.js) ,
165161155153152137 bytesExperimente online!
Utiliza uma string com espaços entre operadores e números.
fonte
[3, -5]
agora.Perl 6 ,
92 9088 bytesExperimente online!
Pega uma string com um espaço após qualquer operador e retorna um conjunto de números. Isso funciona principalmente substituindo todas as instâncias de
n op n
resultado avaliado por todas as permutações dos operadores.Explicação:
fonte
set
, pois a condição para eliminar duplicatas foi removida. Código legal.Python 3 , 108 bytes
Experimente online!
A função usa uma única string como entrada e retorna uma lista de resultados possíveis.
Ungolfed
Experimente online!
fonte
Gelatina , 30 bytes
Experimente online!
Um par de links. O segundo é o link principal e toma como argumento uma lista Jelly de flutuadores / números inteiros intercalados com os operadores como caracteres. Esta é uma versão simplificada da maneira como o Jelly recebe sua entrada quando executado como um programa completo com argumentos de linha de comando. O valor de retorno do link é uma lista de listas de listas de membros únicos, cada uma das quais é um valor possível para a expressão.
Explicação
Link auxiliar
Leva uma lista de números flutuantes / números inteiros alternando com operadores (como caracteres) como argumento à esquerda e operador como caractere como argumento à direita; retorna a lista de entrada após avaliar os números separados pelo operador relevante, trabalhando da esquerda para a direita.
Link principal
Leva uma lista de números flutuantes / números inteiros alternando com operadores (como caracteres)
fonte
Python 2 ,
182172 bytesExperimente online!
Recebe entradas com entradas formatadas como flutuadores, conforme "Inteiros podem ser substituídos por flutuadores para idiomas que analisam implicitamente o tipo".
fonte
Julia 1.2 , 88 (82) bytes
Pega uma fita na forma de um vetor de números e funções infix, avalia cada chamada de função e recursivamente passa cada fita resultante de volta para si mesma até restar apenas um número. Infelizmente,
get(t, (), ...)
não funciona corretamente na Julia 1.0, portanto, é necessária uma versão mais recente.Seis bytes podem ser salvos, se um monte de matrizes aninhadas for aceitável como saída:
Saída:
fonte
Perl 5 (
-alp
), 89 bytesTIO
ou valores únicos, 99 bytes
fonte