Anahtarları çevirin


17

Karanlık bir odada uyandıktan sonra, karşılık gelen anahtarlarla dikdörtgen bir ışık ızgarası görürsünüz. Sol alt ışık (1,1) 'i temsil eden bir koordinat sistemi kullanmaya karar verirsiniz ve yukarı (y yönü) ve sağa (x yönü) yükseldikçe koordinatlar artar. Izgaralar, (a, b) 'deki düğmeyi çevirmenin (a, b)' deki ışığı ve aynı sütundaki veya aynı satırdaki ışıkları ( a, b).

Girişiniz, açık ve kapalı gösteren iki ayrı karakterden oluşan dikdörtgen bir ızgara olacaktır (sırasıyla 1 ve 0 kullanıyorum). Ayrıca, girişin bir kısmı, çevirdiğiniz anahtarları temsil eden en az bir koordinat çiftinin (istediğiniz format ve ayırma ile) bir serisi olacaktır.

Çıktı aynı ızgara olacaktır ve girdi olarak verilen koordinat çiftlerinin her birine "flip" uygulanır. Çıktınızın nasıl biçimlendirileceğini seçebilirsiniz, ancak çıktının bir dizi değil ızgara olması gerekir.


Numuneler

Örnek giriş 1

111111
111111
111111
111111

(3,2)

Örnek çıktı 1

110111
110111
000000
110111

Örnek giriş 2

01101
10100
00010
11111
10110

(1,1), (5,5)

Örnek çıktı 2

00010
00101
10011
01110
01000

Örnek giriş 3

1

(1,1)

Örnek çıktı 3

0

Örnek giriş 4

00000
11111
00000
11111

(2,3), (2,3)

Örnek çıktı 4

00000
11111
00000
11111

Bu kod golf. Standart kurallar geçerlidir. Bayt cinsinden en kısa kod kazanır.


İlgili: codegolf.stackexchange.com/questions/65738/crack-the-safe . Yine de aynı sorun değil. Diğer zorluğun amacı, hangi hamlelerin yapılacağını bulmaktı, bu belirli bir hamle listesini uygulamakla ilgili.
Reto Koradi

@RetoKoradi Ayrıca değil oldukça Aynı işlem. (Seçilen hücrenin kendisinin de değiştirilmiş olması bunu önemli ölçüde daha karmaşık hale getirir.)
Martin Ender

Girişin benzer olmasını isteyebilir miyim <grid><RETURN><coordinate_x><RETURN><coordinate_y><RETURN>?
kedi

hangi format ve ayırma olursa : Bu, ayrı girişler olabileceği anlamına mı gelir (yani, "ayırıcı" "enter" anahtarıdır)?
Luis Mendo

@ LouisMendo Evet, eğer işe yararsa.
EEEEEEridan

Yanıtlar:


3

CJam, 37 36 bayt

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

Yalnızca son bitte (yani 0ve 1işte) farklılık gösteren iki NULL olmayan karakter ve ardından CJam stili bir koordinat çifti listesi içeren giriş ilk olarak ızgaraya sahip olmalıdır .

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

Burada test edin.


3

Dyalog APL, 20 bayt

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

Bu, sağdaki ilk ızgarayı ve soldaki koordinatlar listesini alan ikili bir işlevdir.

Tek bir koordinat çifti girmek için, örneğin (⊂2 3)sol argüman olarak kullanın .

Burada deneyin .


1

MATL , 39 bayt

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

Giriş aşağıdaki formdadır (örnek, testteki örnek giriş 2'ye karşılık gelir):

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

Birinci giriş ızgarasını oluşturan bir matristir 0ve 1. ;satır ayırıcıdır. İkinci girdi, her sütunun bir çift olduğu koordinat çiftlerinin bir matrisidir .

Misal

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

açıklama

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

matl için çevrimiçi bir derleyici varsa lütfen bana bildirin
Abr001am

Henüz çevrimiçi değil, üzgünüm. Sadece başlıkta bağladığım Matlab tabanlı olan
Luis Mendo

0

Yakut 114 bayt

Girdi olarak alır:

g, başlangıç ​​ızgarasını temsil eden bir dizi dizi.

o, her nokta iki elemanlı bir dizi olmak üzere bir nokta dizisidir [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""}}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.