受xkcd启发。
您的挑战是确定一个数字在2048游戏中是否会很好地组合在一起。您的输入将是一个数字,例如:
8224
输出将是该数字是否将构成一个很好的2048组合,对于此输入,它将是true
或yes
或1
或任何其他表示肯定结果的方式。
对于不熟悉游戏的人,这里有一个简单的解释:将两个的幂排列在一个网格上,如下所示:[2] [2]
。磁贴可以向任意方向移动,如果两个相同的磁贴相遇,它们将成为两个的下一个幂(因此[2] [2]
,向左或向右移动时变为[4]
)。或者,您可以在这里尝试游戏。
“好的2048组合”是什么意思?它表示任何数字,如果在游戏“ 2048”中可以将其组合为一个数字。(零表示空格,如果需要可以忽略。)请注意,数字可能是多个数字!但是,移动之间的数字一定不能改变。以下是一些示例/测试用例(“好”表示组合很好,“坏”表示不好):
- 好:8224(8224-> 844-> 88-> 16)
- 良好:2222(2222-> 44-> 8)
- 良好:22048(22048-> 448-> 88-> 16)
- 错误:20482(不能将外部2组合在一起,也不能将2048和2组合在一起)
- 良好:20482048(20482048-> 4096)
- 错误:210241024(210241024-> 22048,但这现在是[2] [2048],由于数字不能在两次移动之间改变,因此无法合并)
- 好:2048(已经是一个数字)
- 错误:2047年(不是2的幂)
- 错误:11(游戏中没有1)
- 好:000040000000(零是空白)
杂项规则:
- 输入可以来自任何合理的地方,例如STDIN,函数参数,文件等。
- 输出也可以在任何合理的地方,例如STDOUT,函数返回值,文件等。
- 忽略网格大小-
22222222
应该仍然输出true。 - 只要是2的幂,最大数就没有最大值。因此,可能的数字是大于0的任意2的幂。
- 对于那些担心零会引起歧义的人,情况并非如此。例如,
22048
可以解析为[2] [2048]
或[2] [2] [0] [4] [8]
。第一个无效,但是第二个有效,因此应输出true。 - 这是代码高尔夫球,因此最短的代码(以字节为单位)将获胜!
22048
应输出,good
但事实并非如此。您不能2
与合并,如果所有数字都应分开2048
,则网格将是4x4
5个像元。所以也许您应该删除0
?另外,您的第5个示例似乎无效,因为游戏在2048
:) 停止
1