私は最近「The Weaver」をプレイしてきましたが、これはコードゴルフにとって興味深い挑戦になると思います。
前提:
ウィーバーは、2つの方向から90度離れた多数のリボンが与えられるゲームであり、目標は、特定の交差点でそれらを交換して、所望の出力を達成することです。
このように:これはスワップです:これはそうではありません:
入力:
3つの配列:
- 上部のリボン(左から右)
- 左のリボン(上から下)
- 交換する交差点の座標
出力:
2つの配列:
- 下のリボン(左から右)
- 右リボン(上から下)
例:
最初の例として上記の画像を使用します。
入力: [r, y, b], [r, y, b], [(0, 1), (2, 1), (2, 2)]
何が起こるのですか:
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
where •
はスワップを表します。
出力: [r, b, r], [y, y, b]
入力: [a, b, c], [d, e, f], [(0, 0), (2, 1)]
何が起こるのですか:
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
出力: [d, f, c], [a, e, b]
入力: [a, b], [a, b, c], [(0, 1), (1, 0), (1, 1), (2, 0), (2, 1), (3, 1)]
何が起こるのですか:
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
出力: [c, b], [b, a, a]
ノート:
- 例では、座標をとして
(row, column)
取り扱っているように示しています(column, row)
。 - 上の行と左の列には同じ色のリボンがあります
- ボードは長方形にすることができます
- すべての座標は非負(
>=0
)(>=1
1インデックスを選択した場合は厳密に正())になります - ボード外のスワップを無視します
- 文字(
[a-zA-Z]
)、整数([0-9]
)、またはその両方を使用することを選択できます - 出力のリボンは、入力のリボンと正確に一致する必要があります(
a -> a
) - スワップのリストは、一貫している限り、任意の方法でソートされていると想定できます(その場合、ソート方法を指定してください)。
- スワップ座標を0または1のインデックスとして取得できます
- デフォルトの抜け穴は禁止されています
その他の例:
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]
最後の例は、このケースに関連しています(視覚化が容易になる場合):
これはコードゴルフなので、各言語のバイト単位の最短回答が勝ちです。