Нещодавно я грав через " The Weaver " і думаю, що це цікавий виклик для коду-гольфу .
Приміщення:
The Weaver - це гра, в якій вам дають ряд стрічок, що виходять з двох напрямків на відстань 90 градусів один від одного, і ваша мета - поміняти їх на певних перехрестях, щоб досягти бажаного виходу.
Ось так: Це своп: Це не:
Вхід:
3 масиви:
- Верхні стрічки (зліва направо)
- Ліві стрічки (зверху вниз)
- Координати перехресть, які потрібно міняти місцями
Вихід:
2 масиви:
- Нижні стрічки (зліва направо)
- Праві стрічки (зверху вниз)
Приклади:
Я буду використовувати перший образ як перший приклад:
Вхід: [r, y, b], [r, y, b], [(0, 1), (2, 1), (2, 2)]
Що сталося:
r y b
r y b
r r r r•y y y y
r r b
y y y y y y y y
r r b
b b b b•r r•b b
r b r
r b r
Де •
являє собою своп.
Вихід: [r, b, r], [y, y, b]
Вхід: [a, b, c], [d, e, f], [(0, 0), (2, 1)]
Що сталося:
a b c
a b c
d d•a a a a a a
d b c
e e e e e e e e
d b c
f f f f•b b b b
d f c
d f c
Вихід: [d, f, c], [a, e, b]
Вхід: [a, b], [a, b, c], [(0, 1), (1, 0), (1, 1), (2, 0), (2, 1), (3, 1)]
Що сталося:
a b
a b
a a a a•b b
a a
b b•a a•a a
b a
c c•b b•a a
c b
c b
Вихід: [c, b], [b, a, a]
Примітки:
- Приклади показують координати, задані так,
(row, column)
ніби ви можете їх прийняти як(column, row)
. - У верхньому рядку та в лівій колонці можуть бути стрічки одного кольору
- Дошка може бути прямокутною
- Усі координати будуть негативними (
>=0
) (або строго позитивними (>=1
), якщо ви виберете 1-індексацію) - Ігноруйте будь-які свопи, які знаходяться поза дошкою
- Ви можете працювати з буквами (
[a-zA-Z]
), цілими числами ([0-9]
) або обома - Стрічки на виході повинні точно відповідати стрічкам на вході (
a -> a
) - Ви можете припустити, що список свопів відсортований будь-яким потрібним способом, якщо він є послідовним (якщо ви це зробите, будь ласка, вкажіть, як його слід сортувати)
- Ви можете приймати координати свопу як 0 або 1-індексованими
- Бійниці за замовчуванням заборонені
Більше прикладів:
Input:
[b], [r], []
Output:
[b], [r]
Input:
[b], [r], [(0, 0)]
Output:
[r], [b]
Input:
[r, p, y], [r, y, p], [(0, 0), (1, 2), (2, 1), (3, 2)]
Output:
[r, p, y], [r, y, p]
Input:
[b, y, o, r],
[r, o, b, y],
[(0, 0), (2, 0), (3, 2)]
Output:
[b, y, y, r],
[b, o, r, o]
Останній приклад стосується цього випадку (якщо це полегшує візуалізацію):
Це код-гольф, тому найкоротша відповідь у байтах за кожну мову виграє.