Stellen Sie sich ein W x H- Gitter von Quadraten vor, das sich toroidal umschließt. Die Elemente werden wie folgt in das Raster eingefügt.
Der erste Gegenstand kann auf ein beliebiges Feld gelegt werden, nachfolgende Gegenstände dürfen sich jedoch nicht innerhalb eines Manhattan-Abstands R zu einem vorherigen Gegenstand befinden (auch als Von Neumann-Nachbarschaft der Reichweite R bekannt ). Wenn Sie die Positionen sorgfältig auswählen, können Sie eine große Anzahl von Elementen in das Raster einfügen, bevor keine gültigen Positionen mehr vorhanden sind. Betrachten Sie stattdessen das gegenteilige Ziel: Was ist die niedrigste Anzahl von Elementen, die platziert werden können und keine weiteren gültigen Positionen belassen?
Hier ist eine Ausschlusszone mit Radius 5:
Hier ist eine weitere Ausschlusszone für Radius 5, diesmal in der Nähe der Kanten, damit das Umwicklungsverhalten ersichtlich wird:
Eingang
Drei ganze Zahlen:
- W : Breite des Gitters (positive ganze Zahl)
- H : Höhe des Gitters (positive ganze Zahl)
- R : Radius der Ausschlusszone (nicht negative ganze Zahl)
Ausgabe
Eine Ganzzahl N , die die kleinste Anzahl von Elementen darstellt, die platziert werden können, um weitere gültige Platzierungen zu verhindern.
Einzelheiten
- Ein Radius von Null ergibt eine Ausschlusszone von 1 Quadrat (dasjenige, auf das der Gegenstand gelegt wurde).
- Ein Radius von N schließt die Zone aus, die in N orthogonalen Schritten erreicht werden kann (denken Sie daran, dass die Kanten toroidal gewickelt sind).
Ihr Code muss für den einfachen Fall von R = 0 funktionieren, muss jedoch nicht für W = 0 oder H = 0 funktionieren .
Ihr Code muss sich auch mit dem Fall befassen, in dem R > W oder R > H ist .
Zeitlimit und Testfälle
Ihr Code muss in der Lage sein, alle Testfälle zu verarbeiten, und jeder Testfall muss innerhalb von 5 Minuten abgeschlossen sein. Dies sollte einfach sein (die Beispiel-JavaScript-Lösung dauert für jeden Testfall einige Sekunden). Das Zeitlimit besteht hauptsächlich darin, den extremen Brute-Force-Ansatz auszuschließen. Der beispielhafte Ansatz ist immer noch ziemlich brachial.
Wenn Ihr Code auf einem Computer innerhalb von 5 Minuten ausgeführt wird, auf einem anderen jedoch nicht, ist dies ausreichend.
Testfälle in den Formulareingaben: Ausgabe alsW H R : N
5 4 4 : 1
5 4 3 : 2
5 4 2 : 2
5 4 1 : 5
7 5 5 : 1
7 5 4 : 2
7 5 3 : 2
7 5 2 : 4
8 8 8 : 1
8 8 7 : 2
8 8 6 : 2
8 8 5 : 2
8 8 4 : 2
8 8 3 : 4
7 6 4 : 2
7 6 2 : 4
11 7 4 : 3
11 9 4 : 4
13 13 6 : 3
11 11 5 : 3
15 14 7 : 2
16 16 8 : 2
Snippet zum Visualisieren und Herumspielen von Ideen
Beispiel (ungolfed) Lösung
Nur ein Beispiel für kleine Leistungen (resultierend aus einem Radius, der nicht viel kleiner als die Breite und Höhe ist). Kann mit jedem der Testfälle umgehen, gibt aber bei den meisten größeren Fällen auf.