Cada vez que haces un movimiento en un Cubo de Rubik, hay un movimiento inverso que deshace el primer movimiento. Debido a esto, cada algoritmo (conjunto de movimientos) tiene un algoritmo inverso que deshace el primer algoritmo.
El objetivo de este desafío es encontrar el reverso de un algoritmo dado.
Especificación:
La entrada consiste en una matriz de movimientos individuales. Cada movimiento es una cadena de longitud 1 o 2. Por supuesto, puede usar cualquier formato de entrada que tenga más sentido en su idioma. Cada movimiento consiste en la estructura X
or X'
o X2
, donde X
hay una letra mayúscula o minúscula.
Para revertir X
, simplemente reemplácelo con X'
. Del mismo modo, se X'
convierte X
. X2
por otro lado no se cambia.
Para crear la salida, invierta cada movimiento y luego invierta la matriz.
Ejemplos (cadenas separadas por espacios):
R
=> R'
D U'
=> U D'
S T A C K
=> K' C' A' T' S'
A2 B2
=> B2 A2
Puntuación:
Este es el código de golf, por lo que gana la menor cantidad de bytes. Las lagunas estándar no están permitidas.
fuente
R2
->R2'
oB
->B3
?X3
oX1
habría sido una buena adición al desafío.D2R2
como caso de prueba ...Respuestas:
Python 2 ,
71575453 bytes-15 bytes gracias a los ovs! -3 bytes gracias a Rod.
Pruébalo en línea!
Cadena de E / S, 70 bytes
Pruébalo en línea!
fuente
V ,
1310 bytesPruébalo en línea!
3 bytes guardados gracias a @nmjmcman señalando mi característica favorita. Explicación:
fuente
ä
Le gusta representar una expresión regular cuando se compila en vim?:g!/\d/norm A'<CR>:%s/''//g<CR>gg:g/^/m0<CR>
Más información sobre cómo V comprime las expresiones regulares se puede encontrar aquíRetina 0.8.2 ,
2726 bytesPruébalo en línea! El enlace incluye casos de prueba. Explicación: La primera etapa agrega un apóstrofe después de cada alfanumérico. Esto da como resultado dobles apóstrofes (con o sin un 2 incluido) que deben eliminarse. La etapa final invierte los movimientos.
fuente
O$^
de hecho sigue siendo la mejor manera de revertir una lista de coincidencias, por lo que el recuento de bytes no ha cambiado en la Retina 1.JavaScript (ES6), 45 bytes
La solución más corta es tomar Array IO. Uso simple y apropiado de la destrucción de argumentos.
La salida de cadena es de +8 bytes para
.join` `
.Entrada de cadena, salida de matriz: 69 bytes
fuente
.reverse()
con::reverse
ahorro de 1 byte, pero haciendo ES7Jalea , 11 bytes
Un enlace monádico que devuelve una lista de listas de caracteres (una "matriz" de "cadenas").
Pruébalo en línea!(El pie de página evita romper la salida, mostrando la lista dividida con espacios).
¿Cómo?
fuente
JavaScript (ES6), 46 bytes
Toma datos como una serie de movimientos.
Pruébalo
Ingrese una lista de movimientos separados por comas.
Explicación
Función anónima que toma la matriz de movimientos como argumento a través de un parámetro
a
.Asigne sobre la matriz, pasando cada cadena a través de una función, donde
m
está la cadena actual.Compruebe si la cadena contiene un segundo segundo carácter (
"'"
o"2"
).Si intenta convertir esa cadena de caracteres en un entero. Si la cadena es
"2"
, se convierte2
, lo cual es verdadero. Si la cadena es"'"
, se convierte enNaN
falsey.Si la prueba anterior es verdadera, simplemente regrese
m
.De lo contrario, devuelve el primer carácter de
m
.Si la cadena no contiene un segundo carácter, regrese
m
agregado con un'
.Invierta la matriz modificada.
fuente
Python ,
5148 bytesUna función sin nombre que toma y devuelve listas de cadenas.
Pruébalo en línea!
Invierte la lista de entrada con
a[::-1]
; agrega un'
a cada entrada conv+"'"
; encabeza cada uno a 1 o 2 caracteres dependiendo de si el original tenía'
o no adentro[:2-("'"in v)]
.fuente
Python 3 ,
918972706965 bytesPruébalo en línea! (Con estuches)
Aparentemente no necesita tomar la entrada y la salida como cadenas, por lo que es posible una solución de 69 bytes
fuente
len(i)==1
len(i)-2
es más corto quelen(i)==1
(recuerda 0 es falsey)Haskell , 43 bytes
Pruébalo en línea! Declara una función anónima
map f.reverse
. Enlaceg
y uso comog["S","T","A","C","K"]
.fuente
PHP , 81 bytes
Pruébalo en línea!
fuente
05AB1E , 13 bytes
Pruébalo en línea!
Explicación
fuente
J, 25 bytes
J maneja esto bien, aparte de la desafortunada secuencia de escape necesaria para representar una cita simple:
Necesitamos representar la lista usando datos en recuadro, ya que es una combinación de elementos de uno y dos caracteres, por lo tanto:
&.>
- "debajo de unbox", que significa desempaquetar cada elemento, realice la operación que sigue (es decir, los símbolos que se explican a continuación) y luego vuelva a boxear cuando haya terminado(''''={:)
"si el segundo carácter es una cita simple" ....@.
(El verbo de agenda de J, una especie de declaración ternaria generalizada o una declaración de caso) "luego realice el segundo elemento de la lista de agenda, de lo contrario realice el primero"}:
(el segundo elemento de la lista de agenda), "eliminar el último carácter", es decir, la comilla simple`(Verbo de corbata de J) Puede pensar en esto como el separador de elementos de la agenda
,&''''
(primer elemento de la lista de la agenda) "agregue una sola cita al final"|.
"marcha atrás"Pruébalo en línea!
fuente
R , 51 bytes
Pruébalo en línea!
fuente
Ruby , 44 bytes
Pruébalo en línea!
fuente
Java 8,
141128126 bytesToma la entrada como única
String
sin espacios (es decirRUR'URU2R'U
).Explicación:
Pruébalo en línea.
Ejemplo de los pasos anteriores, con la entrada dada:
RUR'URU2R'U
RUR'URU2R'U
→R'U'R'''U'R'U'2'R'''U'
R'U'R'''U'R'U'2'R'''U'
→R'U'RU'R'U'2'RU'
R'U'RU'R'U'2'RU'
→'R'UR'U'R'U'2R'U
'R'UR'U'R'U'2R'U
→'R'UR'U'R2UR'U
'R'UR'U'R2UR'U
→U'RU2R'U'RU'R'
fuente