Texto de sabor
O baseado em pilha esolang Underload tem alguns laços interessantes para programação funcional. Um deles é o tratamento do tipo de dados numérico - como o cálculo lambda, você representa o número natural N por uma função que executa uma ação N vezes.
Para simplificar, consideraremos apenas o seguinte subconjunto de comandos Underload:
:- Este comando duplica o item superior da pilha.*- Este comando concatena os dois principais itens da pilha em um único item.
Definimos um número N de Subcarga como uma string :e *que, quando executado, consome o item superior na pilha e produzimos N cópias desse item concatenadas juntas. Alguns exemplos:
- Não há números de carga insuficiente 0, -1, 1/2, π.
- A cadeia vazia
é o número 1 de Carga insuficiente, porque deixa a pilha intocada. :*é o número 2 de Carga insuficiente, porque duplica o item superior e concatena essas duas cópias juntas em um único item:(A):*=(A)(A)*=(AA).::**é o número 3 da subcarga:(A)::**=(A)(A):**=(A)(AA)*=(AAA).:::***é o número de Underload 4.:*:*é também o número 4 da carga insuficiente:(A):*:*=(AA):*=(AA)(AA)*=(AAAA).
Em geral, você encontrará que, se Me Nsão os números M de Subcarga M e N, então :N*é o número N + 1 e MNé o número M × N.
O desafio
Sua tarefa é escrever o programa mais curto (recebendo entrada em STDIN) ou a função (recebendo entrada por argumento) que produz a representação mais curta do número de Underload para sua entrada como uma string. Ou seja, se a entrada for um número natural positivo N> 1, você deverá produzir um número N de Subcarga N cujo comprimento em caracteres seja menor ou igual ao de qualquer outro número de Underload N.
Entradas e saídas de amostra: ("Input - OUTPUT.")
- 1 -
. - 2 -
:*. - 5 -
::*:**(2 × 2 + 1). - 7 -
::*::***(2 × 3 + 1) ou:::**:**(3 × 2 + 1). - 33 -
::*:*:*:*:**(2 × 2 × 2 × 2 × 2 + 1). - 49 -
::*:*:*:*::***(16 × 3 + 1, comprimento 14), mas não::*::***::*::***(7 × 7, comprimento 16).
Se a entrada não for um número natural positivo, você poderá retornar um erro, produzir um comportamento indefinido ou até falhar ao finalizar. Uma explicação do método do seu envio de encontrar a resposta é apreciada.
Aplicam-se restrições de brecha padrão: nenhuma entrada extra, nenhuma solicitação da Web, valor de saída / retorno deve ser exatamente a resposta e não um fluxo aleatório infinito de :e *etc.
xé 2*A117498(x)onde A117498 fornece a combinação ideal de métodos binários e de fatores para encontrar uma cadeia de adição.