Inspirado en este desafío .
Gol:
Dada una centralita preconfigurada y una lista de índices, invierta los conmutadores en los índices dados.
Una centralita está compuesta por cierto número de interruptores ( v
o ^
) envueltos en -
's' y dispuestos en filas de longitud variable. Aquí hay un cuadro de distribución de ejemplo:
-v-^-v-
-^-v-
-v-^-v-
Invertir / voltear un interruptor significa cambiarlo de v
a ^
, o de ^
a v
.
Los interruptores están indexados de izquierda a derecha, de arriba a abajo. Por ejemplo, en el ejemplo anterior, el último v
en la primera fila estaría en la posición 3 y el ^
de la fila central estaría en 4 (usando la indexación 1).
Entrada:
- Una cadena (o lista de cadenas) que representa la centralita. Se garantiza que coincida con la expresión regular
((-[v^])+-)(\n(-[v^])+-)*
. - Una lista posiblemente vacía de números que representan índices, puede ser 0 o 1 (o algún número arbitrario si lo desea) indexado. Estos son los interruptores que deben activarse.
Salida:
- Una centralita en la misma forma que la entrada con los conmutadores especificados invertidos. Cualquier interruptor no especificado debe conservar su estado inicial.
Reglas:
- La entrada siempre tendrá el formato correcto y ningún índice dado estará fuera de los límites.
- La lista de índices se ordenará y no tendrá duplicados.
- Indique en su respuesta qué indexación usa, ya sea 0, 1 o alguna arbitraria.
- El espacio en blanco al final está bien siempre que la salida se parezca a la entrada.
- Este es el código de golf, por lo que gana el código más corto.
Ejemplos:
#Using 1-indexing
input: #Empty Case
[],
-v-^-v-
output:
-v-^-v-
input: #Single switch
[1],
-v-
output:
-^-
input: #Skip a line
[3,5],
-^-v-v-
-v-
-^-^-
output:
-^-v-^-
-v-
-v-^-
input: #Flip one in each line + number wrap
[3,4,6],
-^-v-v-
-v-
-^-^-
output:
-^-v-^-
-^-
-^-v-
input: #Flip 'em all
[1,2,3,4,5,6],
-^-v-v-
-v-
-^-^-
output:
-v-^-^-
-^-
-v-v-
>"-"
: Como se garantiza que la cadena de entrada comienza-
, puede verificar el nombre del parámetro / argumento / variable que está utilizando para eso.Respuestas:
Vim,
60, 46, 38, 37 bytes / pulsaciones de teclas<esc>
y<C-r>
son ambos 1 byte / pulsación de tecla. Contador de bytesCaso de prueba 1 (modo detallado)
Caso de prueba 2 (modo detallado)
Gracias a Grimy por las ideas que llevaron a una reducción de 22 bytes :)
fuente
:s/\%V./\='v^'[submatch(0)=='v']
sercl<C-R>='v^'['<C-R>"'=='v']
para -13 bytes? (cada <CR> es solo un byte).s == cl
, tan-14
general.s^v!<Esc>?\<C-R>"<CR>xhf!x
os<CR>^v<Esc>:s/\V<C-R>"<CR>kgJ
.-
, ¡así que realmente funciona! DuhJavaScript,
6359 bytesPruébalo en línea!
Guardado 4 bytes gracias a Arnauld .
fuente
K (oK) ,
3127 bytesSolución:
Pruébalo en línea!
Explicación:
Respuesta rápida, intentará jugarlo. 0 indexado.
Notas:
>93
trucofuente
Python 3 ,
140134103 bytes(-30 gracias a DJMcMayhem ♦, -1 más gracias a Black Owl Kai)
Pruébalo en línea!
Oof, segundo intento de jugar al golf. Esto solo usa un bucle poco sofisticado sobre la cadena, usando
x
para realizar un seguimiento del índice de cambio actual. Utiliza 1-indexación.Sin golf:
fuente
Jalea , 12 bytes
Un programa completo que acepta una cadena y una lista de enteros que imprime el resultado.
Pruébalo en línea!
¿Cómo?
fuente
Python 3.8 (prelanzamiento) ,
80,78,77,71, 70 bytes-1 byte, gracias a @Shaggy
Pruébalo en línea!
fuente
c>s
Guarda un byte.Perl 6 , 31 bytes
Pruébalo en línea!
(-2 bytes gracias a Jo King)
El operador de sustitución de Perl 6
S
toma convenientemente unnth
adverbio que acepta no solo un índice único para hacer el reemplazo, sino una lista de ellos, exactamente como se necesita aquí.El reemplazo es
$/ ~^ '('
, donde$/
está el texto coincidente (ya seav
o^
),~^
es el stringwise o-exclusiva operador, y(
es el carácter cuyos bits girarv
en^
y viceversa.fuente
MATL , 29 bytes
Pruébalo en línea!O verificar todos los casos de texto .
La entrada es una matriz de celdas de cadenas y un vector de fila de números, con indexación basada en 1. La salida se rellena a la derecha con espacios.
fuente
Python 2 ,
1059791 bytesPruébalo en línea!
6 bytes salvados por
el roboutilizando la transformada de Fourier de Rin 'sc>'-'
en lugar dec in'^v'
.0
-indexado.fuente
Jalea , 14 bytes
Pruébalo en línea!
Programa completo
Esto se siente demasiado largo ...
fuente
”-
con el nombre del primer argumento (³
?), Que está garantizado que comienza con un-
, en su lugar?>
vectoriza. Puedes ver que no funciona .³
,⁴
,⁵
,⁶
y⁷
, por primera a la quinta CLA respectivamente. Puede leer la página Atoms para averiguar si existe una función incorporada específica.Stax , 13 bytes
Ejecutar y depurarlo
Esto utiliza índices basados en 0.
[v^]
.40
. Esto esxor('v', '^')
.fuente
Limpio , 93 bytes
Pruébalo en línea!
Define la función que
$ :: [Int] -> [Char] -> [Char]
toma una lista de índices indexados a cero y devuelve una función que toma la cadena y devuelve la cadena alterada.fuente
JavaScript (Node.js) ,
1019893917767 bytesPruébalo en línea!
10 bytes, gracias a las sugerencias de Shaggy .
Puerto de mi respuesta de Python . ¡No estoy acostumbrado al golf javascript!
fuente
V , 20 bytes
Pruébalo en línea!
Utiliza algunas características nuevas, como la
Ñ
que es increíblemente útil.fuente
JavaScript, 111 bytes
Código
Toma la entrada en formato f (x) (y) donde x es los índices e y es la centralita. Los índices son 0 indexados
Pruébalo en línea!
Explicación
Para cada índice
construya la expresión regular que encuentre el índice + 1º "^" o "v"
insertarlo en una cadena para reemplazarlo con el símbolo opuesto "v" <-> "^"
luego evalúa la cadena como una función
Después de recorrer los índices para cambiar, devolver el panel de control
fuente
Jalea , 17 bytes
Pruébalo en línea!
Un programa completo que toma los índices como primer y cadena como segundo argumento. Imprime la salida con los interruptores indicados invertidos.
fuente
Retina 0.8.2 ,
6662 bytesPruébalo en línea! El enlace incluye un caso de prueba. 1 indexado. Explicación:
Convierta los números de entrada a unario.
Transliterate entre
v
y^
todos los personajes con la propiedad de que el número dev
s, y^
es hasta el momento (inclusive) es igual a uno de los números de entrada.Eliminar los números de entrada.
fuente
Carbón , 23 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. 0 indexado. Explicación:
fuente
Ruby , 56 bytes
1 indexado.
Pruébalo en línea!
fuente
C # (compilador interactivo de Visual C #) , 73 bytes
Pruébalo en línea!
fuente
Japt , 15 bytes
Intentalo
fuente
Japt ,
1614 bytesIntentalo
fuente
:D
)