この質問を思いついた@ Agawa001の功績。
説明
私の新しい「キーボア」には2つのボタン、つまり+
とがあり-
ます。
メモリ内の番号はから始まり0
ます。
+
または-
を連続して押すたびに、連続して押された正確な回数だけメモリをインクリメント/デクリメントします。
したがって、+
4回押すと、1回目は1、2回目は2、3回目は3、4回目は4を追加します10
(10)。
ここで、-
3回押すと、1回目は1、2回目2、3回目3が減算され、4
(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から、入力として正の整数を受け取ります。
- 次に、上記の方法を使用してその数を作成するために必要な最小数のキーストロークを出力/印刷します。
テストケース
+
or -
runを再配置すると同じ番号が得られるため、そのようなグループごとに、辞書的に最も早いシーケンスのみがリストされます。
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。
得点
これはcode-golfです。バイト単位の最短ソリューションが勝ちです。
+++++--
も代替手段である++-++++
ため、削除するのはに等しいためです++++-++
)。誰かが効率的なソリューションを思いついた場合に備えて、生成したものを後で追加したい場合があります。
++-++++
削除したくありませんでした。また、これはあなたの編集ではなく、私の編集でした。
+++++--
(または、同等に、--+++++
)、それは私が最初の場所で編集する必要性を感じた理由です。