おそらく、さまざまな店のドアにこれらのサインを見たことがあります。
営業時間
mon-fri 0900-1800
土日1100-1530
ここでのタスクは、週全体の営業時間のリストから、同じ営業時間を持つ連続した日をグループ化するようなサインを生成することです。週は、連続していると見なされるものに対して「ラップアラウンド」することに注意してください。
入力:
- 月曜日から始まる、週の各日の営業時間を表す7つの要素。
- 各要素は、XXXX-XXXXという形式の文字列です
入力例:
0900-1800 0900-1800 0930-1730 0930-1730 0900-1500 1100-1500 1100-1500- 入力を配列として送信しても構いません(たとえば、stdinから読み取らない場合は関数への入力として)
出力:
- 営業時間のリスト。同じ営業時間の連続した日が範囲として表示されます。日曜日(最終日)と月曜日(最初の日)も連続した日であることに注意してください。
- 前日または後日と営業時間が類似していない日は単独で印刷されます
- 日は3つの小文字で指定されます:mon tue wed thu fri sat sat sun
- 入力の最初の要素はmonに、tueの隣などに対応することに注意してください。
- 営業時間は入力のように表示されます
2つの例
mon-fri 0900-1800, sat-sun 1100-1500 mon-wed 1030-1530, thu 100-1800, fri-sun 1200-1630出力はソートされる必要があるため、範囲は曜日が週の順序で表示されます。月曜日が最初であることが好まれますが、週が終わるため、グループの最初ではない場合があります。したがって、この場合、tueが最初の範囲です。
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- 出力は、ここの例のようにコンマ区切りにするか、上の例のように改行で区切ることができます。
テストケース
1行目は入力、2行目は期待される出力
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
ルール
これはコードゴルフなので、バイト単位の最短回答が勝ちです。