Кредити @ 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 | ++++++++++++++++++++++++++-+++-+++
Додаткові ресурси
- Доказ того, що будь-яке число можна зробити : в основному, повторюючи
++-, ви можете отримати будь-яке парне число. Щоб отримати непарні числа, просто поставте+кінець. - Ще один загальний спосіб отримати будь-яке число. Наприклад, для генерації
50спосіб - натиснути+50 разів, а потім натиснути-49 разів. - Розв’язання перших 50 чисел .
- Обов’язковий JSFiddle .
Оцінка балів
Це код-гольф . Найкоротше рішення в байтах виграє.
+++++--це також альтернатива, але я її зняв, ++-++++оскільки це рівнозначно ++++-++). У мене є ще один випадок, який я хотів би додати пізніше, якщо хтось придумає ефективне рішення, якщо мені вдасться його створити.
++-++++видаляти. Також це було МОЕ редагування, а не ВАШ.
+++++--(або, що рівнозначно --+++++), саме тому я відчував потребу в першу чергу редагувати.