Dada una expresión que coincida con la expresión regular /^[-~]*x$/
, evalúela en términos de x
y genere una cadena que coincida con la expresión regular /^-?x[+-]\d+$/
.
Por ejemplo, la cadena se -~x
evalúa como x+1
, mientras que la cadena se -~-x
evalúa como -x+1
, y la cadena se -~-~--x
evalúa como x+2
.
Comenzamos x
y evaluamos la cadena de derecha a izquierda. -
niega el término, mientras se ~
convierte y
a -y-1
.
Casos de prueba:
x x+0
~x -x-1
-~x x+1
~-~x -x-2
-~-~x x+2
--~~x x+0
~-x x-1
-~-x -x+1
Este es el código de golf . La respuesta más corta en bytes gana.
El formato de entrada / salida es estricto. El "x"
es obligatorio.
x+010
lugar dex+10
para-~-~-~-~-~-~-~-~-~-~x
? Coincide con la segunda expresión regular.~
cuando no se ha definidoRespuestas:
Python 2 ,
424139 bytesPruébalo en línea!
fuente
Retina ,
4744 bytesPruébalo en línea! Editar: Guardado 3 bytes gracias a @MartinEnder. Expansión:
Eliminar pares de duplicados adyacentes.
Cuente el número de
~
s que nos da la magnitud del término.Si el primer carácter es un,
~
entonces el término debería ser negativo.Si el número de
~
sy-
es impar, entoncesx
debería ser negativo.fuente
JavaScript, 59 bytes
Pruébalo en línea!
fuente
-
en una fila. (es decir--~-~x
)Perl 5 , 75 + 1 (-n) = 76 bytes
Pruébalo en línea!
fuente
C (gcc) , 69 bytes
Pruébalo en línea!
-1 byte gracias a @ThePirateBay
fuente
Java 8, 186 bytes
Definitivamente espacio para mejoras.
Explicación:
Pruébalo aquí
fuente