NEWS
ioBroker Advent of Code
-
@bluegaspode Ich danke dir für deine Erklärungen, mal schauen was ich da bauen kann.
AutoIt Skaliert ja "schlecht", Rekursion maximal 3850 mal, mir fiel dann aber eine Methode ein es doch zu skalieren, hatte ich schon mal so gemacht.AutoIt ist schlecht in "parallel machen".
Eine Zeile abzukopfen ist von der CPU quasi nicht messbar, aber ich kann mit einem Trick dann doch einfach alle 1000 Zeilen gleichzeitig berechnen bzw. zumindest in Teilen.
Mein Programm wird kompiliert und mit Parametern aufgerufen. Der erste Aufruf liest die Textdatei ein und startet sich einfach 10, 100, 500 oder 1.000 mal mit je einer Zeile als Aufgabe. Ich kann dabei sogar die Zeilen Aufteilen, das ein Prozess die Möglichkeiten 1 bis 100.000 rechnet und der nächste 100.001 bis 200.000Aber da haben wir das nächste Problem, die Möglichkeiten sind inzwischen so groß das er die mir z.B. als
$i_possibilitiesTotal: 6.04462909807315e+23
darstellt (2 hoch 79), das passt leider nicht zu meinem Prüfalgorithmus der auf der binären Darstellung der Möglichkeit basiert.Mal schauen ob ich den Stern noch schaffe.
-
@bananajoe hhhmm - also die Gesamtsumme an Lösungen ist im Bereich:
4.500.100.000.000das müsstest du irgendwie in eine Zahl abgespeichert bekommen.
der 'Long' Dateintyp (was auch immer das bei AutoIT ist, reicht in der Regel dafür aus)Auch die Rekursionstiefe passt.
Der längste String im Input ist zu 20Zeichen lang, den machst du 5mal größer, sind 100 Zeichen.
Das ist deine maximale Rekursionstiefe (pro Zeichen = 1x Rekursion)Ich habe es auch anders gemacht, auf jeder Rekursionsstufe prüfe ich immer eine komplette Gruppe.
6 Gruppen * 5 = 30Das heißt ich bin bei Rekursionstiefe von 'nur' 30.
Der Algorithmus geht dann so
sucheLoesungen(pattern, startposition, gruppen[]) { // ab der Startposition, finde alle Positionen wo die allerste Gruppe von der Länge hinpassen könnte // für alle diese Positionen // neueStartPosition = ersteGruppeStartPositon + ersteGruppeLaenge+1 // neueGruppen = alteGruppen (ohne die erste, die wir gerade festgelegt haben) // ergebnis += sucheLoesungen (pattern, neueStartPosition, neue Gruppen) }
und noch den Cache dazu, dass es für Teil2 passt.
-
@bluegaspode ich habe halt noch Brute Force ... Ich errechne die Anzahl der Möglichkeiten = 2 hoch Anzahl der Fragezeichen, z.B. 2 hoch 3 = 8
Davon ziehe ich einen ab weil es dann von 0 bis 7 geht. Dann also eine Schleife von 0 nach 7.
Anhand des Wertes erstelle ich die Binärdaten:0 = 000 1 = 001 2 = 010 3 = 011 usw.
Und die Fragezeichen habe ich dann jeweils durch
.
= 0 oder#
= 1 ersetzt und dann geprüft ob das Ergebnis stimmt (als Stringvergleich )Skaliert halt extrem schlecht da komplett ohne Abkürzungen.
Das mit dem Cache leuchtet ja ein, wie ich den nutzen soll erschließet sich mir im Moment nicht und auch nicht woran ich bei?#?#?#?#?#?#?#???#?#?#?#?#?#?#???#?#?#?#?#?#?#???#?#?#?#?#?#?#???#?#?#?#?#?#?#? 1,3,1,6,1,3,1,6,1,3,1,6,1,3,1,6,1,3,1,6
Gruppen setze.
Das muss im Moment auch geistig erst einmal bei mir sacken, so manches habe ich erst im 2 oder 3. Anlauf verstanden.
Das mit den Gruppen schein fast alle so gemacht zu haben und ich hab auch schon versucht es nach zu programmieren (dann hätte ich mir den Stern vielleicht noch gegönnt), stoße dabei auf an die Limits von AutoItDeine Beschreibungen waren nicht umsonst, es wurmt mich ja und will gelöst werden
-
Für alle, die in den letzten Tagen nicht so viel Spaß hatten. Teil 1 des heutigen Rätsels (Tag 14) ist sehr sehr sehr gut machbar.
aber bei Part2
-
doppelt
-
Ich weiß, das klingt jetzt ein bisschen nach Mimimi, aber mir kann keiner erzählen, dass SimonFischer04 die Lösung heute selbst programmiert hat. Teil 2 ist einfach ganz anders als Teil 1, so dass man nicht in 11 Sekunden zu einer Lösung kommen kann.
-
@ignis-draco naja, manchmal hat man noch fertigen Code aus einem anderen Projekt liegen der 1:1 passt. Ich schreibe im Grunde auch ständig wieder bei mir selber ab.
Und mein Ursprungscode ist ja auch ein Sammelsurium aus Fundstücken der letzten Jahrzehnte -
@BananaJoe 11 Sekunden um alten Code zu verwenden ???
Wenn es 3 Min oder so wären dann ja. Aber 11 Sekunden ?Ich habe konnte auch ein der einer Stelle Code von 2015 verwendenden aber auch da habe ich bestimmt 30 sek benötigt nur um die Datei zu finden in der das steht.
-
@ignis-draco sagte in ioBroker Advent of Code:
Aber 11 Sekunden ?
Naja, kommt ja darauf an ob es 11 europäische, 11 afrikanische, 11 amerikanische oder 11 asiatische Sekunden sind (frei nach Monty Phyton)
Edit: Ok, jetzt habe ich es, der steht im unserem Bord
-
[Day 20]
Mensch, die heutige Aufgabe ist doch perfekt für Hausautomatisierung.
Ein paar Flip Flops hier, ein paar Verbinder ... das muss sich doch in den LogikEngines umsetzen lassen (mind. Part 1),
ist fast so wie die Logik für "offene Fenster zählen"