Вы, наверное, видели эти знаки на дверях разных магазинов:
ЧАСЫ РАБОТЫ
пн-пт 0900-1800
сб-вс 1100-1530
Задача здесь состоит в том, чтобы сгенерировать такой знак, сгруппировав последовательные дни с одинаковыми часами работы из списка часов работы на всю неделю. Обратите внимание, что неделя «оборачивается» тем, что считается последовательным.
Входные данные:
- 7 элементов, представляющих часы работы каждого дня недели, начиная с понедельника.
- Каждый элемент представляет собой строку в форме XXXX-XXXX
Пример ввода:
0900-1800 0900-1800 0930-1730 0930-1730 0900-1500 1100-1500 1100-1500- Можно отправлять входные данные в виде массива (например, в качестве входных данных для функции, если вы не читаете из стандартного ввода)
Выход:
- Список часов работы, где последовательные дни с одинаковыми часами работы отображаются в виде диапазона. Обратите внимание, что воскресенье (последний день) и понедельник (первый день) также являются последовательными днями.
- День, в который у дня нет часов, аналогичных дням до или после, печатается сам по себе.
- Дни обозначаются тремя строчными буквами: пн вт ср чт пт сб вс
- Помните, что первый элемент на входе соответствует mon, рядом с tue и т. Д.
- Часы работы показаны как на входе
Два примера
mon-fri 0900-1800, sat-sun 1100-1500 mon-wed 1030-1530, thu 100-1800, fri-sun 1200-1630Выходные данные должны быть отсортированы, поэтому диапазоны отображаются в том порядке, в каком дни недели делаются. Понедельник предпочтительнее быть первым, но может случиться, что он не первый в группе, потому что неделя заканчивается. Так что в этом случае вт является первым диапазоном.
tue-fri 0900-1800, sat-mon 1100-1500Не группируйте, если не последовательно, здесь среда и пятница имеют одни и те же часы работы, но разделены четвергом с разными часами работы, поэтому они перечислены самостоятельно.
mon-tue 1000-1200, wed 0900-1500, thu 1000-1800, fri 0900-1500, sat-sun 1000-1500- Вывод может быть разделен запятыми в качестве примеров здесь, или разделен новой строкой, как в примере сверху.
Контрольные примеры
Первая строка - это ввод, вторая - ожидаемый вывод.
0900-1800 0900-1800 0900-1800 0900-1800 0900-1800 1100-1500 1100-1500
mon-fri 0900-1800, sat-sun 1100-1500
0900-1800 0900-1800 0900-1800 0930-1700 0900-1800 1100-1500 1100-1500
mon-wed 0900-1800, thu 0930-1700, fri 0900-1800, sat-sun 1100-1500
1100-1500 0900-1800 0900-1800 0900-1800 0900-1800 1100-1500 1100-1500
tue-fri 0900-1800, sat-mon 1100-1500
1100-1500 1100-1500 0900-1800 0900-1800 0900-1800 0900-1800 1100-1500
wed-sat 0900-1800, sun-tue 1100-1500
1200-1500 1100-1500 0900-1800 0900-1800 0900-1800 0900-1800 1100-1500
mon 1200-1500, tue 1100-1500, wed-sat 0900-1800, sun 1100-1500
правила
Это код-гольф, поэтому выигрывает самый короткий ответ в байтах.