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 M
e N
sã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.