Sapore
Lo stack-based Tarantopedia sottocarico ha alcuni legami interessanti per la programmazione funzionale. Uno di questi è il suo trattamento del tipo di dati numerico - come il calcolo lambda, tu rappresenti il numero naturale N con una funzione che esegue un'azione N volte.
Per semplificare le cose, considereremo solo il seguente sottoinsieme di comandi Underload:
:
- Questo comando duplica l'elemento in cima alla pila.*
- Questo comando concatena i primi due oggetti in pila in un singolo oggetto.
Definiamo un numero di sottocarico N come una stringa di :
e *
che, una volta eseguito, consuma l'articolo in cima alla pila e produce N copie di quell'elemento concatenate insieme. Qualche esempio:
- Non ci sono numeri di sottocarico 0, -1, 1/2, π.
- La stringa vuota
è il numero 1 di sottocarico, poiché non viene toccato lo stack.
:*
è il numero Underload 2, perché duplica l'elemento in cima e quindi concatena le due copie insieme in un singolo elemento:(A):*
=(A)(A)*
=(AA)
.::**
è il numero di sottocarico 3:(A)::**
=(A)(A):**
=(A)(AA)*
=(AAA)
.:::***
è il numero di sottocarico 4.:*:*
è anche il numero di sottocarico 4:(A):*:*
=(AA):*
=(AA)(AA)*
=(AAAA)
.
In generale, scoprirai che, se M
e N
sono i numeri Underload M e N, allora :N*
è il numero N + 1 ed MN
è il numero M × N.
La sfida
Il tuo compito è quello di scrivere il programma più breve (prendendo input su STDIN) o la funzione (prendendo input tramite argomento) che produce la rappresentazione più breve del numero Underload per il suo input come stringa. Vale a dire, se l'input è un numero naturale positivo N> 1, è necessario produrre un numero N di sottocarico la cui lunghezza in caratteri è inferiore o uguale a quella di ogni altro numero di sottocarico N.
Ingressi e uscite di esempio: ("Ingresso - OUTPUT
.")
- 1 -
.
- 2 -
:*
. - 5 -
::*:**
(2 × 2 + 1). - 7 -
::*::***
(2 × 3 + 1) o:::**:**
(3 × 2 + 1). - 33 -
::*:*:*:*:**
(2 × 2 × 2 × 2 × 2 + 1). - 49 -
::*:*:*:*::***
(16 × 3 + 1, lunghezza 14) ma non::*::***::*::***
(7 × 7, lunghezza 16).
Se l'input non è un numero naturale positivo, si è liberi di restituire un errore, produrre un comportamento indefinito o addirittura non riuscire a terminare. È apprezzata una spiegazione del metodo di presentazione della risposta per trovare la risposta.
Si applicano restrizioni standard sulle scappatoie: nessun input aggiuntivo, nessuna richiesta Web, valore di output / return deve essere esattamente la risposta e non un flusso casuale infinito di :
e *
, ecc.
x
è 2*A117498(x)
dove A117498 fornisce la combinazione ottimale di metodi binari e di fattori per trovare una catena di addizione.