Einführung
Ein Feld sei ein Rechteck, das nur mit den Zeichen -
und gefüllt ist [0-9]
. Ein Beispiel für ein Feld ist:
11-011123
111-010--
0010---01
111-01234
Sie sehen, dass dieses Feld in drei kleinere Bereiche unterteilt wurde:
Um die Punktzahl eines kleineren Bereichs zu berechnen, addieren wir einfach alle Zahlen. Beispielsweise:
11
111
0010
111
1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 = 9
Die Gesamtpunktzahl für diesen Bereich beträgt 9 . Wir machen jetzt dasselbe für den zweiten Bereich:
011123
010
0 + 1 + 1 + 1 + 2 + 3 + 0 + 1 + 0 = 9
Die Gesamtpunktzahl beträgt ebenfalls 9 . Nun müssen wir den letzten Bereich untersuchen:
01
01234
0 + 1 + 0 + 1 + 2 + 3 + 4 = 11
Dies hat eine Gesamtpunktzahl von 11 . Die höchste Punktzahl auf dem Feld ist 11, also müssen wir diese ausgeben.
Die Aufgabe
Bei einem gegebenen Feld (in Form einer 2D-Zeichenfolge, eines Arrays usw.) wird die höchste Punktzahl auf dem Feld ausgegeben . Sie können davon ausgehen, dass die angegebenen Felder immer mindestens eine Ziffer enthalten. Das ist Code-Golf , also gewinnt die Einsendung mit der geringsten Anzahl von Bytes!
Testfälle
Testfall 1:
Input:
1
Output:
1
Testfall 2:
Input:
1-1-1-1
-1-1-1-
2-1-1-1
-1-1-1-
Output:
2
Testfall 3:
Input:
12-45-
4-65-9
87-654
12-487
45----
684764
Output:
69
Testfall 4:
Input:
111-12
------
21--10
Output:
3
["111", "01234"]
?-
trennt die Bereiche? Können Sie bitte den Teil "Was definiert einen Bereich" klarer machen?Antworten:
MATL ,
545149 BytesDie Eingabe ist ein 2D-Zeichen-Array im MATL (AB) -Format mit einem
;
Zeilentrennzeichen. Die Eingaben im Beispiel und in den Testfällen sind jeweils:Probieren Sie es online!
Erläuterung
Dies funktioniert durch Erstellen einer Adjazenzmatrix des Graphen, der durch die Beziehung "verbunden" definiert ist. Betrachten Sie als Beispiel das 3 × 4-Feld
Einträge in einem 2D-Array lassen sich in MATL mithilfe der linearen Indexierung (Spalten-Hauptindexierung) leicht beschreiben. Im 3 × 4-Fall wird der lineare Index jedes Eintrags als angegeben
Die Adjazenzmatrix wird mithilfe der Matrixmultiplikation in Schritten erstellt. Im ersten Schritt werden unmittelbare Nachbarn berücksichtigt. Beispielsweise ist der mit 3 indizierte Punkt ein Nachbar von sich selbst und der mit Index 2. Es ist kein Nachbar von 6, da dieser Punkt keine Nummer gemäß dem Feld enthält. In diesem Beispiel ist die Adjazenzmatrix der Beziehung "unmittelbarer Nachbar" die als gegebene 12 × 12-Matrix L
(Es ist ersichtlich, dass Spalte 3
1
in den Zeilen 2 und 3 einen Wert hat .) Diese Matrix ist immer symmetrisch und ihre Diagonale hat einen Wert1
für Punkte, die keinen Wert enthalten-
.Der nächste Schritt wäre die Adjazenzmatrix der Beziehung "verbunden mit höchstens einem Punkt dazwischen ". Um es zu erhalten, genügt es, L mit sich selbst zu multiplizieren und Einträge ungleich Null auf zu setzen
1
. Im Allgemeinen wird die Adjazenzmatrix der Beziehung "verbunden durch einen Pfad" M erhalten, indem L auf einen Exponenten (im Matrixsinn) angehoben wird , der die maximal mögliche Pfadlänge darstellt. Eine obere der maximalen Weglänge gebunden ist , die Anzahl der von Null verschiedenen Einträge in L .Das direkte Berechnen der Matrixleistung kann zu einem Überlauf führen, da große Zahlen schnell auftreten. Daher ist es besser, nach und nach mit derselben Matrix zu multiplizieren und Einträge ungleich Null nach jedem Schritt in 1 umzuwandeln, um zu verhindern, dass sich große Zahlen aufbauen.
Die Spalte i von M stellt die Punkte dar, die (durch einen beliebigen Pfad) mit dem Punkt i verbunden sind . Das Ebenenfeld kann nun in linearer Reihenfolge auf einen Spaltenvektor c reduziert werden, wobei jeder Eintrag die entsprechende Zahl oder einen undefinierten Wert für enthält
-
. Also in diesem Fall wäre cWenn man jede Spalte von M elementweise mit c multipliziert und die Summe jeder Spalte berechnet , erhält man für jeden Punkt i die Gesamtpunktzahl des Flächenpunktes , zu dem i gehört. Ein Bereich wird durch alle Punkte definiert, die miteinander verbunden sind. Beachten Sie, dass viele Spalten dasselbe Ergebnis liefern. Die Spalten i und j ergeben nämlich die gleiche Summe, wenn die Punkte i und j verbunden sind (zur gleichen Fläche gehören). Das Endergebnis ist das Maximum dieser Summen.
quelle
JavaScript (ES6), 157 Byte
Erläuterung
Nimmt ein Eingabefeld als String. Summiert für jede Zahl im Feld alle Zahlen im Bereich. Dazu wird jede Zahl im Feld mehrmals durchlaufen und die Zahl zur Punktzahl hinzugefügt, wenn eine benachbarte Zelle eine zuvor gezählte Zahl enthält. Zählzahlen, die Teil des Bereichs sind, werden dargestellt, indem sie auf 99 gesetzt werden, damit sie nicht erneut gezählt werden. Gibt die höchste Punktzahl als Zahl aus.
quelle
Pyth, 93 Bytes
Probieren Sie es online!
Wie es funktioniert
Erster Schritt: Lesen Sie die Eingabe
Zweiter Schritt: Definieren Sie eine Funktion, um einen Bereich auszuwerten
Dritter Schritt: Lesen Sie alle Bereiche und finden Sie das erforderliche Maximum
quelle