Lật công tắc


17

Sau khi bạn thức dậy trong một căn phòng tối, bạn sẽ thấy một lưới đèn hình chữ nhật với các công tắc tương ứng. Bạn quyết định sử dụng hệ tọa độ với ánh sáng bên trái phía dưới đại diện cho (1,1) và tọa độ tăng dần khi bạn đi lên (hướng y) và sang phải (hướng x). Các lưới giống hệt nhau trong việc lật công tắc tại (a, b) bật (tắt từ tắt sang bật hoặc tắt) đèn ở (a, b) cũng như đèn trong cùng một cột hoặc cùng hàng với ( a, b).

Đầu vào của bạn sẽ là một lưới hình chữ nhật gồm hai ký tự riêng biệt đại diện cho bật và tắt (tôi sử dụng lần lượt 1 và 0). Ngoài ra, một phần của đầu vào sẽ là một chuỗi gồm ít nhất một cặp tọa độ (với bất kỳ định dạng và phân tách nào bạn muốn) sẽ đại diện cho các công tắc mà bạn lật.

Đầu ra sẽ là cùng một lưới, với "lật" được áp dụng ở mỗi cặp tọa độ được đưa ra làm đầu vào. Bạn có thể chọn cách định dạng đầu vào của mình, mặc dù đầu ra phải là một lưới, không phải là một mảng.


Mẫu

Mẫu đầu vào 1

111111
111111
111111
111111

(3,2)

Sản lượng mẫu 1

110111
110111
000000
110111

Mẫu đầu vào 2

01101
10100
00010
11111
10110

(1,1), (5,5)

Sản lượng mẫu 2

00010
00101
10011
01110
01000

Mẫu đầu vào 3

1

(1,1)

Sản lượng mẫu 3

0

Mẫu đầu vào 4

00000
11111
00000
11111

(2,3), (2,3)

Sản lượng mẫu 4

00000
11111
00000
11111

Đây là mã golf. Quy tắc tiêu chuẩn áp dụng. Mã ngắn nhất trong byte thắng.


Liên quan: codegolf.stackexchange.com/questions/65738/crack-the-safe . Không phải cùng một vấn đề, mặc dù. Mục tiêu của thử thách khác là tìm ra cách di chuyển nào, đây là về việc áp dụng một danh sách các bước di chuyển nhất định.
Reto Koradi

@RetoKoradi Nó cũng không hoàn toàn hoạt động tương tự. (Việc tế bào được chọn cũng bị thay đổi cũng khiến việc này trở nên khó khăn hơn đáng kể.)
Martin Ender

Tôi có thể yêu cầu đầu vào như thế <grid><RETURN><coordinate_x><RETURN><coordinate_y><RETURN>nào?
con mèo

Định dạng và phân tách nào : Điều đó có nghĩa là chúng có thể là các đầu vào riêng biệt (nghĩa là "dấu tách" là "nhập" khóa)?
Luis Mendo

@LuisMendo Có, nếu điều đó hoạt động.
EEEEEEridan

Câu trả lời:


3

CJam, 37 36 byte

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

Đầu vào phải có lưới trước, sử dụng bất kỳ hai ký tự không phải NULL nào chỉ khác nhau ở bit cuối cùng (vì vậy 01công việc), theo sau là danh sách các cặp tọa độ kiểu CJam.

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

Kiểm tra nó ở đây.


3

APL Dyalog, 20 byte

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

Đây là một hàm dyadic lấy lưới ban đầu ở bên phải và danh sách tọa độ bên trái.

Để nhập một cặp tọa độ đơn, sử dụng ví dụ (⊂2 3)như đối số bên trái.

Hãy thử nó ở đây .


1

MATL , 39 byte

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

Đầu vào có dạng sau (ví dụ tương ứng với đầu vào mẫu 2 trong thử thách):

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

Đầu vào đầu tiên là một ma trận xác định lưới của 01. ;là dấu phân cách hàng. Đầu vào thứ hai là một ma trận các cặp tọa độ, trong đó mỗi cột là một cặp.

Thí dụ

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

Giải trình

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

vui lòng cho tôi biết nếu có trình biên dịch trực tuyến có sẵn cho matl
Abr001am

Chưa trực tuyến, xin lỗi. Chỉ có một cái dựa trên Matlab mà tôi liên kết trong tiêu đề
Luis Mendo

0

Ruby 114 byte

Lấy làm đầu vào:

g, một mảng các mảng đại diện cho lưới bắt đầu.

o, một mảng các điểm, mỗi điểm là một mảng có hai phần tử, như [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""}}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.