# Je zadáno nějaké přirozené číslo n. Představte si chodbu, 
# na které je n dveří očíslovaných 1, 2, ..., n a na kraji
# čeká n-1 lidí, kteří mají trička s čísly 2, 3, ..., n.
# Na počátku jsou všechny dveře zavřené. Pak člověk s číslem
# 2 jde chodbou a všechny sudé dveře otevře. Následuje člověk 
# č. 3, kterého zajímají dveře dělitelné 3 - zavřené otevře 
# a naopak. Takto postupně projdou chodbou všichni lidé a my
# budeme sledovat, jak se mění stav dveří na chodbě.
#
# funkce 'dvere' s parametrem 'pocet' po průchodu každého
# člověka vytiskne stav chodby: 
#   - číslo člověka
#   - stav jednotlivých dveří ('+' otevřeno,  '-' zavřeno)
#   - počet otevřených dveří

def dvere(pocet):
    # chodbu reprezentujeme seznamem položek typu 'bool',
    # (True pro otevřené dveře), číslo dveří odpovídá indexu
    # na počátku jsou všechny dveře zavřené, tj. False,
    # pro jednoduchost máme i nevyužité dveře č. 0
    chodba = [False] * (pocet + 1)
    # postupně procházejí lidé s číslem 2, 3, ..., n
    for cislo in range(2, pocet + 1):
        # pro každé dveře dělitelné aktuálním číslem
        for i in range(cislo, pocet + 1, cislo):
            # změní stav dveří na opačný
            chodba[i] = not chodba[i]
        # tisk stavu chodby po průchodu daného čísla
        print("číslo: {:3d} ".format(cislo), end = "")
        for i in range(1, pocet + 1):
            print("+" if chodba[i] else "-", end = "")
        print(" otevřeno: {:3d}".format(chodba.count(True)))

dvere(50)
