Переверніть вимикачі


17

Після пробудження в темній кімнаті ви бачите прямокутну сітку вогнів з відповідними вимикачами. Ви вирішили використовувати систему координат із лівим нижнім літнім світлом (1,1) та координатами, що збільшуються, коли ви піднімаєтеся вгору (напрямок y) та праворуч (х напрямок). Сітки ідентичні тим, що перемикаючи перемикач на (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 . Однак це не та сама проблема. Мета іншого виклику полягала в тому, щоб з'ясувати, які кроки зробити, у цьому йдеться про застосування певного списку кроків.
Рето Кораді

@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

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

Приклад

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

Ще не в мережі, вибачте. Тільки на базі Матлаба, який я пов’язав у назві
Луїс Мендо

0

Рубін 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""}}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.