Ich habe kürzlich ' The Weaver ' durchgespielt und ich denke, es ist eine interessante Herausforderung für Code-Golf .
Prämisse:
Der Weaver ist ein Spiel, bei dem Sie eine Reihe von Bändern aus zwei Richtungen erhalten, die um 90 Grad voneinander entfernt sind. Ihr Ziel ist es, diese an bestimmten Kreuzungen zu vertauschen, um die gewünschte Ausgabe zu erzielen.
So: Dies ist ein Tausch: Dies ist nicht:
Eingang:
3 Arrays:
- Obere Bänder (von links nach rechts)
- Linke Bänder (von oben nach unten)
- Die Koordinaten der zu tauschenden Kreuzungen
Ausgabe:
2 Arrays:
- Untere Bänder (von links nach rechts)
- Rechte Bänder (von oben nach unten)
Beispiele:
Ich werde das obige Bild als erstes Beispiel verwenden:
Eingang: [r, y, b], [r, y, b], [(0, 1), (2, 1), (2, 2)]
Was geschieht:
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
Wo •
steht ein Swap.
Ausgabe: [r, b, r], [y, y, b]
Eingang: [a, b, c], [d, e, f], [(0, 0), (2, 1)]
Was geschieht:
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
Ausgabe: [d, f, c], [a, e, b]
Eingang: [a, b], [a, b, c], [(0, 1), (1, 0), (1, 1), (2, 0), (2, 1), (3, 1)]
Was geschieht:
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
Ausgabe: [c, b], [b, a, a]
Anmerkungen:
- Die Beispiele zeigen die angegebenen Koordinaten, als
(row, column)
ob Sie sie als annehmen könnten(column, row)
. - Die obere Reihe und die linke Spalte können Bänder derselben Farbe aufweisen
- Die Platte kann rechteckig sein
- Alle Koordinaten sind nicht negativ (
>=0
) (oder streng positiv (>=1
), wenn Sie 1-Indizierung wählen) - Ignorieren Sie alle Swaps, die sich außerhalb des Boards befinden
- Sie können wählen, ob Sie mit Buchstaben (
[a-zA-Z]
), ganzen Zahlen ([0-9]
) oder beidem arbeiten möchten - Die Bänder in Ihrer Ausgabe müssen genau mit den Bändern in der Eingabe übereinstimmen (
a -> a
) - Sie können davon ausgehen, dass die Liste der Swaps nach Belieben sortiert ist, solange sie konsistent ist (wenn ja, geben Sie bitte an, wie sie sortiert werden soll).
- Sie können die Swap-Koordinaten als 0 oder 1-indiziert annehmen
- Standardlücken sind verboten
Mehr Beispiele:
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]
Das letzte Beispiel bezieht sich auf diesen Fall (falls dies die Visualisierung erleichtert):
Dies ist Codegolf, daher gewinnt die kürzeste Antwort in Bytes für jede Sprache.