Jack gosta da linguagem de programação C, mas odeia escrever expressões como V=a*b*h;
multiplicar os valores.
Em V=abh;
vez disso, ele gostaria de escrever , por que o compilador deve gemer sobre o abh
símbolo ser indefinido, uma vez que int a, b, h;
estão definidos, para que possamos deduzir a multiplicação?
Ajude-o a implementar um analisador que decifre um único termo de multiplicação, desde que o conjunto de variáveis definidas no escopo atual seja conhecido.
Para simplificar, a multiplicação por número (como em 2*a*b
) não é levada em consideração, apenas as variáveis aparecem.
A entrada é um termo de multiplicação T , cumprindo regexp:
[a-zA-Z_][a-zA-Z_0-9]*
e um conjunto de variáveis Z .
Um P de análise do termo T sobre o conjunto de variáveis Z é uma sequência que segue o seguinte:
- depois de remover todas as ocorrências de
*
P, recebemos T, - ou é um nome de variável de Z ou consiste em nomes de variáveis adequados de Z divididos por
*
caracteres únicos .
A solução deve imprimir todas as análises de um termo.
Amostra:
Vars a, c, ab, bc
Term abc
Solution ab*c, a*bc
Vars ab, bc
Term abc
Solution -
Vars -
Term xyz
Solution -
Vars xyz
Term xyz
Solution xyz
Vars width, height
Term widthheight
Solution width*height
Vars width, height
Term widthheightdepth
Solution -
Vars aaa, a
Term aaaa
Solution aaa*a, a*aaa, a*a*a*a
A entrada (a lista de variáveis e o termo) pode ser fornecida de qualquer maneira adequada ao idioma.
A saída pode estar em qualquer forma sensata (uma análise por linha ou uma lista separada por vírgula etc.) - mas deve ser inequívoca e possível de ser lida.
A saída vazia é aceitável se não houver uma possível análise de um termo (nos exemplos que usei '-' para maior clareza).
Este é um código de golfe, portanto o código mais curto vence.
ab*c
seja uma análise incorreta, poisc
não é uma variável permitida.a*aaa aaa*a
e nãoab*c c*ab
Respostas:
Pyth, 18 caracteres
Esta solução é adaptada da minha solução de interpretação de peixes . Os problemas são realmente muito semelhantes.
Espera entrada como tal:
Dá saída assim:
Experimente aqui.
sm^Qkhlz
: Gera todas as seqüências de variáveis que contêm até o comprimento do número de variáveis da sequência de entrada.fqzsT
: Filtra as sequências variáveis que correspondem à sequência de entradamj\*d
: Insere o*
símbolo e imprime.fonte
Python
2-14494 bytesIsso define uma função
R
a ser usada como:Imprime a saída como:
fonte
JavaScript (ES6) 111
Adaptado da minha resposta "peixe" , a principal diferença é encontrar todas as soluções, não apenas a primeira.
A saída é impressa no console. O resultado da função não tem significado e deve ser descartado.
Teste no console Firefox / FireBug
fonte