スイッチをひっくり返す


17

暗い部屋で目を覚ますと、対応するスイッチが付いた長方形のライトグリッドが表示されます。座標系を使用して、左下のライトが(1,1)を表し、上方向(y方向)および右方向(x方向)に座標が増加することを決定します。グリッドは、(a、b)でスイッチを切り替えると(a、b)のライトと( a、b)。

入力は、オンとオフを表す2つの異なる文字の長方形のグリッドになります(それぞれ1と0を使用します)。また、入力の一部は、フリップするスイッチを表す一連の少なくとも1つの座標ペア(任意の形式と間隔)になります。

出力は同じグリッドになり、入力として指定された各座標ペアに「フリップ」が適用されます。入力をフォーマットする方法を選択できますが、出力は配列ではなくグリッドでなければなりません。


サンプル

サンプル入力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。ただし、同じ問題ではありません。他の課題の目標は、どの動きを行うかを見つけることでした。これは、与えられた動きのリストを適用することです。
レトコラディ

@RetoKoradiまた、まったく同じ操作ではありません。(選択したセル自体も切り替えられるという事実により、これは非常に複雑になります。)
マーティンエンダー

入力を次のようにリクエストできます<grid><RETURN><coordinate_x><RETURN><coordinate_y><RETURN>か?

どちらの形式と区切り:それは、それらが別々の入力(つまり、「セパレータ」が「エンター」キー)にできることを意味しますか?
ルイスメンドー

@LuisMendoはい、それが機能する場合。
EEEEEEridan

回答:


3

CJam、37 36バイト

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

入力には最初にグリッドがあり、最後のビット(so 01work)のみが異なる2つの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]

最初の入力は、0とのグリッドを定義する行列1です。 ;行セパレーターです。2番目の入力は座標ペアの行列で、各列はが。

>> 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で利用可能なオンラインコンパイラがあるかどうかをお知らせください
Abr001am

まだオンラインではありません、ごめんなさい。私はタイトルにリンクのみのMatlabベース1
ルイスMendo

0

Ruby 114バイト

入力として取ります:

g、開始グリッドを表す配列の配列。

o、ポイントの配列。各ポイントはなどの2つの要素を持つ配列[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""}}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.