Activa los interruptores

17

Después de despertarse en una habitación oscura, verá una cuadrícula rectangular de luces con los interruptores correspondientes. Decide utilizar un sistema de coordenadas con la luz inferior izquierda representando (1,1) y las coordenadas aumentando a medida que avanza (dirección y) y hacia la derecha (dirección x). Las cuadrículas son idénticas en que al accionar el interruptor en (a, b) se alterna (se apaga y se enciende o se enciende y apaga) la luz en (a, b), así como las luces en la misma columna o misma fila que ( a, b).

Su entrada será una cuadrícula rectangular de dos caracteres distintos que representan encendido y apagado (uso 1 y 0, respectivamente). Además, una parte de la entrada será una serie de al menos un par de coordenadas (con el formato y la separación que desee) que representarán los interruptores que usted activa.

La salida será la misma cuadrícula, con el "flip" aplicado en cada uno de los pares de coordenadas que se dieron como entrada. Puede elegir cómo formatear su entrada, aunque la salida debe ser una cuadrícula, no una matriz.


Muestras

Entrada de muestra 1

111111
111111
111111
111111

(3,2)

Salida de muestra 1

110111
110111
000000
110111

Entrada de muestra 2

01101
10100
00010
11111
10110

(1,1), (5,5)

Salida de muestra 2

00010
00101
10011
01110
01000

Entrada de muestra 3

1

(1,1)

Salida de muestra 3

0

Entrada de muestra 4

00000
11111
00000
11111

(2,3), (2,3)

Salida de muestra 4

00000
11111
00000
11111

Este es el código de golf. Aplican reglas estándar. El código más corto en bytes gana.

EEEEEEridan
fuente
Relacionado: codegolf.stackexchange.com/questions/65738/crack-the-safe . Sin embargo, no es el mismo problema. El objetivo del otro desafío era descubrir qué movimientos hacer, este se trata de aplicar una lista dada de movimientos.
Reto Koradi
@RetoKoradi Tampoco es exactamente la misma operación. (El hecho de que la celda elegida también esté activada hace que esto sea mucho más complicado).
Martin Ender
¿Puedo solicitar que la entrada sea como <grid><RETURN><coordinate_x><RETURN><coordinate_y><RETURN>?
gato
cualquier formato y separación : ¿Eso significa que pueden ser entradas separadas (es decir, "separador" es la tecla "enter")?
Luis Mendo
@LuisMendo Sí, si eso funciona.
EEEEEEridan

Respuestas:

3

CJam, 37 36 bytes

qN/W%(~{1$::!\{1a\Te[f.|z}/..^}/W%N*

La entrada debe tener primero la cuadrícula, utilizando dos caracteres no NULL que solo difieran en el último bit (así 0y 1trabajo), seguidos de una lista de pares de coordenadas al estilo CJam.

01101
10100
00010
11111
10110
[[1 1] [5 5]]

Pruébalo aquí.

Martin Ender
fuente
3

Dyalog APL, 20 bytes

{⍵≠⊃⊃≠/∘.∨/¨⍺=⊂⍳¨⍴⍵}

Esta es una función diádica que toma la cuadrícula inicial a la derecha y la lista de coordenadas a la izquierda.

Para ingresar un solo par de coordenadas, use, por ejemplo, (⊂2 3)como argumento izquierdo.

Pruébalo aquí .

lirtosiast
fuente
1

MATL , 39 bytes

i,-1H$X!tyZ}:XJx:!XIxi"I@1)=J@2)=|+]2\X!

La entrada tiene la siguiente forma (el ejemplo corresponde a la entrada de muestra 2 en el desafío):

[0 1 1 0 1; 1 0 1 0 0; 0 0 0 1 0; 1 1 1 1 1; 1 0 1 1 0]  
[1 5; 1 5]

La primera entrada es una matriz que define la cuadrícula de 0y 1. ;es el separador de fila. La segunda entrada es una matriz de pares de coordenadas, donde cada columna es un par.

Ejemplo

>> matl i1_2$X!tyZ}:XJx:!XIxi"I@1)=J@2)=|+]2\X!
> [0 1 1 0 1; 1 0 1 0 0; 0 0 0 1 0; 1 1 1 1 1; 1 0 1 1 0]
> [1 5; 1 5]
0 0 0 1 0
0 0 1 0 1
1 0 0 1 1
0 1 1 1 0
0 1 0 0 0

Explicación

i,           % input matrix
-1H$X!       % rotate clockwise to accomodate input to matrix coordinates
tyZ}         % get numbers of rows (r) and of cols (c)
:XJx         % row vector 1,2,,...,c. Copy to clipboard J and delete
:!XIx        % col vector 1,2,,...,r. Copy to clipboard I and delete
i            % input coordinates (matrix; each col is a coordinate)
"            % for each col of coordinate matrix
    I@1)=    % compare col vector of rows with row from coordinate
    J@2)=    % compare row vector of cols with col from coordinate
    |        % "or" with singleton expansion to generate mask
    +        % add that to matrix of values
]            % end for
2\           % modulo 2 to transform result into zeros and ones
X!           % undo rotation
Luis Mendo
fuente
por favor avíseme si hay un compilador en línea disponible para matl
Abr001am
Aún no en línea, lo siento. Solo el basado en Matlab que vinculé en el título
Luis Mendo
0

Ruby 114 bytes

Toma como entrada:

g, una matriz de matrices que representan la cuadrícula inicial.

o, una matriz de puntos, cada punto es una matriz con dos elementos, como [x, y].

->g,o{o.map{|i|(r=g[i[1]-1])[e=(i[0]-1)]-=1;r.map!{|j|j+1};g.map{|x|x[e]+=1}};puts g.map{|i|i.map{|j|j%2}.join""}}
MegaTom
fuente