Balikkan sakelar

17

Setelah Anda bangun di ruangan gelap, Anda melihat kisi lampu persegi panjang dengan sakelar yang sesuai. Anda memutuskan untuk menggunakan sistem koordinat dengan lampu kiri bawah mewakili (1,1) dan koordinat meningkat ketika Anda naik (arah y) dan ke kanan (arah x). Kisi-kisi identik dalam membalik saklar pada (a, b) matikan (beralih dari mati ke hidup atau mati ke mati) lampu di (a, b) serta lampu di kolom yang sama atau baris yang sama seperti ( a, b).

Input Anda akan berupa kotak persegi panjang dari dua karakter berbeda yang mewakili on dan off (masing-masing saya menggunakan 1 dan 0). Juga, bagian dari input akan menjadi serangkaian setidaknya satu pasangan koordinat (dengan format dan pemisahan apa pun yang Anda inginkan) yang akan mewakili switch yang Anda flip.

Outputnya akan menjadi grid yang sama, dengan "flip" diterapkan pada masing-masing pasangan koordinat yang diberikan sebagai input. Anda dapat memilih cara memformat input Anda, meskipun output harus berupa kisi, bukan array.


Sampel

Masukan sampel 1

111111
111111
111111
111111

(3,2)

Output sampel 1

110111
110111
000000
110111

Masukan sampel 2

01101
10100
00010
11111
10110

(1,1), (5,5)

Keluaran sampel 2

00010
00101
10011
01110
01000

Masukan sampel 3

1

(1,1)

Keluaran sampel 3

0

Masukan sampel 4

00000
11111
00000
11111

(2,3), (2,3)

Output sampel 4

00000
11111
00000
11111

Ini kode golf. Aturan standar berlaku. Kode terpendek dalam byte menang.

EEEEEEridan
sumber
Terkait: codegolf.stackexchange.com/questions/65738/crack-the-safe . Bukan masalah yang sama. Tujuan dari tantangan lainnya adalah untuk mengetahui gerakan mana yang harus dibuat, yang satu ini adalah tentang menerapkan daftar gerakan tertentu.
Reto Koradi
@RetoKoradi Ini juga tidak cukup operasi yang sama. (Fakta bahwa sel yang dipilih itu sendiri juga di-toggle membuat ini jauh lebih rumit.)
Martin Ender
Dapatkah saya meminta input seperti apa <grid><RETURN><coordinate_x><RETURN><coordinate_y><RETURN>?
kucing
format dan pemisahan mana saja : Apakah itu berarti mereka dapat menjadi input yang terpisah (yaitu, "separator" adalah kunci "enter")?
Luis Mendo
@LuisMendo Ya, jika itu berhasil.
EEEEEEridan

Jawaban:

3

CJam, 37 36 byte

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

Input harus memiliki grid terlebih dahulu, menggunakan dua karakter non-NULL yang hanya berbeda dalam bit terakhir (begitu 0dan 1berfungsi), diikuti oleh daftar pasangan koordinat gaya CJam.

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

Uji di sini.

Martin Ender
sumber
3

Dyalog APL, 20 byte

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

Ini adalah fungsi diad yang mengambil kisi awal di kanan dan daftar koordinat di sebelah kiri.

Untuk memasukkan satu pasangan koordinat, gunakan mis (⊂2 3)sebagai argumen kiri.

Coba di sini .

lirtosiast
sumber
1

MATL , 39 byte

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

Input berupa bentuk berikut (contohnya sesuai dengan sampel input 2 pada tantangan):

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

Input pertama adalah matriks yang mendefinisikan grid 0dan 1. ;adalah pemisah baris. Input kedua adalah matriks pasangan koordinat, di mana masing-masing kolom adalah pasangan.

Contoh

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

Penjelasan

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
sumber
tolong beri tahu saya jika ada kompiler online yang tersedia untuk matl
Abr001am
Belum online, maaf. Hanya yang berbasis Matlab yang saya tautkan dalam judul
Luis Mendo
0

Ruby 114 byte

Dibawa sebagai input:

g, array array yang mewakili grid awal.

o, array poin, setiap titik menjadi array dengan dua elemen, seperti [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
sumber