Я недавно играл в « The Weaver », и я думаю, что это представляет интересную проблему для code-golf .
Предпосылка:
Ткач - это игра, в которой вам дают несколько лент, идущих с двух направлений на 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]
Последний пример относится к этому случаю (если это облегчает визуализацию):
Это код-гольф, поэтому выигрывает самый короткий ответ в байтах для каждого языка.