感谢@ Agawa001提出了这个问题。
说明
我的新“键盘孔”只有2个按钮,分别是+
和-
。
内存中的数字从开始0
。
每次连续按+
或,-
将精确地增加/减少内存连续被按下的次数。
因此,如果按+
4次,则第一次加1,第二次加2,第三次加3,第四次加4,为您10
(十)。
现在,如果您按-
3次,则第一次按1,第二次为2,第三次为3,剩下的是4
(四)。
TL; DR
给定一个字符串+和-,请在每次更改字符时将其分开。然后,每个生成的m个+
符号字符串将第m个三角形数相加,而n个-
符号的每个字符串将第n个三角形数相减。
演练
现在,如果您仍然不了解,我将向您展示如何+++--+--
创建1
。
Program | Counter | Memory
----------------------------
| 0 | 0
+ | +1 | 1
++ | +2 | 3
+++ | +3 | 6
+++- | -1 | 5
+++-- | -2 | 3
+++--+ | +1 | 4
+++--+- | -1 | 3
+++--+-- | -2 | 1
任务
- 您将使用正整数作为输入,可以作为函数参数或来自STDIN。
- 然后,您将使用上述方法输出/打印创建该数字所需的最小击键次数。
测试用例
由于重新排列+
或-
运行的次数相同,因此,对于每个此类组,仅列出字典顺序最早的序列。
Input | Output | Possible corresponding sequences
-------------------------------------------------
4 | 5 | -+++-
6 | 3 | +++
9 | 5 | ++++-
11 | 7 | +++-+++
12 | 7 | +++++--, ++++-++
19 | 8 | -++++++-
39 | 12 | +++++++++---
40 | 13 | +++++++++---+, ++++++++-+++-
45 | 9 | +++++++++
97 | 20 | ++++++++++++++--+---, +++++++++++++-++++--, ++++++++++++-++++++-
361 | 34 | ++++++++++++++++++++++++++-+++-+++
额外资源
- 可以证明任何数字的证明:基本上,通过重复进行
++-
,您可以获得任何偶数。要获得奇数,只需将a+
放在最后。 - 获取任何数字的另一种通用方法。例如,要生成
50
,一种方法是先按+
50次,然后按-
49次。 - 解决前50个数字。
- 强制性JSFiddle。
计分
这是代码高尔夫球。以字节为单位的最短解决方案获胜。
9
这是否意味着...您感到无聊?
—
busukxuan
我认为您现在可以接受10个测试用例(包括我的测试用例)。
—
暴民埃里克(Erik the Outgolfer)'16年
@ΈρικΚωωσταντόπουλος添加了12个测试用例,并进行了一些修改(因为
—
Sp3000 '16
+++++--
这也是一种选择,但我删除了它,++-++++
因为它等效于++++-++
)。如果我设法生成一个有效的解决方案,我仍然想再添加一个案例。
@ Sp3000我不想
—
暴民埃里克(Erik)
++-++++
删除。另外,这是我的编辑,不是您的。
@eachρικΚωωσταντόπουλος每列等效解决方案中仅列出了一个解决方案-我认为如果列出所有最小解决方案,则测试用例会不必要地冗长(对于40个解决方案,有6个解决方案,对于97个而言,有17个解决方案)。如果意图不明确,我对此表示歉意。您也丢失了
—
Sp3000 '16
+++++--
(或等价地--+++++
),这就是为什么我觉得首先需要进行编辑的原因。