Einführung
Betrachten wir das folgende Quadrat, das nur aus den Ziffern besteht 0 - 9
:
1034
4167
8414
3542
Die äußere Hülle dieses Quadrats ist:
1034
4 7
8 4
3542
Es enthält Nullen, daher müssen wir die äußere Hülle abziehen und Folgendes zurücklassen:
16
41
Die äußere Hülle dieses Quadrats ist:
16
41
Es spielt keine keine Nullen enthalten und ist daher ein nicht-kontaminierten Platz. Die Definition eines nicht kontaminierten Quadrats ist also im Grunde genommen, wenn die äußere Hülle des Quadrats keine Nullen enthält .
Die Aufgabe
Bei einem Quadrat mit Ziffern (das nur nicht negative ganze Zahlen enthält) in einem beliebigen vernünftigen Format geben Sie das größte nicht kontaminierte Quadrat aus, indem Sie die äußere Hülle in einem beliebigen vernünftigen Format ständig abziehen.
Testfälle
Testfall 1:
Input Output
1234 1234
2345 2345
3456 3456
4567 4567
Testfall 2:
Input Output
123 123
204 204
346 346
Testfall 3:
Input Output
101 1
010
101
Testfall 4:
Input Output
000 (none)
000
000
Das ist Code-Golf , also gewinnt die Einsendung mit der geringsten Anzahl von Bytes!
416\n841\n354\n
(linke untere Ecke)?0
oder so.Antworten:
Jelly ,
1916 BytesProbieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
JavaScript,
10597 Bytes8 Bytes gespart dank @Patrick Roberts!
Definiert eine Funktion
s
, die ein 2D-Array von Ganzzahlen zurückgibt, wenn ein 2D-Array von Ganzzahlen als Eingabe bereitgestellt wird.Wie es funktioniert
Funktion
l
: ein Array gegebena
eine Kopie ohne den ersten und den letzten Index zurück.Funktion
p
:a
ruft bei einem 2D-Arrayl
auf, die erste und die letzte Zeile zu entfernen, und dann für jede verbleibende Zeilel
auf, die erste und die letzte Spalte zu entfernen. Dies führt das Zwiebelschälen durch.Funktion
c
: Gibt bei einem 2D-Arraya
eine Zeichenfolge zurück, die nur das0
s in der Zeichenfolge von enthälta
.Funktion
s
: Bei einem 2D - Arraya
, Anrufec
auf der geschälten Form des Arrays gegeben durchp
, und auf dem Array selbst. Vergleicht diese Zeichenfolgen lexikografisch, um festzustellen, ob die geschälte Form weniger0
s als das Original enthält. Wenn dies der Fall ist, ist das Original kontaminiert. Rufen Sie dahers
das geschälte Formular rekursiv auf. Ansonsten senden Sie das Original zurück.quelle
a.length
dasend
Argument vonarray.slice
in entfernenl
und 8 Bytes speichern.end
darf ein negativer Index sein.Retina ,
6057 BytesDie Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus. Der Zeilenvorschub am Ende ist signifikant.
Probieren Sie es online!
Erläuterung
Aufgrund des nachfolgenden Zeilenvorschubs werden nach dem alle Übereinstimmungen des regulären Ausdrucks gefunden
`
und aus der Eingabe entfernt. Aufgrund des Führens+
wird dies so oft wiederholt, bis sich die Ausgabe nicht mehr ändert (was darauf zurückzuführen ist, dass der reguläre Ausdruck nicht mehr übereinstimmt).Die Regex selbst besteht aus zwei Teilen:
Dieser Teil prüft, ob
0
irgendwo in der Außenhülle eine ist. Dies geschieht, indem der "Cursor" der Regex-Engine mit einem Lookbehind an den Anfang der Zeichenfolge bewegt wird (wir verwenden ihn[^_]
, um sowohl Ziffern als auch Zeilenvorschübe abzugleichen ):Und dann verwenden wir von dieser Position aus einen Lookahead, um
0
entweder in der ersten Zeile neben einem Zeilenvorschub oder in der letzten Zeile einen zu finden:Dann besteht die tatsächliche Übereinstimmung entweder aus der ersten Zeile (einschließlich des nachfolgenden Zeilenvorschubs), der letzten Zeile (einschließlich des führenden Zeilenvorschubs) oder dem ersten oder letzten Zeichen einer Zeile, wobei die Wortgrenze
\b
als Zeilenanfang / -ende missbraucht wird Anker:quelle
MATL ,
2621 BytesDie Eingabe erfolgt im folgenden Format
Die anderen vier Testfälle sind es also
Der Programmfehler im letzten Testfall erzeugt aber die korrekte Ausgabe (was nichts ist). Vielen Dank an @Dennis für das Bemerken!
Probieren Sie es online! . Oder überprüfen Sie alle Testfälle (einschließlich Umbruchcode).
Erläuterung
Dies wiederholt sich so oft wie die Anzahl der Spalten in der Eingabematrix, was mehr als ausreichend ist. Bei jeder Iteration wird die Shell in Abhängigkeit von ihren Werten entfernt oder beibehalten.
quelle
Pyth, 19 Bytes
Testsuite
quelle
JavaScript (ES6), 74 Byte
Erfolgt die Eingabe in Form einer Zeichenfolge mit Zeilenumbrüchen, die jede Zeile trennen (jedoch keine führenden oder nachfolgenden Zeilenumbrüche). Erläuterung:
/^.*0|0\n|\n0|0.*$/
ist ein regulärer Ausdruck, der kontaminierten Feldern entspricht, während er den/^.*\n?|.(.*).|\n.*$/
Teilen des Feldes entspricht, die gelöscht werden müssen, mit Ausnahme derjenigen(.*)
, die beibehalten werden müssen. (Dies ist kürzer als nach vorne oder hinten für das Zeilenumbruchszeichen zu suchen.)quelle
Perl 5, 63 + 3 = 66 Bytes
Benötigt die
-0
Flagge. Die Eingabe sollte kein nachgestelltes Zeilenumbruchzeichen enthalten.quelle
Pyke, 29 Bytes
Probieren Sie es hier aus!
Auch 29 Bytes
Probieren Sie es hier aus!
quelle
Pyth ,
3130 BytesTestsuite. (Die letzten Testfallfehler)
Verbesserung: Teil des Outer-Loop-Extraktors wurde zu einer Funktion (
L+hbeb
).Vorherige 31-Byte-Version:
Wie es funktioniert:
Der Code lautet im Grunde: Während das Produkt der Außenhülle Null ist, schälen Sie es.
Analysieren wir den Hauptcode (Q ist hier implizit):
Start von
Q
(Eingabe),while
erstes Lambda, zweites Lambda durchführen.Der erste Teil wäre der Lambda in
H
:Der zweite Teil wäre der Lambda in
Z
:Der erste Teil
Lassen Sie uns das analysieren:
Da Pyth Präfixnotation verwendet , wird dies ausgewertet:
Der zweite Teil
quelle
Mathematica, 78 Bytes
Anonyme Funktion, nimmt Eingaben als Matrix auf. Ignorieren Sie alle Fehler, die während der Ausführung auftreten können.
quelle