Este desafío es el primero de una serie de dos desafíos sobre la repetición. El segundo estará listo pronto.
En un lenguaje llamado Repetición (algo que acabo de inventar), consta de una cadena infinita de 12345678901234567890...
, con la 1234567890
repetición para siempre.
La siguiente sintaxis está disponible para los números de salida:
+-*/
: Esto inserta el operador en la cadena de dígitos repetidos.- Ejemplos:
+
->1+2
=3
(+
inserta un+
entre1
y2
)+*
->1+2*3
=1+6
=7
(Igual que el anterior, excepto que ahora se utilizan dos operadores)/
->1/2
=0
(La repetición usa división entera)//
->1/2/3
=0/3
=0
(La repetición usa "asociación izquierda" con múltiples restas y divisiones)
- Cada operador se inserta de modo que tenga un dígito a su izquierda, a menos que haya
c
un (vea a continuación).
- Ejemplos:
c
: Se concatena con el siguiente dígito en la cadena.- Ejemplos:
c+
->12+3
=15
(Elc
"continúa" el1
y lo concatena con el siguiente dígito,,2
para formar12
)+c
->1+23
=24
ccc
->1234
- Ejemplos:
()
: Corchetes para procesar números.- Ejemplos:
(c+)*
->(12+3)*4
=15*4
=60
(La repetición usa el orden de las operaciones)(c+)/c
->(12+3)/45
=15/45
=0
(cc+c)/
->(123+45)/6
=168/6
=28
- Ejemplos:
s
: Omite un número (elimina el número de la cadena infinita).s+
->2+3
=5
(s
salta1
)csc
->124
(Los primerosc
concatos1
y2
, loss
saltos3
y losc
concatos finales12
a4
)+s+
->7
(La primera+
suma1
y2
para hacer3
,s
saltos3
, y la final+
se suma3
a4
hacer7
)cs*(++)
->12*(4+5+6)
=12*15
=180
En los ejemplos anteriores, solo se usa una cantidad finita de dígitos en la cadena infinita. El número de dígitos utilizados es equivalente a number of operators, concats and skips + 1
.
Su tarea es, cuando se le da una cadena de código de repetición, generar el resultado.
Ejemplos de entrada y salida son:
++ -> 6
- -> -1
(-)* -> -3
cscc -> 1245
(cc+c)/ -> 28
cc+c/ -> 130
cs*(++) -> 180
Este es el código de golf, por lo que gana el código más corto en bytes.
Especificaciones:
- Le garantizamos que el resultado nunca superará
2^31-1
. - También tiene la garantía de que la entrada solo consistirá en los símbolos
+-*/cs()
. - Se generará un programa vacío
1
.
s+
es 2+3
su primer ejemplo. Y todavía s
me sigue molestando. Me pregunto cómo se +s()+
expande. Si es 1+(2)+4
así, (
viene antes, 2
pero s
eso viene incluso antes de que (
aparentemente salte 3
, no 2
. Sin embargo, si el resultado es 1+(3)+4
el efecto de a s
depende de lo que viene después (compárelo con +s+
)
sc
es 23
y s+
es 1+3
? ¿Se s
salta el 1
ahora o el 2
? Todos los ejemplos usan la primera operación en operandos 1
y 2
... así sc
debería ser 13
.
~
s? No nos dejes colgando.