Кредиты @ Agawa001 за этот вопрос.
объяснение
Мой новый "keybore" имеет только 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.
- Затем вы выведете / распечатаете минимальное количество нажатий клавиш, необходимое для создания этого числа, используя метод выше.
Testcases
Так как перестановка прогонов +
или -
дает одно и то же число, для каждой такой группы указана только самая ранняя лексикографическая последовательность.
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 | ++++++++++++++++++++++++++-+++-+++
Дополнительные ресурсы
- Доказательство того, что можно сделать любое число : в основном, повторяя
++-
, вы можете получить любое четное число. Чтобы получить нечетные числа, просто поставьте+
в конце. - Еще один общий способ получения любого числа. Например, для генерации
50
можно нажать+
50 раз, а затем нажать-
49 раз. - Решение первых 50 номеров .
- Обязательный JSFiddle .
счет
Это код-гольф . Самое короткое решение в байтах побеждает.
+++++--
это тоже альтернатива, но я удалил, ++-++++
так как это эквивалентно ++++-++
). У меня все еще есть еще один случай, который я хотел бы добавить позже, если кто-нибудь придумает эффективное решение, если мне удастся его сгенерировать.
++-++++
удалять. Кроме того, это была МОЯ редакция, а не ВАША.
+++++--
(или, что то же самое --+++++
), поэтому я почувствовал необходимость редактировать в первую очередь.