Você provavelmente já viu estas placas nas portas de várias lojas:
HORÁRIO DE ABERTURA
segunda-feira 0900-1800
sáb-dom 1100-1530
A tarefa aqui é gerar um sinal como esse, agrupando dias consecutivos com o mesmo horário de funcionamento, a partir de uma lista de horários de funcionamento para toda a semana. Observe que a semana "termina" pelo que é considerado consecutivo.
Entrada:
- 7 elementos, representando o horário de funcionamento de cada dia em uma semana, começando na segunda-feira.
- Cada elemento é uma sequência, no formato XXXX-XXXX
Exemplo de entrada:
0900-1800 0900-1800 0930-1730 0930-1730 0900-1500 1100-1500 1100-1500
- Não há problema em enviar a entrada como uma matriz (por exemplo, como entrada para uma função se você não ler a partir de stdin)
Saída:
- Uma lista de horários de funcionamento, em que dias consecutivos com o mesmo horário de funcionamento são mostrados como um intervalo. Observe que domingo (o último dia) e segunda-feira (o primeiro dia) também são dias consecutivos.
- Um dia em que o dia não tem horário de funcionamento semelhante aos dias anteriores ou posteriores é impresso por si só
- Os dias são especificados como três letras minúsculas: segunda a quarta a sexta
- Lembre-se de que o primeiro elemento na entrada corresponde a seg, próximo a ter etc.
- O horário de funcionamento é mostrado como na entrada
Dois exemplos
mon-fri 0900-1800, sat-sun 1100-1500 mon-wed 1030-1530, thu 100-1800, fri-sun 1200-1630
A saída deve ser classificada, para que os intervalos apareçam na ordem dos dias da semana. É preferível segunda-feira para ser o primeiro, mas pode acontecer que não seja o primeiro de um grupo porque a semana termina. Portanto, neste caso, ter é o primeiro intervalo.
tue-fri 0900-1800, sat-mon 1100-1500
Não agrupe a menos que seja consecutivo. Aqui, quarta e sexta-feira têm o mesmo horário de funcionamento, mas são separadas por uma quinta-feira com horários diferentes, para que sejam listados sozinhos.
mon-tue 1000-1200, wed 0900-1500, thu 1000-1800, fri 0900-1500, sat-sun 1000-1500
- A saída pode ser separada por vírgula como os exemplos aqui, ou separada por uma nova linha, como no exemplo na parte superior.
Casos de teste
Primeira linha é entrada, segunda linha é saída esperada
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
Regras
Isso é código-golfe, então a resposta mais curta em bytes vence.