J'ai récemment joué à travers " The Weaver " et je pense que cela présente un défi intéressant pour le code-golf .
Prémisse:
The Weaver est un jeu dans lequel on vous donne un certain nombre de rubans provenant de 2 directions à 90 degrés et votre objectif est de les échanger à certaines intersections pour obtenir une sortie souhaitée.
Comme ceci: Ceci est un échange: Ce n'est pas:
Contribution:
3 tableaux:
- Rubans supérieurs (de gauche à droite)
- Rubans gauches (de haut en bas)
- Les coordonnées des intersections à échanger
Production:
2 tableaux:
- Rubans inférieurs (de gauche à droite)
- Rubans droits (de haut en bas)
Exemples:
Je vais utiliser l'image ci-dessus comme premier exemple:
Contribution: [r, y, b], [r, y, b], [(0, 1), (2, 1), (2, 2)]
Ce qui se produit:
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
Où •
représente un échange.
Production: [r, b, r], [y, y, b]
Contribution: [a, b, c], [d, e, f], [(0, 0), (2, 1)]
Ce qui se produit:
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
Production: [d, f, c], [a, e, b]
Contribution: [a, b], [a, b, c], [(0, 1), (1, 0), (1, 1), (2, 0), (2, 1), (3, 1)]
Ce qui se produit:
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
Production: [c, b], [b, a, a]
Remarques:
- Les exemples montrent les coordonnées données comme
(row, column)
si vous pouviez les prendre comme(column, row)
. - La rangée du haut et la colonne de gauche peuvent avoir des rubans de la même couleur
- La planche peut être rectangulaire
- Toutes les coordonnées seront non négatives (
>=0
) (ou strictement positives (>=1
) si vous choisissez 1-indexation) - Ignorez les swaps qui sont en dehors du forum
- Vous pouvez choisir de travailler avec des lettres (
[a-zA-Z]
), des entiers ([0-9]
) ou les deux - Les rubans de votre sortie doivent correspondre exactement aux rubans de l'entrée (
a -> a
) - Vous pouvez supposer que la liste des swaps est triée comme vous le souhaitez, tant qu'elle est cohérente (si vous le faites, veuillez spécifier comment elle doit être triée)
- Vous pouvez prendre les coordonnées d'échange comme 0 ou 1 indexées
- Les failles par défaut sont interdites
Plus d'exemples:
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]
Le dernier exemple concerne ce cas (si cela facilite la visualisation):
Il s'agit de code-golf, donc la réponse la plus courte en octets pour chaque langue l'emporte.