Отказ от ответственности: хотя я уже некоторое время нахожусь на этом сайте в развлекательных целях, это мой первый вопрос, поэтому прошу прощения за любые мелкие ошибки.
Задний план
Назначая нам домашнее задание, мой учитель очень раздражает и записывает все проблемы, которые мы должны решать индивидуально. Таким образом, мне всегда нужно копировать, какие проблемы мне приходится решать. Я думал, чтобы сделать мою жизнь проще, я пошлю ему программу, которая может сделать список проблем занимать меньше места.
При написании списка номеров страниц или проблем мы используем тире для обозначения диапазона. Например, 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?