Hintergrund
Durch Erweitern und Löschen von Begriffen kann die folgende Identität leicht angezeigt werden:
Es ist jedoch ein offenes Problem, ob alle 1 / n-mal-1 / (n + 1) Rechtecke das Einheitsquadrat kacheln können.
Die Aufgabe
Ihr Programm sollte auf bequeme Weise eine positive ganze Zahl N als Eingabe verwenden und alle 1 / n-mal-1 / (n + 1) offenen Rechtecke mit n zwischen 1 und N einschließlich in das Einheitsquadrat packen, sodass sich keine zwei überlappen .
Für jedes Rechteck müssen Sie die folgenden Ganzzahlen der Reihe nach generieren:
- 1, wenn die horizontalen Kanten länger als die vertikalen Kanten sind, sonst 0
- Der Zähler und Nenner der x-Koordinate der unteren linken Ecke
- Der Zähler und der Nenner der y-Koordinate der unteren linken Ecke
Beachten Sie, dass wir das Einheitsquadrat als (0, 1) x (0, 1)
x-Werte von links nach rechts und y-Werte von unten nach oben annehmen .
Die endgültige erwartete Ausgabe ist die Verkettung dieser Ganzzahlen für jedes Rechteck in der Reihenfolge der Erhöhung von n in einem beliebigen geeigneten Format (z. B. gedruckt auf stdout oder als von einer Funktion zurückgegebene Liste).
Beispiel für Ein- und Ausgabe
Eingang:
3
Ausgabe:
0 0 1 0 1 1 1 2 0 1 1 1 2 1 3
Dies wird wie folgt analysiert:
0 (0/1, 0/1) 1 (1/2, 0/1) 1 (1/2, 1/3)
Wertung
Dies ist eine Code-Golf-Herausforderung, daher gewinnt die Antwort mit den wenigsten Bytes. Ihr Algorithmus sollte jedoch auch einigermaßen effizient sein. Es sollte in der Lage sein, N<=100
in insgesamt etwa 10 Minuten für alle zu laufen .
Ihre Lösung muss für alle gültige Lösungen liefern N<=100
, aber nachweislich vollständige Algorithmen sind auch dann willkommen, wenn sie nicht die kürzesten sind.