Ihre Aufgabe ist es, 0-9
anhand eines quadratischen Ziffernrasters ( ) eine der Möglichkeiten auszugeben, mit denen die Ziffern so gruppiert werden können, dass:
- Jede Ziffer gehört zu genau einer Gruppe
- Alle Gruppen haben die gleiche Anzahl von Ziffern
- Alle Gruppen sind durch eine polygonartige Form begrenzt (dies bedeutet, dass jede Ziffer in der Gruppe neben [links, rechts, oben, unten] mindestens eine weitere Ziffer derselben Gruppe steht, es sei denn, jede Gruppe verfügt über 1 Element).
- Alle Gruppen haben die gleiche Summe
Das Eingaberaster ist immer ein Quadrat: Sie können eine beliebige Eingabemethode auswählen (einschließlich der Angabe von Argumenten für eine Funktion oder Methode). Zusätzlich liefert der Eingang die Anzahl der Gruppen, in denen Ihr Programm die Ziffern gruppieren soll.
Beispiel Eingabe:
Angenommen, Ihr Eingabeformat ist stringOfDigits numberOfGroups
.
Ein Beispiel für eine Eingabe wäre:
156790809 3
was sich in (ein Gitter aus sqrt(9) * sqrt(9)
) übersetzen würde
1 5 6
7 9 0
8 0 9
Die müssten Sie in 3 Gruppen aufteilen, von denen jede 9 / 3 = 3
Elemente mit der gleichen Summe haben sollte.
Ausgabe: Die Ausgabe sollte eine Ziffernfolge mit optionalen Leerzeichen und Zeilenumbrüchen für die Formatierung sein, wobei jeder Ziffer ein Buchstabe folgt a-z
, der die Gruppe angibt. numberOfTotalDigits / numberOfGroups
In jeder Gruppe sollten genau Elemente vorhanden sein. Sie müssen niemals etwas in mehr als 26 Gruppen aufteilen.
Beispielausgabe:
1a 5a 6b
7c 9a 0b
8c 0c 9b
Beachten Sie, dass das Ersetzen aller a
s durch b
s und b
s durch a
s gleichermaßen gültig ist. Solange jede Gruppe mit einem eigenen Buchstaben gekennzeichnet ist, ist die Ausgabe gültig.
Außerdem erwarte ich, dass die meisten Programme etwas in dieser Richtung ausgeben, da Zeilenumbrüche / Leerzeichen optional sind:
1a5a6b7c9a0b8c0c9b
In diesem Fall wird die Addition aller Ziffern der Gruppe a
, b
oder c
macht 15. Darüber hinaus werden alle Gruppen durch ein Polygon gebunden.
Ungültige Ausgaben:
1a 5a 6b
7c 9a 0c
8c 0b 9b
weil die gruppen keine polygone bilden (genauer gesagt, die 6b
sind isoliert und 0c
auch einsam).
1a 5a 6b
7c 9a 0b
8c 0b 9b
weil die Gruppe b
4 Elemente hat, während c
nur 2.
Etc.
Wenn es keine gültige Lösung gibt, kann Ihr Programm alles tun (z. B. anhalten, abstürzen, für immer ausführen), aber wenn Ihr Programm druckt, None
wenn es keine gültige Lösung gibt -15
, wird dies Ihrem Ergebnis gerecht.
Wenn es mehr als eine Lösung gibt, müssen Sie nur eine drucken, aber -20
wenn Ihr Programm alle durch ein Trennzeichen voneinander getrennt druckt.
Dies ist Codegolf, also gewinnt der kürzeste Code (mit Boni)!
6b
ist isoliert, nicht das0b
.156790889 3
Es scheint so, als sollte es so sein156790809 3
Antworten:
Pyth , 122-20-15 = 87
Änderungen:
130 -> 120: Auf durch Zeilenumbruch getrennten Eingang umgeschaltet.
120 -> 134: Ein Fehler mit Gruppen, deren Größe nicht der Seitenlänge der Matrix entsprach, wurde behoben.
134 -> 120: Druckt alle Lösungen, einschließlich der unter Gruppenumbenennung gleichwertigen.
120 -> 122: Es wurde ein Fehler behoben, bei dem anstelle aller legalen Gruppen nur Pfade generiert wurden.
Testlauf:
Erläuterung:
quelle
JavaScript (ES6) 361 (376-15)
372(Vielleicht kann man noch ein bisschen mehr golfen)
Als Funktion ist der erste Parameter die Ziffernfolge und der zweite Parameter die Anzahl der Gruppen.
Es ist eine naive rekursive Suche, die bei der ersten gefundenen Lösung stoppt (kein Bonus von -20).
Benötigen Sie weitere Testfälle, um die Leistung bei größeren Eingaben zu überprüfen.
Ungolfed & Erklärt
Test In FireFox / Firebug - Konsole
F("156790809",3)
Ausgabe1c5c6b7a9c0b8a0a9b
F("156790819",3)
AusgabeNone
quelle