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 Me Nsono 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.