Capovolgi gli interruttori


17

Dopo esserti svegliato in una stanza buia, vedi una griglia rettangolare di luci con gli interruttori corrispondenti. Decidi di utilizzare un sistema di coordinate con la luce in basso a sinistra che rappresenta (1,1) e le coordinate aumentano man mano che sali (direzione y) e verso destra (direzione x). Le griglie sono identiche in quanto ruotando l'interruttore su (a, b) attiva (gira da spento a acceso o da acceso a spento) la luce su (a, b) e le luci nella stessa colonna o stessa riga di ( a, b).

Il tuo input sarà una griglia rettangolare di due caratteri distinti che rappresentano on e off (io uso 1 e 0, rispettivamente). Inoltre, una parte dell'input sarà una serie di almeno una coppia di coordinate (con qualsiasi formato e separazione desiderati) che rappresenteranno gli interruttori che si invertono.

L'output sarà la stessa griglia, con il "flip" applicato a ciascuna delle coppie di coordinate fornite come input. Puoi scegliere come formattare l'input, sebbene l'output debba essere una griglia, non un array.


Campioni

Esempio di input 1

111111
111111
111111
111111

(3,2)

Uscita campione 1

110111
110111
000000
110111

Esempio di input 2

01101
10100
00010
11111
10110

(1,1), (5,5)

Uscita campione 2

00010
00101
10011
01110
01000

Esempio di input 3

1

(1,1)

Uscita campione 3

0

Esempio di input 4

00000
11111
00000
11111

(2,3), (2,3)

Uscita campione 4

00000
11111
00000
11111

Questo è il codice golf. Si applicano le regole standard. Vince il codice più breve in byte.


Correlati: codegolf.stackexchange.com/questions/65738/crack-the-safe . Non è lo stesso problema, però. L'obiettivo dell'altra sfida era scoprire quali mosse fare, questa riguarda l'applicazione di un determinato elenco di mosse.
Reto Koradi,

@RetoKoradi Non è anche abbastanza la stessa operazione. (Il fatto che anche la cella scelta sia attivata / disattivata rende questo significativamente più complicato.)
Martin Ender,

Posso richiedere l'ingresso come <grid><RETURN><coordinate_x><RETURN><coordinate_y><RETURN>?
cat

qualunque sia il formato e la separazione : ciò significa che possono essere input separati (ovvero "separatore" è il tasto "invio")?
Luis Mendo

@LuisMendo Sì, se funziona.
EEEEEEridan,

Risposte:


3

CJam, 37 36 byte

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

L'input dovrebbe avere prima la griglia, usando due caratteri non NULL che differiscono solo nell'ultimo bit (so 0e 1work), seguito da un elenco di coppie di coordinate in stile CJam.

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

Provalo qui.


3

Dyalog APL, 20 byte

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

Questa è una funzione diadica che prende la griglia iniziale a destra e l'elenco delle coordinate a sinistra.

Per inserire una singola coppia di coordinate, utilizzare ad es. (⊂2 3)Come argomento sinistro.

Provalo qui .


1

MATL , 39 byte

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

L'input ha la forma seguente (l'esempio corrisponde all'input di esempio 2 nella sfida):

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

Il primo input è una matrice che definisce la griglia di 0e 1. ;è il separatore di riga. Il secondo input è una matrice di coppie di coordinate, in cui ogni colonna è una coppia.

Esempio

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

Spiegazione

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

per favore fatemi sapere se esiste un compilatore online disponibile per
matl

Non ancora online, scusa. Solo quello basato su Matlab che ho collegato nel titolo
Luis Mendo il

0

Ruby 114 byte

Accetta come input:

g, una matrice di matrici che rappresentano la griglia iniziale.

o, una matrice di punti, ogni punto essendo una matrice con due elementi, come [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""}}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.