Recientemente he estado jugando a través de ' The Weaver ' y creo que presenta un desafío interesante para el código golf .
Premisa:
The Weaver es un juego en el que se te dan varias cintas que vienen de 2 direcciones separadas 90 grados y tu objetivo es intercambiarlas en ciertas intersecciones para lograr el resultado deseado.
Así: Esto es un intercambio: Esto no es:
Entrada:
3 matrices:
- Cintas superiores (de izquierda a derecha)
- Cintas izquierdas (de arriba a abajo)
- Las coordenadas de las intersecciones para intercambiar
Salida:
2 matrices:
- Cintas inferiores (de izquierda a derecha)
- Cintas derechas (de arriba a abajo)
Ejemplos:
Usaré la imagen de arriba como primer ejemplo:
Entrada: [r, y, b], [r, y, b], [(0, 1), (2, 1), (2, 2)]
Lo que pasa:
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
Donde •
representa un intercambio.
Salida: [r, b, r], [y, y, b]
Entrada: [a, b, c], [d, e, f], [(0, 0), (2, 1)]
Lo que pasa:
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
Salida: [d, f, c], [a, e, b]
Entrada: [a, b], [a, b, c], [(0, 1), (1, 0), (1, 1), (2, 0), (2, 1), (3, 1)]
Lo que pasa:
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
Salida: [c, b], [b, a, a]
Notas:
- Los ejemplos muestran coordenadas dadas como
(row, column)
si pudiera tomarlas como(column, row)
. - La fila superior y la columna izquierda pueden tener cintas del mismo color.
- El tablero puede ser rectangular.
- Todas las coordenadas serán no negativas (
>=0
) (o estrictamente positivas (>=1
) si elige 1 indexación) - Ignorar cualquier intercambio que esté fuera del tablero
- Puede elegir trabajar con letras (
[a-zA-Z]
), enteros ([0-9]
) o ambos - Las cintas en su salida deben coincidir exactamente con las cintas en la entrada (
a -> a
) - Puede suponer que la lista de swaps está ordenada de la manera que desee, siempre que sea coherente (si lo hace, especifique cómo se debe ordenar)
- Puede tomar las coordenadas de intercambio como 0 o 1 indexado
- Las lagunas predeterminadas están prohibidas
Más ejemplos:
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]
El último ejemplo se relaciona con este caso (si eso facilita la visualización):
Este es el código de golf, por lo que gana la respuesta más corta en bytes para cada idioma.