Нажмите на выключатели

17

Проснувшись в темной комнате, вы увидите прямоугольную сетку огней с соответствующими переключателями. Вы решаете использовать систему координат с нижним левым источником света, представляющим (1,1), и координаты увеличиваются по мере того, как вы идете вверх (направление y) и вправо (направление x). Сетки идентичны в том, что при переключении переключателя в (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

Это код гольф. Стандартные правила применяются. Самый короткий код в байтах побеждает.

EEEEEEridan
источник
Связанный: 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*

Сначала вход должен иметь сетку, используя любые два отличных от NULL символа, которые отличаются только последним битом (так 0и 1работает), а затем список пар координат в стиле CJam.

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

Проверьте это здесь.

Мартин Эндер
источник
3

Dyalog APL, 20 байтов

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

Это двоичная функция, которая берет начальную сетку справа и список координат слева.

Чтобы ввести одну пару координат, используйте, например, (⊂2 3)в качестве левого аргумента.

Попробуй это здесь .

lirtosiast
источник
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. ;это разделитель строк. Второй вход представляет собой матрицу координатных пар, где каждый столбец является парой.

пример

>> 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, который я указывал в названии
Луис Мендо
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""}}
MegaTom
источник