Hintergrund
Die Vereinigten Staaten lieben das Wandern - die absichtliche Manipulation eines Wahlbezirks, um bestimmte Abstimmungsergebnisse vorherzusagen. Erst kürzlich wurde vor dem Obersten Gerichtshof ein Gerichtsverfahren eingeleitet . Gerrymandering ist, insbesondere wenn es sich um eine Rasse handelt, illegal und führt dazu, dass die Bezirksgrenzen neu gezogen werden müssen.
Auf der Grundlage einer rechteckigen Karte einer Gemeinde (2D-Array) zeichnen Sie Bezirkslinien, damit Ihre Gruppe die bestmögliche Darstellung erhält. Das heißt, Sie werden gerrymander. Jede Gemeinde hat zwei Parteien 0
und 1
. Die Karte besteht aus Quadraten, auf denen sich entweder 0
oder befindet 1
. Hier ist eine Beispielkarte:
Herausforderung
Sie werden die Karte in Bezirke gruppieren, so dass die Gruppe 1
mindestens die durch die Eingabe angegebene Anzahl von Bezirken erhält.
Eingang
Die Eingabe besteht aus einer Karte, der Anzahl der zu ziehenden Bezirke und der Mindestanzahl der Bezirke, die die 1
Partei zum Gewinnen benötigt (Mindestpunktzahl).
Ausgabe
Die Ausgabe wird eine Karte der Bezirke sein. Jeder Distrikt besteht ausschließlich aus einem Großbuchstaben des Alphabets. Ja, dies bedeutet, dass es nicht mehr als 26 Bezirke geben wird.
Wenn keine Ausgabe möglich ist, bei der die eingegebene Partei genügend Distrikte gewinnt, gilt Folgendes:
- “Wir haben es versucht ...” drucken
- Tödlicher Fehler, weil die Partei durch das Wahlergebnis irreparabel verletzt wurde
- Oder beides
Regeln (auch sehr wichtig)
- Alle Stadtteile müssen zusammenhängend sein
- Distrikte dürfen keine anderen Distrikte enthalten
- Jeder Distrikt muss mindestens vier Knoten enthalten. Die Eingabe stimmt mit den Regeln überein, das heißt, es wird mindestens eine geben
number_of_districts * 4
die Karte enthält Knoten - Die Punktzahl jeder Partei ist die Anzahl der Bezirke, in denen sie die Mehrheit hat
- Wenn ein Distrikt die gleiche Anzahl von
0
s und1
s hat, profitiert keine Partei davon - Normale Regeln, nach denen nicht geschummelt wird
- Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes.
Testfälle
1. Input 1. Output 2. Input 2. Output 3. Input 3. Output
districts: 5 Image and map districts: 3 Image below districts: 3 fatal error
min wins: 3 min wins: 3 min wins: 3
map: map: map:
00000110000 AAAAAAAAAAA 101101 101101
10000010000 AAAAAAAAAAA 100000 100000
10010000011 AAAAAAAAAAA 011011 011011
11001110000 BBBBBBBAAAA 111111 100111
00111111000 BBBBBBBAAAA
01111111000 CCCCCDDDAAA
01111111001 CCCCCDDDAAA
01000111100 EEEEEDDDDDD
00000001000 EEEEEDDDDDD
Natürlich sollte Ihr Programm für jeden gültigen Testfall funktionieren , nicht nur für diese.