Відмова: хоча я вже небагато часу побував на цьому веб-сайті для розважальних цілей, це моє перше питання, тому прошу пробачити будь-які незначні помилки.
Фон
Призначаючи нам домашні завдання, мій вчитель справді дратує і виписує всі проблеми, які ми маємо робити окремо. Таким чином, мені потрібно назавжди копіювати проблеми, які мені доводиться робити. Я думав полегшити своє життя, я надішлю йому програму, яка могла б переліку проблем займати менше місця.
Записуючи список номерів сторінок або проблем, ми використовуємо тире для позначення діапазону. Наприклад, 19-21
стає 19, 20, 21
. Якщо між ними є розрив, використовуються два розділені комами діапазони: 19-21, 27-31
стає 19, 20, 21, 27, 28, 29, 30, 31
.
Зараз ви, напевно, думаєте: "це здається досить тривіальним". Насправді на це вже відповіли тут і тут .
Однак є улов. Якщо у нас діапазон з рівними послідовними цифрами, повторювані цифри можна залишити. Наприклад: 15, 16, 17
стає 15-7
, 107, 108, 109
стає 107-9
. Щодо бонусу, якщо остання послідовна однакова цифра на 1 більша, а остання цифра верхньої межі менша або дорівнює нижній, нижченаведена кількість може бути опущена (вибачте, якщо це звучало заплутано; можливо, деякі приклади це очистять) . 109-113
стає 109-3
, як нижня остання цифра передбачає збільшення місця 10-х.
Виклик
Ваша програма повинна приймати список цілих чисел за допомогою введення даних (що є стандартним для вашої мови чи функції). Ви можете вирішити, чи цей список розділений комами, пробілом чи фактичним списком / масивом.
Виведіть найкоротший шлях (спочатку відсортований за кількістю діапазонів, потім сума символів, включених до діапазонів), щоб представити цей список, використовуючи це позначення. Кожен штриховий діапазон повинен бути на одному рядку, але діапазони можуть бути розділені комами або новими рядками (дозволені наступні рядки чи коми). Ці діапазони повинні бути в порядку.
Оскільки наш шкільний Wi-Fi жахливий , я мушу зробити файл якомога меншим, щоб надіслати його йому. Виграє найкоротший код (у байтах).
Бонуси
Мій вчитель неохайний, тому є кілька речей, які допоможуть йому вийти. Кілька бонусів укладаються шляхом множення, наприклад, бонус -10% (х 90%) та -25% (х 75%) бонус = 90% * 75% = х 67,5% (бонус -32,5%).
- Іноді він ставить їх у неправильному порядку (він не вчитель математики). Візьміть бонус -20%, якщо ваша програма може приймати цілі числа, які не відсортовані від мінімуму до найбільшого.
- Наша книга дивна, і кожен розділ починає рахувати проблеми з -10. Якщо ваша програма може приймати негативні цифри, візьміть -25%.
- Якщо він приймає бонус нижчої останньої цифри, збільшуючи 10 місце, наприклад,
25-32
зменшуючи до25-2
, приймайте бонус -50%.
Випробування
In: 1, 2, 3, 4, 5
Out: 1-5
In: 3, 4, 5, 9, 10, 11, 12
Out: 3-5, 9-12
In: 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160
Out: 149-60
In: 1 2 3 4
Out: 1-4
For bonuses:
In: 109, 110, 111, 112, 113
Out: 109-3
In: 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29
Out: 19-9
In: -3, -2, -1, 0, 1, 2
Out: -3-2
In: -3, -2, -1
Out: -3--1
Відповідь буде прийнята в суботу, 19 грудня 2015 року.
GLHF!
149 150 151 152 153 154 155 156 157 178 159 160
?
19-9
про те, 19,20,...,29
а не так, 19-29
як випливає з тексту. Отже, що правильно?
1-4 9-2
?