BuK/IIm20/Vorlesung 2 Seidl

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

=== Prinzipiell Unlösbares S. 5 ===

Nicht formalisierbare "Fragestellungen", also etwas das sich nicht in eine Abfolge von Berechnungen fassen lässt:<br/>
- Wie ist die Stimmung einer Person (fehlen von Informationen um das herauszufinden)<br/><br/>

Praktisch Unmögliches (wg. Effizienz):<br/>
- Alle Primzahlen zu "berechnen" (da unendlich viele, Algorithmus würde nie terminieren)<br/>
- Wie wird das Wetter am heutigen Tag in 100 Jahren<br/>

<br/><br/>
In Arbeit...

<language>Python</language>
=== Kreativaufgabe: Der Hilbertbus S. 17 ===
<run id="605f4f4ec9f2b">
def add_gast(person, bus):
    pb_list.append([person, bus])
    #book_gast("MH" + str(bus), [person, bus])
    gaeste = len(pb_list) - 1
    raum_gast_macrohard[gaeste] = [person, bus]

def kleingruppenbuchung(bus):
    for i in range(0, max(raum_gast) + len(bus) + 1, 1):
        if i > len(bus) - 1:
            break

        if i in raum_gast:
            try_kleingruppenbuchung_bis_freie_stelle_gefunden(i, raum_gast, bus, i)
        else:
            raum_gast[i] = bus[i]

def try_kleingruppenbuchung_bis_freie_stelle_gefunden(i, raum_gast, bus, bus_i):
    if i in raum_gast:
        i += 1
        try_kleingruppenbuchung_bis_freie_stelle_gefunden(i, raum_gast, bus, bus_i)
    else:
        raum_gast[i] = bus[bus_i]

def move_gaeste_n_2n(raum_gast):
    zwei_n_raum_gast = {}
    for zimmer in raum_gast:
        zwei_n_raum_gast[2*zimmer] = raum_gast.get(zimmer)
    
    return zwei_n_raum_gast

def diag(pb):
    # Person + 1
    pb[0] = pb[0] + 1
    add_gast(pb[0], pb[1])

    # Herunterzählen der Person bis 1
    for person_neu in range(pb[0] - 1, 0, -1):
        pb[1] = pb[1] + 1
        pb[0] = person_neu
        add_gast(pb[0], pb[1])
        
    pb[1] = pb[1] + 1
    add_gast(pb[0], pb[1])

    # Hochzählen
    for person_neu in range(pb[0] + 1, pb[1] + 1):
        pb[1] = pb[1] - 1
        pb[0] = person_neu
        add_gast(pb[0], pb[1])
    
    if len(pb_list) >= max_gaeste:
        return

    diag(pb)

def book_gast(zimmer_nr, attribut):
    if zimmer_nr in raum_gast:
        print("Zimmer bereits gebucht!")
        return
    
    raum_gast[zimmer_nr] = attribut
    print(str(attribut) + " in Zimmer " + str(zimmer_nr) + " gebucht!")

def baue_kleinbus(bus_nr, anzahl_personen):
    kleinbus = []
    for person in range(0, anzahl_personen + 1, 1):
        kleinbus.append([bus_nr, person])
    
    return kleinbus


raum_gast = {}

book_gast(3, "Herr Grundmann")
book_gast(2, "Frau Milkel")
book_gast(3, "Herr Wuischke")
book_gast(7, "Herr Wuischke")

kleinbus = baue_kleinbus(815, 8)
kleingruppenbuchung(kleinbus)

bus_3813 = baue_kleinbus(3813, 300) # Unendlich, hier begrenzt auf 300 Personen
kleingruppenbuchung(bus_3813)

raum_gast = move_gaeste_n_2n(raum_gast)

bus_33 = baue_kleinbus(33, 300) # Unendlich, hier begrenzt auf 300 Personen
kleingruppenbuchung(bus_33)

raum_gast = move_gaeste_n_2n(raum_gast)

# Macrohard
raum_gast_macrohard = {}
pb_list = []
max_gaeste = 300
# Erste Runde
# pb = [person, bus]
pb = [1, 1]
add_gast(pb[0], pb[1])

diag(pb)

kleingruppenbuchung(list(raum_gast_macrohard.values()))

print(raum_gast.get(234))
</run>