我最近一直在玩' The Weaver ',我认为这对代码高尔夫提出了一个有趣的挑战。
前提:
韦弗(Weaver)游戏是一种游戏,其中给您提供了多个丝带,它们分别来自两个方向,彼此成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
其中•
代表交换。
输出: [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]
最后一个示例与此案例有关(如果这样可以更容易地可视化):
这是代码高尔夫球,因此每种语言的最短答案以字节为单位。