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 ( vo ^) 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 va ^, 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 ven 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-14general.s^v!<Esc>?\<C-R>"<CR>xhf!xos<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:
>93trucofuente
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
xpara 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>sGuarda 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
Stoma convenientemente unnthadverbio 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 seavo^),~^es el stringwise o-exclusiva operador, y(es el carácter cuyos bits girarven^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
vy^todos los personajes con la propiedad de que el número devs, 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)