我有一个曲柄操作的音乐盒,可以播放四个音符。当我转动曲柄时,它会根据曲柄的位置和转动的方向拔出四根弦之一。当曲柄向北旋转时,此框(其字符串从1到4编号)如下所示:
1 | 2
|
O
4 3
从那里,我可以顺时针旋转曲柄以拔出#2弦,然后将曲柄指向东:
1 2
O---
4 3
或者,我也可以从北方逆时针旋转曲柄以播放#1弦,并以指向西的曲柄结尾:
1 2
---O
4 3
然后,该框可以在任何给定时间播放两个音符之一:顺时针方向可用的下一个音符或逆时针方向的下一个音符。
挑战
您面临的挑战是编写一个程序或函数,该程序或函数接受非空的音符值字符串(即数字1
到4
),并确定是否有可能在音乐盒上播放该音符序列。产生真实或错误的结果以指示输入的可播放性或不可播放性。
一些注意事项:
输入不对初始开始位置做任何假设。输入
214
(从东开始并严格按逆时针方向移动)和234
(从北开始并严格按顺时针方向移动)输入均有效。每次发出音符后,曲柄可在任一方向上自由移动。
33333
通过在一个字符串上来回移动,可能会产生一系列相同的音符(例如)。该系列赛1221441
完全可以玩(从西开始,顺时针移动两步,然后逆时针移动三步,然后顺时针移动两步)。
样品
一些true
情况:
1
1234
1221
3333
143332
22234
2234
22214
1221441
41233
一些false
情况:
13 (note 3 is never available after note 1)
1224 (after `122`, the crank must be north, so 4 is not playable)
121 (after `12` the crank is east; 1 is not playable)
12221 (as above, after `1222` the crank is east)
43221