拨动开关


17

在黑暗的房间中醒来后,您会看到带有相应开关的矩形灯光网格。您决定使用一个坐标系,其左下方的灯代表(1,1),并且坐标随着向上(y方向)和向右(x方向)的增加而增加。网格的相同之处在于,将(a,b)处的开关拨动可切换(a,b)处的光以及与()在同一列或同一行的光a,b)。

您的输入将是一个由两个不同的字符组成的矩形网格,分别表示打开和关闭(我分别使用1和0)。同样,输入的一部分将是一系列至少一个坐标对(具有所需的任何格式和分隔符)的序列,它们代表您要翻转的开关。

输出将是同一网格,在作为输入提供的每个坐标对上将应用“翻转”。您可以选择如何格式化输入,尽管输出必须是网格,而不是数组。


样品

样品输入1

111111
111111
111111
111111

(3,2)

样品输出1

110111
110111
000000
110111

样品输入2

01101
10100
00010
11111
10110

(1,1), (5,5)

样品输出2

00010
00101
10011
01110
01000

样品输入3

1

(1,1)

样品输出3

0

样品输入4

00000
11111
00000
11111

(2,3), (2,3)

样品输出4

00000
11111
00000
11111

这是代码高尔夫。适用标准规则。以字节为单位的最短代码获胜。


相关:codegolf.stackexchange.com/questions/65738/crack-the-safe。不一样的问题。另一个挑战的目标是找出要做出的动作,这是关于应用给定动作列表的。
Reto Koradi 2015年

@RetoKoradi这也是不相同的操作。(所选单元格本身也被切换的事实使这一点变得非常棘手。)
Martin Ender 2015年

我可以要求输入像<grid><RETURN><coordinate_x><RETURN><coordinate_y><RETURN>吗?

哪种格式和分隔符:是否意味着它们可以是独立的输入(即“分隔符”是“输入”键)?
路易斯·门多

@LuisMendo是的,如果可行。
EEEEEEridan 2015年

Answers:


3

CJam,37 36字节

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

输入应首先具有网格,使用仅在最后一位(so 01work)不同的任何两个非NULL字符,然后是CJam样式的坐标对列表。

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

在这里测试。


3

Dyalog APL,20个字节

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

这是一个二进位函数,在右边采用初始网格,在左边采用坐标列表。

要输入单个坐标对,请使用例如 (⊂2 3)作为左参数。

在这里尝试。


1

MATL,39字节

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

输入具有以下形式(示例对应于质询中的样本输入2):

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

第一输入是定义的网格中的矩阵01;是行分隔符。第二个输入是坐标对矩阵,其中每一都是一对。

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

说明

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

尚未在线,对不起。只有基于Matlab的一个我在标题链接
路易斯Mendo

0

Ruby 114字节

作为输入:

g,代表起始网格的数组的数组。

o,是一个点数组,每个点都是一个包含两个元素的数组,例如[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""}}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.