Di recente ho giocato a " The Weaver " e penso che rappresenti una sfida interessante per il code-golf .
Premessa:
Il tessitore è un gioco in cui ti viene dato un numero di nastri che provengono da 2 direzioni a 90 gradi di distanza e il tuo obiettivo è quello di scambiarli a determinate intersezioni per ottenere l'output desiderato.
In questo modo: questo è uno scambio: questo non è:
Ingresso:
3 matrici:
- Nastri superiori (da sinistra a destra)
- Nastri sinistri (dall'alto verso il basso)
- Le coordinate delle intersezioni da scambiare
Produzione:
2 matrici:
- Nastri inferiori (da sinistra a destra)
- Nastri di destra (dall'alto verso il basso)
Esempi:
Userò l'immagine sopra come primo esempio:
Ingresso: [r, y, b], [r, y, b], [(0, 1), (2, 1), (2, 2)]
Che succede:
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
Dove •
rappresenta uno scambio.
Produzione: [r, b, r], [y, y, b]
Ingresso: [a, b, c], [d, e, f], [(0, 0), (2, 1)]
Che succede:
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
Produzione: [d, f, c], [a, e, b]
Ingresso: [a, b], [a, b, c], [(0, 1), (1, 0), (1, 1), (2, 0), (2, 1), (3, 1)]
Che succede:
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
Produzione: [c, b], [b, a, a]
Appunti:
- Gli esempi mostrano le coordinate fornite come
(row, column)
se potessi prenderle come(column, row)
. - La riga superiore e la colonna sinistra possono avere nastri dello stesso colore
- La scheda può essere rettangolare
- Tutte le coordinate saranno non negative (
>=0
) (o strettamente positive (>=1
) se si sceglie 1-indicizzazione) - Ignora eventuali swap esterni alla scheda
- Puoi scegliere di lavorare con lettere (
[a-zA-Z]
), numeri interi ([0-9]
) o entrambi - I nastri nell'output devono corrispondere esattamente ai nastri nell'input (
a -> a
) - Si può presumere che l'elenco degli swap sia ordinato nel modo desiderato, purché sia coerente (in tal caso, si prega di specificare come deve essere ordinato)
- È possibile prendere le coordinate di scambio come 0 o 1 indicizzate
- Sono vietate le scappatoie predefinite
Altri esempi:
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]
L'ultimo esempio riguarda questo caso (se ciò semplifica la visualizzazione):
Questo è code-golf, quindi vince la risposta più breve in byte per ogni lingua.