Auf Ihrem weißen Blatt Druckerpapier ist dunkle schwarze Tinte gespritzt! Die naheliegende Lösung besteht darin, das Papier so zu falten, dass sich schwarze und weiße Teile treffen und beide grau werden, wenn die Tinte diffundiert. Dann entfalten und neu falten, bis Ihr Papier alle gleich grau ist.
Den besten Weg zu finden, um diese Falten zu erzeugen, ist Ihre Aufgabe bei dieser Herausforderung beim Programmieren. Dieser Pastebin enthält vier unterschiedlich große Raster mit Einsen und Nullen. Jedes Raster stellt ein Stück mit Tinte bespritztes Papier dar, das Sie grau färben müssen. Nullen sind Papier und eine Tinte.
In diesen Gittern sind nur horizontale und vertikale Falten entlang der Zwischenräume zwischen Linien und Spalten gültig. Wenn eine Faltung durchgeführt wird, werden die Paare überlappender Werte gemittelt. Die Falten werden einzeln ausgeführt und immer aufgefaltet. Falzungen ändern nur die Farbverteilung, nicht das Papierformat.
Rn bedeutet, dass die linke Kante des Gitters beginnend nach der n-ten Spalte nach rechts gefaltet wird. Dn bedeutet, dass die obere Kante des Gitters beginnend nach der n-ten Reihe nach unten gefaltet wird. (n ist 1-indiziert)
Beispiel
Angesichts dieses Gitters
0 1 1 1
0 0 0 0
0 0 0 0
Eine D1-Falte bedeutet "die gesamte obere Reihe nach unten falten und dann entfalten".
0 0.5 0.5 0.5
0 0.5 0.5 0.5
0 0 0 0
Dann wird ein R2 produzieren
0.25 0.5 0.5 0.25
0.25 0.5 0.5 0.25
0 0 0 0
und ein anderes R2 wird nichts ändern.
Tor
Ihr Ziel ist es, einen Algorithmus zu schreiben, der für jedes der vier Raster die beste Falzreihenfolge für die Farbverteilung ermittelt, wobei jedes Mal genau 8 Falzreihen verwendet werden. Die Falten können irgendeine Kombination von Rs oder Ds sein.
Wertung
Die Punktzahl Ihrer Einreichung ist die Summe Ihrer Punkte für jedes Raster. Die Punktzahl eines Rasters ist die Summe der absoluten Differenzen zwischen jedem seiner Werte und seinem Durchschnitt (seine Summe geteilt durch seine Fläche). Niedrigere Werte sind besser. Eine Punktzahl von 0 ist perfekt, aber wahrscheinlich in nur 8 Falten unmöglich.
Sie müssen Ihre vier 8-stufigen Faltsequenzen mit Ihrem Code in Ihrer Antwort angeben. Auf diese Weise können wir überprüfen, ob Ihr Algorithmus wirklich funktioniert.
Bitte tragen Sie sie in dieses Formular ein:
20*20R1D2R3D4R5D6R7D8
40*20R1D2R3D4R5D6R7D8
40*40R1D2R3D4R5D6R7D8
20*80R1D2R3D4R5D6R7D8
Hier ist ein Python-Skript, mit dem Sie anhand Ihrer Faltsequenzen Ihre Punktzahlen berechnen können.
Natürlich sollten Sie nicht die Sequenzeinreichung einer anderen Person kopieren. Sequenzen für jedes Raster gehören nur der Person, die sie zuerst erstellt hat.
Klarstellungen
Im Idealfall funktioniert Ihr Algorithmus in jedem Raster gut, obwohl Sie ihn an diese spezifischen anpassen können.
Sie müssen Ihren Code mit Ihrer Sequenz einreichen. Um zu gewinnen, benötigen Sie die kleinste Anzahl von 8-stufigen Faltsequenzen, die noch nicht veröffentlicht wurden, sowie einen Algorithmus, der der öffentlichen Kontrolle standhält. Erklären Sie Ihren Code, verschleiern Sie ihn nicht.
Das Gitter sollte niemals negative Zahlen enthalten.
Es gelten Standardlücken.
quelle
Antworten:
Python
Probieren Sie in den ersten paar Falten verschiedene Falzkombinationen aus, und wenden Sie dann den Rest der Falze mit einem gierigen Ansatz an.
Die erschöpfende Herangehensweise ist auf einen vernünftigen Bereich von Falten in der Mitte beschränkt, so dass es nicht ewig dauern wird, während nicht zu viele mögliche Falten ignoriert werden, um ein gutes Minimum zu erzielen.
Ran mit Pypy auf meinem MacBook Air.
Antworten:
Ausgänge:
Gesamtpunktzahl: 7,91125 + 16,34375 + 42,13 + 32,30875 = 98,69375
Code:
quelle
C 16,344 (4 Minuten 33 Sekunden)
Bisher beste Züge: D6, D13, R19, D9, D11, R21, D10, R20
Verwendet eine Mischung aus Monte Carlo und Bergsteigen. Könnte viel schneller laufen, da bin ich mir sicher.
quelle