# určení dne v týdnu pro zadané datum

def jul_datum(den, mesic, rok):
    """
    výpočet juliánského data

    pro zadaný den, měsíc a rok vypočte juliánské datum (JDN),
    předpokládá vstupní parametry dle gregoriánského kalendáře
    (datum musí být platné, parametry kladné int)
    viz. https://cs.wikipedia.org/wiki/Juli%C3%A1nsk%C3%A9_datum
    """
    if mesic <= 2:
        r = rok + 4799
        n = mesic + 9
    else:
        r = rok + 4800
        n = mesic - 3
    e = den + (153 * n + 2) // 5
    # návratová hodnota typu int
    return e + 365 * r + r // 4 - r // 100 + r // 400 - 32045

def den_tydne(den, mesic, rok):
    """
    určení dne v týdnu

    datum převedené na JDN udává souvislé číslování dnů,
    zbytek po dělení 7 jednoznačně určuje den v týdnu
    parametry - viz funkce jul_datum
    návratová hodnota - den v týdnu (česky) jako řetězec
    """
    index = jul_datum(den, mesic, rok) % 7
    # později si ukážeme, jak zjednodušit následují konstrukci
    if index == 0:
        return "pondělí"
    elif index == 1:
        return "úterý"
    elif index == 2:
        return "středa"
    elif index == 3:
        return "čtvrtek"
    elif index == 4:
        return "pátek"
    elif index == 5:
        return "sobota"
    else:
        return "neděle"

# hlavní program
print("1.1.2000 =>", den_tydne(1, 1, 2000))
print("28.10.1918 =>", den_tydne(28, 10, 1918))
print("17.11.1989 =>", den_tydne(17, 11, 1989))

