Du bist ein Bauer und deine Schafherde ist geflohen! Ach nein!
Runden Sie diese Schafe auf, indem Sie Zäune bauen, um sie einzudämmen. Als Landwirt mit kleinem Budget möchten Sie möglichst wenig Zaun verwenden. Glücklicherweise sind sie nicht die klügsten Schafe der Welt und bewegen sich nicht, nachdem sie entkommen sind.
Aufgabe
Geben Sie anhand einer Koordinatenliste die geringste Anzahl von Zaunsegmenten aus, die zur Aufnahme der Schafe erforderlich sind.
Regeln
- Schafe sind enthalten, wenn sie nicht abwandern können (keine Löcher im Zaun).
- Sie müssen nicht alle Schafe in einem Block Zaun enthalten - es können mehrere voneinander unabhängige, umzäunte Bereiche vorhanden sein.
- Zaunsegmente sind in Hauptrichtungen ausgerichtet.
- Jedes Koordinatentupel repräsentiert ein einzelnes Schaf.
- Die Eingabe muss aus positiven Ganzzahlpaaren
x>0
& besteheny>0
, kann jedoch für Ihre Sprache entsprechend formatiert werden.- dh:
{{1,1},{2,1},{3,7}, .. }
oder[1,2],[2,1],[3,7], ..
- dh:
- Leerstellen in einem abgegrenzten Bereich sind in Ordnung.
- Sie können nicht davon ausgehen, dass Koordinaten in einer bestimmten Reihenfolge eingegeben werden.
Zum Beispiel erfordert ein einzelnes Schaf, dass 4
Zaunsegmente vollständig eingeschlossen sind.
Testfälle
[1,1]
4
[1,1],[1,2],[2,2]
8
[2,1],[3,1],[2,3],[1,1],[1,3],[3,2],[1,2],[3,3]
12
[1,1],[1,2],[2,2],[3,7],[4,9],[4,10],[4,11],[5,10]
22
[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9]
36
[1,1],[2,2],[3,3],[4,4],[6,6],[7,7],[8,8],[9,9]
32
[2,1],[8,3],[8,4]
10
Anmerkungen
- Sie können davon ausgehen, dass die eingegebenen Koordinaten gültig sind.
- Ihr Algorithmus sollte theoretisch für alle relativ großen Ganzzahlkoordinaten (bis zum maximal unterstützten Wert Ihrer Sprache) funktionieren.
- Entweder vollständige Programm- oder Funktionsantworten sind in Ordnung.
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes!
{1,2,3,4},{5,6,7,8} -> {1,5},{2,6},{3,7},{4,8}
x,y
Eingang muss zusammen sein. Netter Gedanke, daran hatte ich selbst nicht gedacht.Antworten:
JavaScript (ES6),
251244275 ByteWie?
Wir verwenden die rekursive Funktion P () , um eine Liste aller möglichen Partitionen der Eingabeliste zu erstellen. Diese Funktion ist momentan nicht optimal, da sie einige doppelte Partitionen zurückgibt - was jedoch das Endergebnis nicht verändert.
Für jede Partition berechnen wir die Anzahl der Zäune, die erforderlich sind, um alle Schafe in jeder Gruppe mit einem Rechteck zu umgeben. Die Summe dieser Zäune ergibt die Punktzahl der Trennwand. Wir geben schließlich die niedrigste Punktzahl zurück.
Testfälle
Code-Snippet anzeigen
quelle
[ [1,1],[2,2] ] , [ [1,2] ]
?k ,
62 58 5755 BytesProbieren Sie es online!
quelle