Estive recentemente jogando ' The Weaver ' e acho que isso representa um desafio interessante para o código-golfe .
Premissa:
O Weaver é um jogo no qual você recebe um número de fitas vindas de 2 direções a 90 graus de distância e seu objetivo é trocá-las em determinadas interseções para obter a saída desejada.
Assim: Isso é uma troca: Isso não é:
Entrada:
3 matrizes:
- Fitas superiores (da esquerda para a direita)
- Fitas esquerdas (de cima para baixo)
- As coordenadas das interseções para trocar
Resultado:
2 matrizes:
- Fitas inferiores (da esquerda para a direita)
- Fitas direitas (de cima para baixo)
Exemplos:
Vou usar a imagem acima como o primeiro exemplo:
Entrada: [r, y, b], [r, y, b], [(0, 1), (2, 1), (2, 2)]
O que acontece:
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
Onde •
representa uma troca.
Resultado: [r, b, r], [y, y, b]
Entrada: [a, b, c], [d, e, f], [(0, 0), (2, 1)]
O que acontece:
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
Resultado: [d, f, c], [a, e, b]
Entrada: [a, b], [a, b, c], [(0, 1), (1, 0), (1, 1), (2, 0), (2, 1), (3, 1)]
O que acontece:
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
Resultado: [c, b], [b, a, a]
Notas:
- Os exemplos mostram as coordenadas fornecidas como
(row, column)
se você pudesse tomá-las como(column, row)
. - A linha superior e a coluna esquerda podem ter fitas da mesma cor
- A placa pode ser retangular
- Todas as coordenadas serão não-negativas (
>=0
) (ou estritamente positivas (>=1
) se você escolher a indexação 1) - Ignore todos os swaps que estão fora do quadro
- Você pode optar por trabalhar com letras (
[a-zA-Z]
), números inteiros ([0-9]
) ou ambos - As fitas na sua saída devem corresponder exatamente às fitas na entrada (
a -> a
) - Você pode presumir que a lista de trocas é classificada da maneira que desejar, desde que seja consistente (se o fizer, especifique como deve ser classificada)
- Você pode assumir as coordenadas de troca como 0 ou 1 indexado
- As brechas padrão são proibidas
Mais exemplos:
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]
O último exemplo refere-se a este caso (se isso facilita a visualização):
Isso é código-golfe, e a resposta mais curta em bytes para cada idioma vence.