Advent of Code

  • Eine CPU lastige Variation kann ich dir anbieten, da kam der Rechner aber nach 60 Minuten noch zu keinem Ergebnis. Habe dann abgebrochen, die schnellere Methode zeigt Linus auf.


    Eventuell kann hier auch noch der Code falsch sein



    PS:

    Habe heute Tag 7 endlisch geschafft :bravo2:Danke Manul

    Ja war tatsächlich nur das Continue, vll konnte ich bei dem einen mal auch nicht richtig kopieren:shy:

  • Hofei Freut mich, daß ich helfen konnte! :)


    Linus' Lösung für heute mit dem defaultdict ist natürlich sehr schön, das kannte ich noch nicht.


    Ich hatte auch erst einen rekursiven Ansatz gewählt, habe dann aber schnell festgestellt, daß der nicht zielführend war. Letztlich habe ich's dann ähnlich wie Linus gelöst, wobei ich von hinten angefangen habe aufzuaddieren, auf wie vielen Wegen man vom jeweiligen Adapter zum Ziel kommen kann.

  • Jo, von hinten aufaddieren macht meine BASIC-Lösung für den C64 auch:

    Nervigerweise passt die Zahl nicht exakt in die Gleitkommazahlrepräsentation, also habe ich die beim aufaddieren aufgeteilt auf ganze Millionen und den Rest. Das Ergebnis 14.173.478.093.824 wird also als PART 2: 14173478 MIO. + 93824 ausgegeben. 😎


    Tag 8 in Python:

    “If debugging is the process of removing software bugs, then programming must be the process of putting them in.” — Edsger Dijkstra

  • Hofei Du hast einen Wartebereich mit Sitzen. Falls ein Sitz leer ist und in den umliegenden Feldern keiner sitzt, dann setzt sich jemand auf den Sitz. Falls jemand auf dem Sitz sitzt und auf den umliegenden Feldern ≥4 Leute sitzen, dann wird der Sitz frei. Diese Regeln werden solange wiederholt bis sich bei einem Durchgang nichts mehr ändert. Die Anzahl der dann besetzten Sitze ist die Antwort von Aufgabenteil 1.


    Stichworte wären zelluläre Automaten und „Conways Game of Life“.

    “If debugging is the process of removing software bugs, then programming must be the process of putting them in.” — Edsger Dijkstra

  • Was meinst Du mit Logik? Versuchst Du da irgendwie über Sitze und Gänge und Menschen nachzudenken? Lass das. Das ist ein zellulärer Automat. Es gibt Zellen, es gibt einfache Regeln die entscheiden ob in der nächsten Generation eine Zelle lebendig oder tot ist. Falls es immer noch an dem ersten Schritt hängt: die Regeln werden auf alle Zellen gleichzeitig angewandt. Das heisst zählen der lebenden Nachbarn bezieht sich auf den Zustand vor dem Schritt. Zellen die zum leben erweckt werden zählen nicht im Schritt selbst.


    Wie gesagt: Conways Game of Life. Das ist der klassische zelluläre Automat den man sich normalerweise anschaut um in das Thema zu kommen.

    “If debugging is the process of removing software bugs, then programming must be the process of putting them in.” — Edsger Dijkstra

  • Hallo zusammen


    Den heutigen Tag auch falsch angegangen. Dank den Ausführungen von __blackjack__ glaube ich nun etwas schlauer zu sein.

    Beim"Sitz Tausch" wird nicht Sitz für Sitz geprüft sondern als Ausgangsbasis dient der Zustand der vorherigen "Runde" und die SItze werden da gegen geprüft.

    Ist das Korrekt?


    Gruss

    Dani

  • Hofei: In Teil 1 der Aufgabe werden nur die unmittelbar benachbarten Sitze berücksichtigt.

    Soll das heißen die lang und breit beschriebenen Regeln zählen nicht?


    Quote

    Now, you just need to model the people who will be arriving shortly. Fortunately, people are entirely predictable and always follow a simple set of rules. All decisions are based on the number of occupied seats adjacent to a given seat (one of the eight positions immediately up, down, left, right, or diagonal from the seat). The following rules are applied to every seat simultaneously:

    If a seat is empty (L) and there are no occupied seats adjacent to it, the seat becomes occupied.

    If a seat is occupied (#) and four or more seats adjacent to it are also occupied, the seat becomes empty.

    Otherwise, the seat's state does not change.

    Floor (.) never changes; seats don't move, and nobody sits on the floor.

    und wenn doch, dann stellen sich immer noch die Fragen die ich in den Bildern zeigte

  • Soll das heißen die lang und breit beschriebenen Regeln zählen nicht?

    Doch, wieso sollten die nicht mehr zählen?

    Quote

    All decisions are based on the number of occupied seats adjacent to a given seat (one of the eight positions immediately up, down, left, right, or diagonal from the seat).

    "Alle Entscheidungen basieren auf der Anzahl besetzter Sitze, die einem gegebenen Sitz direkt benachbart sind (also auf einer der acht Positionen direkt links, rechts, über, unter oder ein Feld diagonal vom Sitz entfernt)."

    Quote

    If a seat is empty (L) and there are no occupied seats adjacent to it, the seat becomes occupied.

    "Wenn ein Sitz leer ist (L) und keine besetzten Sitze direkt benachbart sind, wird der Sitz besetzt."

    Quote

    If a seat is occupied (#) and four or more seats adjacent to it are also occupied, the seat becomes empty.

    "Ist ein Sitz besetzt (#) und vier oder mehr der benachbarten Sitze sind ebenfalls besetzt, wird der Sitz leer."

    Quote

    Otherwise, the seat's state does not change.

    Der Zustand aller anderen Sitze ändert sich nicht.


    Bezogen auf Deine Bilder heißt das:

    • In Bild 1 sind für den Sitz an der Position (0,0) ((x,y) jeweils von oben links gezählt) nur die Sitze in den Positionen (1,0), (0,1) und (1,1) interessant. Davon sind lediglich (0,1) und (1,1) besetzt, also 2 Sitze. Daher bleibt der Sitz besetzt.
    • In Bild 2 sind für den von Dir betrachteten Sitz an Position (6,0) lediglich die Sitze an den Positionen (5,0), (7,0), (5,1), (6,1) und (7,1) interessant. Von diesen Sitzen sind lediglich drei, nämlich (5,0), (5,1) und (6,1) besetzt. Also bleibt auch dieser Sitz besetzt.

    Jetzt klarer?

  • Ich habe einen sehr primitiven Ansatz gewählt (heavy use of IF statements), mir fehlt halt die Erfahrung. Ich fand es aber ganz spannend und bin schon auf euren Code gespannt.


    Gruss


    Steinardo


  • Mein Code für heute ist auf Github zu finden – ganz ohne if ;).


    Dafür macht mich gestern fertig: Ich hatte gestern wenig Zeit und hab's quick and dirty gelöst, hab mir meinen Code aber dann beim Überarbeiten völlig zerschossen. Und ja, ich weiß, daß eine Versionsverwaltung wie git u.a. genau dazu da ist, sowas zu verhindern. Theorie und Praxis...