Skip to content

Instantly share code, notes, and snippets.

@ziwon
Created September 30, 2017 02:46
Show Gist options
  • Save ziwon/a2b10ef115039e8945d07a761facdbfa to your computer and use it in GitHub Desktop.
Save ziwon/a2b10ef115039e8945d07a761facdbfa to your computer and use it in GitHub Desktop.
Collapse Weekdays
days_default = {'월':0, '화':1, '수':2, '목':3, '금':4, '토':5, '일':6}
# input: 0, 1, 2, 4, 6
# output: 0~2, 4, 6
reverse= dict((v, k) for k, v in days_default.items())
def collapse_weekdays(days):
days = list(map(lambda k: days_default.get(k), days))
shift = lambda n, k: (n + 1 < k and days[n + 1] - days[n] == 1) and shift(n + 1, k) or n
def collapse(i, k, acc):
if i < k:
day = days[i]
i = shift(i, k)
acc.append((day, days[i]) if days[i] != day else day)
return collapse(i + 1, k, acc)
else:
return acc
return list(map(
lambda v:
(isinstance(v, tuple) and (reverse.get(v[0]) + '~' + reverse.get(v[1])))
or reverse.get(v)
, collapse(0, len(days), [])
) # end of map
) # end of list
print(collapse_weekdays(['월','화','수','금','일'])) #['월~수', '금', '일']
print(collapse_weekdays(['월','화','수','금','토','일'])) #['월~수', '금~일']
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment