IyAyMDI25bm0IDLmnIjkvJHlgYfooaggLSDmloflrZflkYjnj77niYggKOmBqeWQiCBJZGVvbmUpCgpkZWYgcHJpbnRfc2NoZWR1bGUoKToKICAgICMg5a6a576p5aeT5ZCN6IiH5LyR5YGH5pel5pyfCiAgICBsZWF2ZXMgPSB7CiAgICAgICAgJnF1b3Q756eA6JitJnF1b3Q7OiBbNCw3LDksMTEsMTMsMTYsMTgsMTksMjEsMjIsMjUsMjYsMjhdLAogICAgICAgICZxdW90O+WtkOehryZxdW90OzogWzMsNiw3LDEwLDE0LDE1LDE2LDE3LDIwLDIxLDI0LDI4XSwKICAgICAgICAmcXVvdDvlrrblkowmcXVvdDs6IFsxLDQsNSw2LDcsOSwxMCwxNSwxNiwxNywxOCwxOSwyMywyN10sCiAgICAgICAgJnF1b3Q75a6H57+UJnF1b3Q7OiBbMSwyLDMsOCw5LDE0LDE2LDE3LDE4LDE5LDIwLDI2LDI3LDI4XQogICAgfQogICAgCiAgICAjIDIwMjYvMi8xIOaYr+aYn+acn+aXpQogICAgd2Vla2RheXMgPSBbJnF1b3Q75pelJnF1b3Q7LCAmcXVvdDvkuIAmcXVvdDssICZxdW90O+S6jCZxdW90OywgJnF1b3Q75LiJJnF1b3Q7LCAmcXVvdDvlm5smcXVvdDssICZxdW90O+S6lCZxdW90OywgJnF1b3Q75YWtJnF1b3Q7XQogICAgZGF0ZXMgPSBbZiZxdW90O3tpfSh7d2Vla2RheXNbaSAlIDddfSkmcXVvdDsgZm9yIGkgaW4gcmFuZ2UoMSwgMjkpXQogICAgCiAgICAjIOeCuuS6huaWueS+v+mWseiugO+8jOaLhuWIhuaIkOWFqeauteWRiOePviAoMS0xNOaXpSwgMTUtMjjml6UpCiAgICBzZWdtZW50cyA9IFsoMCwgMTQpLCAoMTQsIDI4KV0KICAgIAogICAgZm9yIHN0YXJ0LCBlbmQgaW4gc2VnbWVudHM6CiAgICAgICAgY3VycmVudF9kYXRlcyA9IGRhdGVzW3N0YXJ0OmVuZF0KICAgICAgICBwcmludCgmcXVvdDstJnF1b3Q7ICogMTAwKQogICAgICAgICMg5qiZ6aGM6KGMCiAgICAgICAgaGVhZGVyID0gZiZxdW90O3sn5aeT5ZCNIC8g5pel5pyfJzombHQ7MTB9JnF1b3Q7ICsgJnF1b3Q7JnF1b3Q7LmpvaW4oW2YmcXVvdDt7ZDomZ3Q7N30mcXVvdDsgZm9yIGQgaW4gY3VycmVudF9kYXRlc10pCiAgICAgICAgcHJpbnQoaGVhZGVyKQogICAgICAgIHByaW50KCZxdW90Oy0mcXVvdDsgKiAxMDApCiAgICAgICAgCiAgICAgICAgIyDmr4/kvY3lk6Hlt6XooYwKICAgICAgICBmb3IgbmFtZSwgbGVhdmVfZGF5cyBpbiBsZWF2ZXMuaXRlbXMoKToKICAgICAgICAgICAgcm93ID0gZiZxdW90O3tuYW1lOiZsdDsxMn0mcXVvdDsKICAgICAgICAgICAgZm9yIGRheV9pZHggaW4gcmFuZ2Uoc3RhcnQgKyAxLCBlbmQgKyAxKToKICAgICAgICAgICAgICAgIG1hcmsgPSAmcXVvdDtWJnF1b3Q7IGlmIGRheV9pZHggaW4gbGVhdmVfZGF5cyBlbHNlICZxdW90Oy0mcXVvdDsKICAgICAgICAgICAgICAgIHJvdyArPSBmJnF1b3Q7e21hcms6Jmd0Ozd9JnF1b3Q7CiAgICAgICAgICAgIHByaW50KHJvdykKICAgICAgICAgICAgCiAgICAgICAgIyDntbHoqIjooYwKICAgICAgICBjb3VudF9yb3cgPSBmJnF1b3Q7eyflhbHkvJHkurrmlbgnOiZsdDsxMH0mcXVvdDsKICAgICAgICBmb3IgZGF5X2lkeCBpbiByYW5nZShzdGFydCArIDEsIGVuZCArIDEpOgogICAgICAgICAgICBjb3VudCA9IHN1bSgxIGZvciBwZXJzb25fZGF5cyBpbiBsZWF2ZXMudmFsdWVzKCkgaWYgZGF5X2lkeCBpbiBwZXJzb25fZGF5cykKICAgICAgICAgICAgIyDmqJnoqLsgMyDkurrku6XkuIrlkIzmmYLkvJHlgYcKICAgICAgICAgICAgZGlzcGxheV9jb3VudCA9IGYmcXVvdDsqe2NvdW50fSomcXVvdDsgaWYgY291bnQgJmd0Oz0gMyBlbHNlIHN0cihjb3VudCkKICAgICAgICAgICAgY291bnRfcm93ICs9IGYmcXVvdDt7ZGlzcGxheV9jb3VudDomZ3Q7N30mcXVvdDsKICAgICAgICBwcmludChjb3VudF9yb3cpCiAgICAgICAgcHJpbnQoJnF1b3Q7XG4mcXVvdDspCgppZiBfX25hbWVfXyA9PSAmcXVvdDtfX21haW5fXyZxdW90OzoKICAgIHByaW50X3NjaGVkdWxlKCkK
# 2026年 2月休假表 - 文字呈現版 (適合 Ideone)
def print_schedule():
# 定義姓名與休假日期
leaves = {
"秀蘭": [4,7,9,11,13,16,18,19,21,22,25,26,28],
"子硯": [3,6,7,10,14,15,16,17,20,21,24,28],
"家和": [1,4,5,6,7,9,10,15,16,17,18,19,23,27],
"宇翔": [1,2,3,8,9,14,16,17,18,19,20,26,27,28]
}
# 2026/2/1 是星期日
weekdays = ["日", "一", "二", "三", "四", "五", "六"]
dates = [f"{i}({weekdays[i % 7]})" for i in range(1, 29)]
# 為了方便閱讀,拆分成兩段呈現 (1-14日, 15-28日)
segments = [(0, 14), (14, 28)]
for start, end in segments:
current_dates = dates[start:end]
print("-" * 100)
# 標題行
header = f"{'姓名 / 日期':<10}" + "".join([f"{d:>7}" for d in current_dates])
print(header)
print("-" * 100)
# 每位員工行
for name, leave_days in leaves.items():
row = f"{name:<12}"
for day_idx in range(start + 1, end + 1):
mark = "V" if day_idx in leave_days else "-"
row += f"{mark:>7}"
print(row)
# 統計行
count_row = f"{'共休人數':<10}"
for day_idx in range(start + 1, end + 1):
count = sum(1 for person_days in leaves.values() if day_idx in person_days)
# 標註 3 人以上同時休假
display_count = f"*{count}*" if count >= 3 else str(count)
count_row += f"{display_count:>7}"
print(count_row)
print("\n")
if __name__ == "__main__":
print_schedule()