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
.
code-golf
math
code-golf
string
number
arithmetic
code-golf
ascii-art
kolmogorov-complexity
code-golf
number-theory
code-golf
math
code-golf
stack-exchange-api
code-golf
ascii-art
code-golf
string
code-golf
number
integer
code-golf
number
arithmetic
code-golf
puzzle-solver
code-challenge
quine
palindrome
polyglot
clismique
fuente
fuente
~
s? No nos dejes colgando.s+
es2+3
su primer ejemplo. Y todavías
me sigue molestando. Me pregunto cómo se+s()+
expande. Si es1+(2)+4
así,(
viene antes,2
peros
eso viene incluso antes de que(
aparentemente salte3
, no2
. Sin embargo, si el resultado es1+(3)+4
el efecto de as
depende de lo que viene después (compárelo con+s+
)sc
es23
ys+
es1+3
? ¿Ses
salta el1
ahora o el2
? Todos los ejemplos usan la primera operación en operandos1
y2
... asísc
debería ser13
.Respuestas:
JavaScript (ES6), 110 bytes
Muy simple, pero la división entera agrega 25 bytes. Por alguna razón, una expresión regular en JS no puede coincidir tanto con el comienzo de una cadena como con el primer carácter, por lo que también agrega algunos bytes.
Cómo funciona
)
) que no esté inmediatamente antes de a(
.c
, un dígito +s
al principio (1s2
->2
), y cadas
+ un dígito (3s4
->3
).1/2
->(1/2|0)
).fuente
ss+
regresa6
, cuando está destinado a regresar7
(Los doss
omiten1
y2
, entonces,+
agrega3
y4
)./^|,|$/g
solo coincidirá una vez al principio porque ambas coincidencias tendrían el mismo índice.$
no tiene el mismo problema porque la coincidencia tiene un índice mayor que cualquier otra coincidencia posible.Lote, 332 bytes.
El comportamiento de
s
hace esto muy incómodo. (Tal vezcs
debería evaluar a13
y-s
a-2
?) Variables:s
cadena de entrada (explícitamente en blanco porque set / p no cambia la variable si no ingresa nada)e
expresión parcial en aritmética de enteros normales (a la que podemos pasarset/a
como una forma deeval
)d
siguiente dígito de la cadena infinita de dígitosr
lado derecho del último operador. No podemos concatenar esto de inmediato porque(
debe ser lo primero, pero debemos almacenarlo para ques
no se incremente. Afortunadamente, hace que el manejo)
sea un poco más fácil.c
Carácter actual.fuente