Lege die Schalter um

17

Nachdem Sie in einem dunklen Raum aufgewacht sind, sehen Sie ein rechteckiges Lichtgitter mit entsprechenden Schaltern. Sie entscheiden sich für ein Koordinatensystem, bei dem das untere linke Licht (1,1) darstellt und die Koordinaten mit zunehmender Steigung (y-Richtung) und nach rechts (x-Richtung) zunehmen. Die Gitter sind insofern identisch, als durch Umlegen des Schalters bei (a, b) das Licht bei (a, b) sowie die Lichter in derselben Spalte oder derselben Zeile wie ( a, b).

Ihre Eingabe besteht aus einem rechteckigen Raster mit zwei unterschiedlichen Zeichen, die für Ein und Aus stehen (ich verwende jeweils 1 und 0). Außerdem besteht ein Teil der Eingabe aus einer Reihe von mindestens einem Koordinatenpaar (mit dem von Ihnen gewünschten Format und Abstand), das die von Ihnen umgedrehten Schalter darstellt.

Die Ausgabe ist dasselbe Raster, wobei die "Umkehrung" auf jedes der Koordinatenpaare angewendet wird, die als Eingabe angegeben wurden. Sie können festlegen, wie Ihre Eingabe formatiert werden soll. Die Ausgabe muss jedoch ein Raster und kein Array sein.


Proben

Probeneingabe 1

111111
111111
111111
111111

(3,2)

Beispielausgabe 1

110111
110111
000000
110111

Probeneingabe 2

01101
10100
00010
11111
10110

(1,1), (5,5)

Beispielausgabe 2

00010
00101
10011
01110
01000

Probeneingabe 3

1

(1,1)

Beispielausgabe 3

0

Probeneingabe 4

00000
11111
00000
11111

(2,3), (2,3)

Beispielausgabe 4

00000
11111
00000
11111

Das ist Code Golf. Es gelten Standardregeln. Kürzester Code in Bytes gewinnt.

EEEEEEridan
quelle
Siehe auch : codegolf.stackexchange.com/questions/65738/crack-the-safe . Nicht das gleiche Problem. Das Ziel der anderen Herausforderung war es, herauszufinden, welche Züge gemacht werden müssen. In dieser geht es darum, eine vorgegebene Liste von Zügen anzuwenden.
Reto Koradi
@RetoKoradi Es ist auch nicht ganz der gleiche Vorgang. (Die Tatsache, dass die ausgewählte Zelle selbst auch umgeschaltet ist, macht dies erheblich schwieriger.)
Martin Ender
Kann ich die Eingabe so anfordern <grid><RETURN><coordinate_x><RETURN><coordinate_y><RETURN>?
Katze
Unabhängig von Format und Trennung : Bedeutet dies, dass es sich um separate Eingaben handeln kann (dh "Trennzeichen" ist die Eingabetaste)?
Luis Mendo
@ LuisMendo Ja, wenn das funktioniert.
EEEEEEridan

Antworten:

3

CJam, 37 36 Bytes

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

Die Eingabe sollte zuerst das Raster enthalten, wobei zwei beliebige Nicht-NULL-Zeichen verwendet werden, die sich nur im letzten Bit (also 0und 1work) unterscheiden, gefolgt von einer CJam-ähnlichen Liste von Koordinatenpaaren.

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

Teste es hier.

Martin Ender
quelle
3

Dyalog APL, 20 Bytes

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

Dies ist eine dyadische Funktion, die das Anfangsgitter rechts und die Koordinatenliste links verwendet.

Um ein einzelnes Koordinatenpaar einzugeben, verwenden Sie zB (⊂2 3)als linkes Argument.

Probieren Sie es hier aus .

Lirtosiast
quelle
1

MATL , 39 Bytes

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

Die Eingabe hat die folgende Form (das Beispiel entspricht der Beispieleingabe 2 in der Challenge):

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

Die erste Eingabe ist eine Matrix, die das Raster von 0und definiert 1. ;ist das Zeilentrennzeichen. Die zweite Eingabe ist eine Matrix von Koordinatenpaaren, wobei jede Spalte ein Paar ist.

Beispiel

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

Erläuterung

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
quelle
Bitte lassen Sie mich wissen, ob für matl
Abr001am
Leider noch nicht online. Nur das Matlab-basierte, das ich im Titel verlinkt habe
Luis Mendo
0

Ruby 114 Bytes

Nimmt als Eingabe:

gein Array von Arrays, die das Startgitter darstellen.

oein Array von Punkten, wobei jeder Punkt ein Array mit zwei Elementen ist, wie [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
quelle