Naja, unabhängig von irgendwelchen Formeln: Ein 1x1-Brett hat nur ein Feld, und das ist dann naturgemäß eine Kurve (wenn auch eine sehr spezielle, nämlich ein Kreis) und kein gerades Stück...

5: Mondrian
-
-
-
Argh, lesen hilft... Ich ziehe zurück :-p
-
Was ist die Idee hinter diesem Programm, und wie vermeidet es nichtzusammenhängende Wege?
Hallo Georg,
ich habe deine Frage erst heute gelesen. Die Idee des Programms ist, die Felder von links oben nach rechts unten zeilenweise durchzugehen und zu schauen, welches der 6 Kurventeile hineinpasst. Dabei tracke ich als status die offenen Enden. Die Codierung ist in folgendem Beispiel gezeigt:
Hier ist der status in der zweiten Zeile und 5. Spalte codiert durch 0100(0)1202. Vor der Klammer stehen die nach unten offenen Enden der neuen (zweiten) Zeile, in Klammern das offene Ende des linken Nachbarn des aktuellen Feldes, und danach die offenen Enden der vorhergehenden (ersten) Zeile. Man kann sich überlegen, dass es immer nur eine oder zwei Möglichkeiten gibt, Kurventeile einzupassen.
Einen rekursiven Aufruf starte ich nur, wenn ich ein gerades Stück einfügen kann oder muss. Den Fall eines Kurvenstückes behandle ich ohne rekursiven Funktionsaufruf. Nicht zusammenhängende Wege werden dadurch vermieden, dass zwei offene Enden mit der gleichen Kennung nur beim Erreichen des letzten Feldes zusammengefügt werden dürfen.
-
Ich habe das Python-Programm von st1974 nach Java portiert und erweitert, so dass es auch bei der Minimalanzahl von Viertelkreisen (d. h. Maximalanzahl von Geradenstücken) noch schnell läuft. Es erzeugt die Grafiken zur übergebenen Schachbrettgröße für eine feste Anzahl (oder alle möglichen) Geradenstücke.
Code- Syntax:
- java -jar Mondrian.jar
- oder
- java -jar Mondrian.jar Schachbrettgröße Geradenstücke Feldgröße Fensterbreite Fensterhöhe Bretteranzahl
- Schachbrettgröße: g für ein Schachbrett mit g X g Feldern, default = 8, mögliche Werte: 2, 4, 6, ...
- Geradenstücke: default = Minimalzahl, im Detail
- = g, falls g = 0 mod 4,
- = g + 2, falls g = 2 mod 4 und g > 2,
- = 0, sonst
- mögliche Werte: Minimalzahl bis g*(g-2) in Zweierschritten oder g*g für eine beliebige Anzahl (d. h. alle Lösungen)
- Feldgröße: Anzahl der Pixel eines einzelnen Schachbrettfeldes; mögliche Werte: 2, 4, 6, ...
- Fensterbreite: default = nutzbare Desktopbreite
- Fensterhöhe: default = nutzbare Desktophöhe
- Bretteranzahl: default = Anzahl der Schachbretter/Lösungen
- Bis auf die Schachbrettgröße wird für einen Wert 0 der Defaultwert genommen.
- Download: https://mega.nz/folder/PA4iXAaA#a8rI8PPZgpLTb_WTn00K7g
Direkter Download der aktuellen Version 1.1: https://mega.nz/file/eFxXBQiC#…6Fy2BETvb1JaS6xqGThN8ko3w
Viel Spaß!