魔兽世界的钟是一个圆形的、两面扁平的拼图。在每一边,前面和后面,有9个时钟面,排列在一个3x3网格上。此外,在时钟表面之间有4个插销(开关),它们可以设置为从前面或后面突出。最后,在拼图的边缘有4个刻度盘。你可以旋转他们来操纵四个时钟在角落,在前面和背面同时。这是一个示意图。
每个开关周围都有4个时钟,它们作为这4个时钟的锁。如果按下开关,周围任何时钟的任何移动都与其他三个时钟同步。如果没有按下开关,它们就会独立移动。然而,在这种情况下,它可以被看作是从另一边按压进来的。因此,在另一边的开关周围的4个时钟是同步的。因此,开关总是把4个时钟锁在一起,要么在前面,要么在后面。
为了保持顺时针和开关设置的一致性,我们将一边定义为正面,另一面定义为背面。如前面所示,如果按下开关,则设置为1;如果没有按下,则设置为0。
四个角时钟在前部和背面之间反向同步。如果你顺时针转动一个刻度盘,在同一位置的背面的时钟会逆时针旋转。因此,总共有14个独立时钟:4个角,5个独立在前面和5个独立在背面。
考虑一个示例,其中所有时钟设置为0 (或12),开关0设置为1,其他开关设置为0。如果我们将拨号0转到位置2,就会发生以下情况:
现在考虑相同的例子,但是这两个开关0和3被设置为1,而开关1和2被设置为0。如果我们再次将拨号0转到第2位置,则会发生以下情况:
这个谜题的目的是把所有的时钟都设为0。你可以通过翻转开关和适当地转动刻度盘来做到这一点。这也是挑战的任务。
挑战
给定前后时钟的有效设置,输出一系列开关设置和拨号匝数,将所有时钟设置为0。
Example input: [9, 9, 0, 9, 9, 0, 9, 9, 0], [3, 0, 0, 0, 0, 0, 3, 0, 0]
Example output: [0, 2, (2, 3)]
| | +---- Dial turn
+--+---------- Switch flips
Step-by-step:
Current state
Switches: 0 0 0 0
Front: Back:
9 9 0 | 3 0 0
9 9 0 | 0 0 0
9 9 0 | 3 0 0
Flipping switch 0
Flipping switch 2
Turning dial 2; 3 times
Current state
Switches: 1 0 1 0
Front: Back:
0 0 0 | 0 0 0
0 0 0 | 0 0 0
0 0 0 | 0 0 0
Example input: [11, 0, 11, 8, 8, 8, 8, 8, 8], [1, 1, 1, 1, 1, 1, 4, 0, 4]
Example output: [2, 3, (2, 4), (1, 1)]
Step-by-step:
Current state
Switches: 0 0 0 0
Front: Back:
11 0 11 | 1 1 1
8 8 8 | 1 1 1
8 8 8 | 4 0 4
Flipping switch 2
Flipping switch 3
Turning dial 2; 4 times
Current state
Switches: 0 0 1 1
Front: Back:
11 0 11 | 1 1 1
0 0 0 | 1 1 1
0 0 0 | 0 0 0
Turning dial 1; 1 times
Current state
Switches: 0 0 1 1
Front: Back:
0 0 0 | 0 0 0
0 0 0 | 0 0 0
0 0 0 | 0 0 0
Example input: [3, 11, 0, 11, 11, 5, 2, 11, 1], [9, 8, 0, 8, 8, 4, 10, 8, 11]
Example output: [1, 3, (2, 9), (0, 7), 0, 1, 2, 3, (0, 6), 2, 3, (3, 7), 0, 1, 2, 3, (0, 4)]
Step-by-step:
Current state
Switches: 0 0 0 0
Front: Back:
3 11 0 | 9 8 0
11 11 5 | 8 8 4
2 11 1 | 10 8 11
Flipping switch 1
Flipping switch 3
Turning dial 2; 9 times
Current state
Switches: 0 1 0 1
Front: Back:
0 11 0 | 0 11 0
11 11 5 | 11 11 4
11 11 1 | 1 11 11
Turning dial 0; 7 times
Current state
Switches: 0 1 0 1
Front: Back:
7 11 0 | 5 4 0
11 11 5 | 4 4 4
6 11 1 | 6 4 11
Flipping switch 0
Flipping switch 1
Flipping switch 2
Flipping switch 3
Turning dial 0; 6 times
Current state
Switches: 1 0 1 0
Front: Back:
1 5 0 | 11 4 0
5 5 5 | 4 4 4
0 5 1 | 0 4 11
Flipping switch 2
Flipping switch 3
Turning dial 3; 7 times
Current state
Switches: 1 0 0 1
Front: Back:
8 0 0 | 4 4 0
0 0 0 | 4 4 4
0 0 8 | 0 4 4
Flipping switch 0
Flipping switch 1
Flipping switch 2
Flipping switch 3
Turning dial 0; 4 times
Current state
Switches: 0 1 1 0
Front: Back:
0 0 0 | 0 0 0
0 0 0 | 0 0 0
0 0 0 | 0 0 0
发布于 2022-02-04 14:19:51
§≔θ⁰⁺§θ⁰↨§θ⁴±¹F⁴«≔§θI§5731ιζ≔⁺§θI§2860ι↨ζ±¹εF²«IE⁴∧κ⁼¹﹪⁻λι⁴I⟦⟦ι﹪⎇κε±ε¹²⟧⟧F²«IE⁴⁼‹λ﹪⁻μι⁴κI⟦⟦ι﹪×∨κ±¹⎇λ§ζκ⁻∧¬ι§§θ⁴κ§ζκ¹²
在网上试试!链接是详细的代码版本。将输入作为一个由9个时钟组成的数组,其中一个为角时钟的单个值,另一个为其他时钟的两个值的数组,并输出六个整数的列表:前四个是从左上角顺时针方向旋转的指针状态,第五个是以整数形式旋转的刻度盘(按顺时针方向计数,左上角为0
),第六个是(顺时针方向的)值,从0
(不移除不必要的移动)到11
。解释:
§≔θ⁰⁺§θ⁰↨§θ⁴±¹
第一组旋转将通过旋转左上角时钟来纠正中心时钟,所以在这里修正它的值。
F⁴«
在每个拨号盘上循环。
≔§θI§5731ιζ
把这对钟按顺时针方向从那个刻度盘上取下来。
≔⁺§θI§2860ι↨ζ±¹ε
时钟两个时钟顺时针方向(即下一个刻度盘的时钟)将被这些时钟的差旋转,因此在这里得到最后的值。
F²«
( a)旋转其他时钟以与下一个角相匹配,或将所有时钟转回正午,或( b)按顺时针方向或其相反方向固定时钟。
IE⁴∧κ⁼¹﹪⁻λι⁴I⟦⟦ι﹪⎇κε±ε¹²⟧⟧
启用除下一个角或所有钉外的所有挂钩,然后适当地旋转当前刻度盘。这两次旋转固定了那个时钟。
F²«
顺时针旋转三个时钟,并逆时针旋转。
IE⁴⁼‹λ﹪⁻μι⁴κI⟦⟦ι﹪×∨κ±¹⎇λ§ζκ⁻∧¬ι§§θ⁴κ§ζκ¹²
要么只启用表盘的挂钩,要么使刻度盘的指针和下一个刻度盘的挂钩同时启用,要么为倒转时钟启用除这些挂钩以外的所有挂钩,然后适当地旋转当前刻度盘,包括在第一次旋转时调整中心刻度盘。
该解决方案基本上依赖于两种组合:
通过按自定义顺序接受时钟,可以将字节数减少到105:
≔⊟θη⊞θ⁺⊟θ↨η±¹F⁴«≔§θ⊗ιζ≔⁺§θ⊕⊗ι↨ζ±¹εF²«IE⁴∧κ⁼¹﹪⁻λι⁴I⟦⟦ι﹪⎇κε±ε¹²⟧⟧F²«IE⁴⁼‹λ﹪⁻μι⁴κI⟦⟦ι﹪×∨κ±¹⎇λ§ζκ⁻∧¬ι§ηκ§ζκ¹²
在网上试试!链接是详细的代码版本。取顺序为右、右上、下、右、左、左、上、左、中的时钟。
https://codegolf.stackexchange.com/questions/242274
复制相似问题