margarita
Lösungen Aufgabe 13 2024
15
806
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Lösungen Aufgabe 13 2024
Mein Python-Programm ist etwas anders. Ich habe die Würfel und Quadrate und Kanten händisch erstellt. (Wobei ich kurz nachgedacht hatte, statt den Buchstaben `itertools.product([0, 1], repeat=4)` zu verwenden. Dann sind die Kanten die Punkte, die an 3 Komponenten übereinstimmen, die Quadrate die, die an 2 übereinstimmen und die Würfel an dreien. Naja.

Dann bin ich die Möglichen Teilmengen aufsteigend durchgegangen und habe alle Bedingungen geprüft.

Code:
#!/usr/bin/env python3

points = set('ABCDEFGHIJKLMNOP')

edges = set(frozenset(ed) for ed in 'AB CD EF GH IJ KL MN OP AC BD EG FH IK JL MO NP AE BF CG DH IM JN KO LP AI BJ CK DL EM FN GO HP'.split())

squares = set(frozenset(sq) for sq in 'ABDC EFGH IJLK MNPO ACGE BDHF IKOM JLPN ABFE CDHG IJNM KLPO ABJI CDLK EFNM GHPO ACKI BDHF EGOM FHPN'.split())

cubes = set(frozenset(cu) for cu in 'ABCDEFGH IJKLMNOP ABIJEFMN CDKLGHOP ABCDIJKL EFGHMNOP BDFHJLNP ACEGIKMO'.split())

def increasing_subsets(st):
    def ssos(st, size):
        if size == 0:
            yield set()
        elif st:
            nst = st.copy()
            elem = nst.pop()
            for ss in ssos(nst, size):
                yield ss
            for ss in ssos(nst, size - 1):
                yield {elem} | ss
    for i in range(len(st) + 1):
        for ss in ssos(st, i):
            yield ss

def isconnected(st):
    if not st:
        return True
    openset = set(st)
    closedset = { openset.pop() }
    changed = True
    while changed:
        changed = False
        for po in openset.copy():
            for pc in closedset:
                if frozenset({po, pc}) in edges:
                    openset -= { po }
                    closedset |= { po }
                    changed = True
                    break;

    if openset:
        return False
    else:
        return True

# Now assume A has a Ruby and B doesn't
pointswithoutAB = points - {'A', 'B'}

for nonrubies in increasing_subsets(pointswithoutAB):
    nonrubies = nonrubies | { 'B' }
    rubies = points - nonrubies

    print(f'check {nonrubies=}')

    if not isconnected(nonrubies):
        continue

    if not isconnected(rubies):
        continue

    if not all(isconnected(nonrubies & sq) for sq in squares):
        continue

    if not all(isconnected(nonrubies & cu) for cu in cubes):
        continue

    if not all(isconnected(rubies & sq) for sq in squares):
        continue

    if not all(isconnected(rubies & cu) for cu in cubes):
        continue

    if not all(any(not isconnected((rubies - {r}) & sq) for sq in squares) for r in rubies):
        continue

    print(f'{nonrubies=}')
    break


Nachrichten in diesem Thema
Lösungen Aufgabe 13 2024 - von margarita - 12-20-2024, 06:22 PM
RE: Lösungen Aufgabe 13 2024 - von V_B - 12-20-2024, 06:27 PM
RE: Lösungen Aufgabe 13 2024 - von marac - 12-20-2024, 06:53 PM
RE: Lösungen Aufgabe 13 2024 - von built_different - 12-20-2024, 07:35 PM
RE: Lösungen Aufgabe 13 2024 - von marac - 12-20-2024, 07:52 PM
RE: Lösungen Aufgabe 13 2024 - von DFUx - 12-20-2024, 09:26 PM
RE: Lösungen Aufgabe 13 2024 - von tfry - 12-21-2024, 08:38 AM
RE: Lösungen Aufgabe 13 2024 - von Optimismus - 12-20-2024, 08:37 PM
RE: Lösungen Aufgabe 13 2024 - von st1974 - 12-20-2024, 07:32 PM
RE: Lösungen Aufgabe 13 2024 - von Kosakenzipfel - 12-20-2024, 10:29 PM
RE: Lösungen Aufgabe 13 2024 - von Georg J. aus D. - 12-21-2024, 01:31 AM
RE: Lösungen Aufgabe 13 2024 - von ukleinek - 12-21-2024, 09:07 AM
RE: Lösungen Aufgabe 13 2024 - von Dave080e - 12-21-2024, 10:54 PM
RE: Lösungen Aufgabe 13 2024 - von Gramar - 12-21-2024, 11:00 PM

Gehe zu:


Benutzer, die gerade dieses Thema anschauen:
2 Gast/Gäste