sfondo
Molti linguaggi di programmazione esoterica non hanno numeri integrati in valori letterali, quindi è necessario calcolarli in fase di esecuzione; e in molti di questi casi, la rappresentazione numerica può essere piuttosto interessante. Abbiamo già avuto una sfida a rappresentare i numeri per Underload. Questa sfida riguarda la rappresentazione di numeri in SNUSP modulare . (Nota che non è necessario imparare SNUSP per completare questa sfida - tutte le informazioni di cui hai bisogno sono nelle specifiche - ma potresti trovare interessante lo sfondo.)
L'obiettivo
Ai fini di questa sfida, una serie Modular SNUSP è una stringa formata fuori dei personaggi @, +e =, tranne che l'ultimo carattere è una #, e che il personaggio deve essere penultima +o =(non può essere @). Ad esempio, i numeri validi includono @+#, ==#e @@+@=#; esempi di numeri non validi includono +=, @@#e +?+#.
Il valore di un numero SNUSP modulare viene calcolato in modo ricorsivo come segue:
#ha un valore di 0 (questo è il caso base).- Se il numero ha la forma
=x, per qualsiasi stringax, il suo valore è uguale al valore dix. - Se il numero ha la forma
+x, per qualsiasi stringax, il suo valore è uguale al valore dix, più 1. - Se il numero ha la forma
@cx, per ogni singolo caratterece qualsiasi stringax, il suo valore è uguale al valore dix, più il valore dicx.
Per questa sfida, è necessario scrivere un programma che accetta come input un numero intero non negativo e genera una stringa che è il numero SNUSP modulare più breve possibile che ha un valore uguale all'input.
chiarimenti
- È del tutto possibile che ci sia più di una stringa con lo stesso valore e, in particolare, per alcuni numeri interi ci sarà un pareggio per il numero SNUSP modulare più corto con quel valore. In tal caso, è possibile generare uno qualsiasi dei numeri coinvolti con il pareggio.
- Non ci sono restrizioni sull'algoritmo che usi per trovare il numero; ad esempio, forzare le stringhe e valutarle è una tattica legale, ma allo stesso modo sta facendo qualcosa di più intelligente per ridurre lo spazio di ricerca.
- Come al solito su PPCG, il tuo invio può essere un programma completo o una funzione (scegli quello più conciso nella tua lingua).
- Questo non è un problema sulla gestione dei formati di input e output, quindi puoi usare qualsiasi mezzo ragionevole per inserire un numero intero non negativo e produrre una stringa. C'è una guida completa su meta , ma i metodi legali più comunemente usati includono argomenti / restituzioni di funzioni, argomenti della riga di comando e input / output standard.
Casi test
Ecco le rappresentazioni più brevi dei primi numeri:
- 0 :
# - 1 :
+# - 2 :
++# - 3 :
+++#o@++# - 4 :
++++#oppure+@++#oppure@=++# - 5 :
@+++#o@@++# - 6 :
+@+++#oppure+@@++#oppure@=+++#oppure@=@++#oppure@@=++# - 7 :
@++++#o@+@++# - 8 :
@@+++#o@@@++# - 9 :
+@@+++#oppure+@@@++#oppure@+++++#oppure@++@++#oppure@+@=++#oppure@@=+++#oppure oppure@@=@++# - 10 :
@=@+++#oppure@=@@++#oppure@@@=++#( questo è un caso di test abbastanza importante da controllare , poiché tutte le possibili risposte includono=) - 11 :
@+@+++#oppure@+@@++#oppure@@++++#oppure@@+@++# - 12 :
+@+@+++#oppure+@+@@++#oppure+@@++++#oppure+@@+@++#oppure@=+@+++#oppure@=+@@++#oppure@=@=+++#oppure@=@=@++#oppure@=@@=++#oppure@@=++++#oppure@@=+@++#oppure oppure@@=@=++# - 13 :
@@@+++#o@@@@++# - 14 :
+@@@+++#oppure+@@@@++#oppure@=@++++#oppure@=@+@++#oppure@@+++++#oppure@@++@++#oppure oppure@@+@=++# - 15 :
@+@++++#oppure@+@+@++#oppure@@=@+++#oppure@@=@@++#oppure@@@=+++#oppure@@@=@++#
Come un banco di prova più grande, l'uscita dall'input 40 dovrebbe essere @@@=@@+++#, @@@=@@@++#, @@@@=@+++#, o @@@@=@@++#.
Condizione di vittoria
Come sfida di code-golf , il vincitore è l'ingresso più breve, misurato in byte.
=accadrà in modo ottimale solo come@=, giusto?