StickStack è un linguaggio di programmazione basato su stack molto semplice con solo due istruzioni:
|
spinge la lunghezza della pila sulla pila-
estrae i primi due elementi dallo stack e rimuove la loro differenza (second topmost - topmost
)
Dettagli sulla lingua
- Lo stack è vuoto all'inizio del programma.
- Tutte le istruzioni vengono eseguite in sequenza da sinistra a destra.
- Se ci sono meno di 2 numeri nello stack l'
-
istruzione è illegale. - Alla fine dell'esecuzione lo stack dovrebbe contenere esattamente un numero .
Qualsiasi numero intero può essere generato da un programma StickStack. Per esempio:
|||--||-- generates the number 2 through the following stack states:
[]
[0]
[0, 1]
[0, 1, 2]
[0, -1]
[1]
[1, 1]
[1, 1, 2]
[1, -1]
[2]
Per valutare il tuo codice StickStack puoi usare questo valutatore online (CJam) . (Grazie per @Martin per il codice.)
L'obiettivo
Dovresti scrivere un programma o una funzione che ha dato un numero intero come output di input o restituisce una stringa che rappresenta un programma StickStack che emette il numero dato.
punteggio
- Il tuo punteggio principale è la lunghezza totale dei programmi StickStack per i casi di test indicati di seguito. Il punteggio più basso è migliore.
- Il tuo invio è valido solo se hai eseguito il programma su tutti i casi di test e contato il tuo punteggio.
- Il tuo punteggio secondario (tiebreaker) è la lunghezza del tuo programma o funzione generatrice.
Casi di test di input
(Ogni numero è un caso di test diverso.)
-8607 -6615 -6439 -4596 -4195 -1285 -72 12 254 1331 3366 3956 5075 5518 5971 7184 7639 8630 9201 9730
Il programma dovrebbe funzionare per qualsiasi numero intero (che può essere gestito dal tipo di dati) e non solo per i casi di test indicati. Le soluzioni per i numeri di test non devono essere codificate nel programma. In caso di dubbi sulla codifica hardware, i numeri di test verranno modificati.