Um número de Friedman é um número inteiro positivo que é igual a uma expressão não trivial que usa seus próprios dígitos em combinação com as operações +, -, *, /, ^, parênteses e concatenação.
Um número agradável de Friedman é um número inteiro positivo que é igual a uma expressão não trivial que usa seus próprios dígitos em combinação com as mesmas operações, com os dígitos em sua ordem original.
Um Número Friedman Muito Bom (VNFN), que estou inventando aqui, é um Número Friedman Agradável, que pode ser escrito sem as partes menos bonitas (na minha opinião) de tal expressão. Parênteses, concatenação e negação unária não são permitidos.
Para esse desafio, há três maneiras possíveis de escrever uma expressão sem parênteses.
Prefixo: Isso é equivalente à associatividade à esquerda. Este tipo de expressão é gravado com todos os operadores à esquerda dos dígitos. Cada operador se aplica às duas expressões a seguir. Por exemplo:
*+*1234 = *(+(*(1,2),3),4) = (((1*2)+3)*4) = 20
Um VNFN que pode ser escrito dessa maneira é 343:
^+343 = ^(+(3,4),3) = ((3+4)^3) = 343
Postfix: Isso é equivalente à associatividade correta. É como a notação de prefixo, exceto que a operação vai para a direita dos dígitos. Cada operador se aplica às duas expressões anteriores. Por exemplo:
1234*+* = (1,(2,(3,4)*)+)* = (1*(2+(3*4))) = 14
Um VNFN que pode ser escrito dessa maneira é 15655:
15655^+** = (1,(5,(6,(5,5)^)+)*)* = (1*(5*(6+(5^5)))) = 15655
Infix: a notação Infix usa a ordem padrão de operações para as cinco operações. Para os propósitos do desafio, essa ordem de operações será definida da seguinte forma: Coloque entre parênteses ^
primeiro, à direita associativamente. Então, entre parênteses *
e /
simultaneamente, saiu associativamente. Por fim, entre parênteses +
e -
simultaneamente, deixados associativamente.
1-2-3 = (1-2)-3 = -4
2/3*2 = (2/3)*2 = 4/3
2^2^3 = 2^(2^3) = 256
1^2*3+4 = (1^2)*3+4 = 7
Um VNFN que pode ser escrito dessa maneira é 11664:
1*1*6^6/4 = (((1*1)*(6^6))/4) = 11664
Desafio: dado um número inteiro positivo, se ele puder ser expresso como uma expressão não trivial de seus próprios dígitos em notação de prefixo, infixo ou postfix, produza essa expressão. Caso contrário, não produza nada.
Esclarecimentos: Se várias representações forem possíveis, você poderá gerar qualquer subconjunto não vazio delas. Por exemplo, 736 é um VNFN:
+^736 = 736
7+3^6 = 736
+^736
, 7+3^6
ou ambos seriam saídas aceitáveis.
Uma expressão "trivial" significa aquela que não usa nenhum operador. Isso é relevante apenas para números de um dígito e significa que os números de um dígito não podem ser VNFNs. Isso é herdado da definição de um número de Friedman.
As respostas devem ser executadas em segundos ou minutos em entradas inferiores a um milhão.
IO: Regras padrão de IO. Programa completo, função, verbo ou similar. STDIN, linha de comando, argumento da função ou similar. Para a saída de "Nothing", a string vazia, uma linha em branco null
ou similar e uma coleção vazia são boas. A saída pode ser uma sequência delimitada com um caractere que não pode estar em uma representação ou pode ser uma coleção de sequências.
Exemplos:
127
None
343
^+343
736
736^+
7+3^6
2502
None
15655
15655^+**
11664
1*1*6^6/4
1^1*6^6/4
5
None
Pontuação: Este é o código de golfe. Menos bytes ganha.
Além disso, se você encontrar um, forneça um novo número Friedman muito bom na sua resposta.
Parentheses, concatenation and unary negation are disallowed.
*(+(*(1,2),3,4)
está faltando um parêntese próximo, depois,3