Hoje, seu desafio é produzir todos os parênteses completos possíveis de uma expressão.
Sua entrada é uma única linha de ASCII imprimível que contém um ou mais termos separados por operadores. A entrada também pode conter espaços - você deve ignorá-los. Um termo é [a-zA-Z0-9]
, um operador é [^ ()a-zA-Z0-9]
. Você pode assumir que a entrada é sempre válida.
Saída de todas as formas possíveis entre parênteses completos da expressão especificada, separados por novas linhas com uma nova linha à direita opcional.
Fazer não :
- Termos entre parênteses - somente entre parênteses os operadores.
- Reordene os termos.
- Saída de quaisquer espaços.
Exemplo de entrada / saída:
N
N
a * b
(a*b)
x_x_0
(x_(x_0))
((x_x)_0)
a * b|c|d
(a*(b|(c|d)))
(a*((b|c)|d))
((a*b)|(c|d))
((a*(b|c))|d)
(((a*b)|c)|d)
O menor código em bytes vence.
!
um operador? Que tal↑
?!
se ajusta ao regex, o mesmo acontece↑
, no entanto,↑
não pode fazer parte da entrada porque não é ASCII imprimível.Respostas:
Pitão, 38 bytes
Experimente online.
Ele define uma função recursiva que:
A função é chamada com a sequência de entrada com espaços removidos e os resultados são unidos por novas linhas.
fonte
JavaScript (ES6),
208197 bytesExplicação
Usa uma função recursiva que pega uma matriz de
[ t, o, t, o, etc... ]
parênteses e cada par consecutivo de dois termos juntos[ (tot), o, etc... ]
e repete esse processo até que haja apenas um elemento na matriz e filtra os valores duplicados.Teste
Mostrar snippet de código
fonte