Przełącz przełączniki

17

Po przebudzeniu w ciemnym pokoju zobaczysz prostokątną siatkę świateł z odpowiednimi włącznikami. Decydujesz się użyć układu współrzędnych z lewym dolnym światłem reprezentującym (1,1), a współrzędne rosną wraz z ruchem w górę (kierunek y) i w prawo (kierunek x). Siatki są identyczne pod tym względem, że przestawienie przełącznika w pozycji (a, b) przełącza (zmienia się z wyłączenia na włączenie lub z włączenia do wyłączenia) światło w (a, b), a także światła w tej samej kolumnie lub w tym samym rzędzie co ( a, b).

Twój wkład będzie prostokątną siatką dwóch różnych znaków reprezentujących włączanie i wyłączanie (używam odpowiednio 1 i 0). Ponadto część danych wejściowych będzie serią co najmniej jednej pary współrzędnych (o dowolnym formacie i pożądanym rozdzieleniu), która będzie reprezentować przełączniki, które przerzucisz.

Dane wyjściowe będą miały tę samą siatkę, z „odwróceniem” zastosowanym do każdej pary współrzędnych podanej jako dane wejściowe. Możesz wybrać sposób sformatowania danych wejściowych, ale dane wyjściowe muszą być siatką, a nie tablicą.


Próbki

Przykładowe dane wejściowe 1

111111
111111
111111
111111

(3,2)

Próbka wyjściowa 1

110111
110111
000000
110111

Przykładowe wejście 2

01101
10100
00010
11111
10110

(1,1), (5,5)

Próbka wyjściowa 2

00010
00101
10011
01110
01000

Przykładowe dane wejściowe 3

1

(1,1)

Próbka wyjściowa 3

0

Przykładowe wejście 4

00000
11111
00000
11111

(2,3), (2,3)

Próbka wyjściowa 4

00000
11111
00000
11111

To jest kod golfowy. Obowiązują standardowe zasady. Najkrótszy kod w bajtach wygrywa.

EEEEEEridan
źródło
Powiązane: codegolf.stackexchange.com/questions/65738/crack-the-safe . Jednak nie ten sam problem. Celem drugiego wyzwania było ustalenie, które ruchy wykonać, w tym chodzi o zastosowanie danej listy ruchów.
Reto Koradi,
@RetoKoradi To nie jest też całkiem sama operacja. (Fakt, że sama wybrana komórka również jest przełączana, sprawia, że ​​jest to znacznie trudniejsze.)
Martin Ender
Czy mogę poprosić o dane wejściowe <grid><RETURN><coordinate_x><RETURN><coordinate_y><RETURN>?
kot
niezależnie od formatu i separacji : czy to oznacza, że ​​mogą to być osobne dane wejściowe (tzn. „separator” to klawisz „enter”)?
Luis Mendo
@LuisMendo Tak, jeśli to działa.
EEEEEEridan

Odpowiedzi:

3

CJam, 37 36 bajtów

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

Dane wejściowe powinny mieć najpierw siatkę, używając dowolnych dwóch znaków innych niż NULL, które różnią się tylko ostatnim bitem (więc 0i 1działają), a następnie listy par współrzędnych w stylu CJam.

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

Sprawdź to tutaj.

Martin Ender
źródło
3

Dyalog APL, 20 bajtów

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

Jest to funkcja dynamiczna, która pobiera początkową siatkę po prawej stronie i listę współrzędnych po lewej.

Aby wprowadzić pojedynczą parę współrzędnych, użyj np. (⊂2 3)Jako lewego argumentu.

Wypróbuj tutaj .

lirtosiast
źródło
1

MATL , 39 bajtów

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

Dane wejściowe mają następującą postać (przykład odpowiada przykładowej wartości wejściowej 2 w wyzwaniu):

[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]

Pierwszym wejściem jest macierz definiująca siatkę 0i 1. ;jest separatorem wierszy. Drugim wejściem jest macierz par współrzędnych, gdzie każda kolumna jest parą.

Przykład

>> 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

Wyjaśnienie

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
źródło
proszę dać mi znać, jeśli dostępny jest kompilator online dla Matl
Abr001am
Jeszcze nie online, przepraszam. Tylko ten oparty na Matlabie, który podłączyłem w tytule
Luis Mendo,
0

Ruby 114 bajtów

Pobiera jako dane wejściowe:

g, tablica tablic reprezentujących siatkę początkową.

o, tablica punktów, przy czym każdy punkt jest tablicą z dwoma elementami, np [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
źródło