Questa sfida è la prima di una serie a due sfide sulla ripetizione. Il secondo arriverà presto.
In una lingua chiamata Repetition (qualcosa che ho appena inventato), c'è una stringa infinita di 12345678901234567890...
, con la 1234567890
ripetizione per sempre.
La seguente sintassi è disponibile per i numeri di output:
+-*/
: Questo inserisce l'operatore nella stringa di cifre ripetute.- Esempi:
+
->1+2
=3
(+
inserisce una+
tra1
e2
)+*
->1+2*3
=1+6
=7
(Come sopra, tranne che ora vengono utilizzati due operatori)/
->1/2
=0
(La ripetizione utilizza la divisione intera)//
->1/2/3
=0/3
=0
(La ripetizione usa "associazione sinistra" con più sottrazioni e divisioni)
- Ogni operatore è inserito in modo che abbia una cifra alla sua sinistra, a meno che non ci siano
c
(vedi sotto).
- Esempi:
c
: Si concatena con la cifra successiva nella stringa.- Esempi:
c+
->12+3
=15
(Ilc
"continua" il1
e lo concatena con la cifra successiva2
, per formare12
)+c
->1+23
=24
ccc
->1234
- Esempi:
()
: Parentesi per l'elaborazione dei numeri.- Esempi:
(c+)*
->(12+3)*4
=15*4
=60
(la ripetizione utilizza l'ordine delle operazioni)(c+)/c
->(12+3)/45
=15/45
=0
(cc+c)/
->(123+45)/6
=168/6
=28
- Esempi:
s
: Salta un numero (rimuove il numero dalla stringa infinita).s+
->2+3
=5
(s
salta1
)csc
->124
(I primic
concats1
e2
, is
salti3
, e le finalic
concats12
a4
)+s+
->7
(Il primo+
aggiunge1
e2
per fare3
,s
salta3
, e la finale+
aggiunge3
a4
fare7
)cs*(++)
->12*(4+5+6)
=12*15
=180
Negli esempi precedenti, viene utilizzata solo una quantità finita di cifre nella stringa infinita. Il numero di cifre utilizzate è equivalente a number of operators, concats and skips + 1
.
Il tuo compito è, quando viene data una stringa di codice ripetizione, produrre il risultato.
Esempi di input e output sono:
++ -> 6
- -> -1
(-)* -> -3
cscc -> 1245
(cc+c)/ -> 28
cc+c/ -> 130
cs*(++) -> 180
Questo è il codice golf, quindi vince il codice più breve in byte!
Specifiche:
- Hai la garanzia che il risultato non andrà mai oltre
2^31-1
. - Hai anche la garanzia che l'input consisterà solo dei simboli
+-*/cs()
. - Verrà emesso un programma vuoto
1
.
s+
è 2+3
il primo esempio. E s
continua ancora a infastidirmi. Mi chiedo come si +s()+
espande. Se è 1+(2)+4
allora (
viene prima, 2
ma s
ciò che viene anche prima che (
apparentemente salti ancora 3
, no 2
. Se tuttavia il risultato è 1+(3)+4
quindi l'effetto di a s
dipende da ciò che viene dopo (confrontalo con +s+
)
sc
è 23
ed s+
è 1+3
? Fa s
saltare l' 1
ora o il 2
? Tutti gli esempi usano la prima operazione su operandi 1
e 2
... così sc
dovrebbe essere 13
.
~
s? Non lasciarci in sospeso.