Ihre heutige Herausforderung besteht darin, eine mehrzeilige Zeichenfolge zu verwenden und das größte in der Zeichenfolge enthaltene Quadrat auszugeben, das die obere linke Ecke enthält.
Eine quadratische Zeichenfolge ist eine Zeichenfolge, bei der:
- Jede Zeile hat die gleiche Anzahl von Zeichen
- Die Anzahl der Zeichen in jeder Zeile entspricht der Anzahl der Zeilen.
Berücksichtigen Sie die folgende mögliche Eingabezeichenfolge:
abcde
fgh
asdf
foobar
Das größte Quadrat, das Sie daraus entnehmen können und das das erste Zeichen (das a
in der oberen linken Ecke) enthält, ist das folgende:
abc
fgh
asd
Es kann kein Quadrat mit der Seitenlänge 4 geben, da die zweite Zeile nicht lang genug ist. Betrachten Sie nun diese mögliche Eingabe:
a
bcd
edf
ghi
Der größte Platz hier ist gerade a
. Das 3x3-Quadrat im unteren Bereich enthält nicht das erste Zeichen und zählt nicht.
Hier noch ein paar Testfälle:
a
a
abc
def
gh
ab
de
ab
cd
ab
cd
abcde
fghij
klm
no
abc
fgh
klm
a
b
a
Möglicherweise müssen Eingaben durch die Auswahl von LF, CR oder CRLF begrenzt werden.
Die Zeilenumbruchzeichen werden nicht als Teil der Zeilenlänge betrachtet.
Möglicherweise muss eine nachgestellte Zeile in der Eingabe vorhanden sein oder nicht, was nicht als zusätzliche Zeile zählt.
Die Eingabe ist eine Zeichenfolge oder ein 1D-Zeichen-Array. Es ist keine Liste von Zeichenfolgen.
Sie können davon ausgehen, dass die Eingabe nicht leer und alle Zeilen nicht leer sind und dass sie nur druckbares ASCII enthält, einschließlich Leerzeichen und Zeilenumbrüchen (für den Zeilentrenner), jedoch keine Tabulatoren.
Das ist Code-Golf , die wenigsten Bytes gewinnen!
.split('\n')
deshalb verstehe ich nicht, warum manche es kostenlos bekommen sollten.Antworten:
Brachylog , 11 Bytes
Probieren Sie es online!
Erläuterung
quelle
ṁ
eingebaute ist ja ganz praktisch!Schale , 13 Bytes
Probieren Sie es online!
Erläuterung
quelle
GNU sed ,
106 + 194 + 2 = 96 Bytes+2 Bytes für
-rz
Flags. Verwendet die nicht druckbaren Zeichen NUL und BEL, wie@
und#
hier gezeigt. Siehe unten für einen xxd-Dump.Vielen Dank an @seshoumara für die Zusendung von
-z
.Probieren Sie es online!
Erläuterung
Dies funktioniert, indem zwei Cursor in den Text eingefügt werden - einer, um Zeilen zu überspringen, und einer, um Spalten zu überspringen. Die Cursor werden durch NUL (0x00) bzw. BEL (0x07) dargestellt, aber in den folgenden Beispielen werde ich
@
und verwenden#
. Angenommen, wir haben diesen Input:Der BEL-Cursor wird vor der 0-ten Spalte und der BEL-Cursor vor der 0-ten Zeile eingefügt (hier habe ich die Spalten aus Gründen der Lesbarkeit ausgerichtet gehalten; tatsächlich gibt es jedoch keinen linken Abstand):
In einer Schleife werden die Cursor um jeweils ein Zeichen nach rechts und eine Zeile nach unten verschoben:
Nach jeder Iteration werden zwei Bedingungen überprüft:
Wenn eine der beiden Bedingungen falsch ist, endet die Schleife. Das Skript wird beendet, indem
@
in jeder Zeile und danach#
im Musterbereich alles gelöscht wird.xxd dump
quelle
line1\nline2\nline3
wo\n
ist\x5C\x6E
? Welche?\n
wird es als Zeilenumbruchzeichen interpretiert (\x0A
nicht\x5C\x6E
), und ich kann keine Möglichkeit finden, sed dazu zu bringen, Eingaben mit Zeilenumbruchzeichen als einzelne Zeile zu übernehmen.-z
Flagge erinnert . Vielen Dank!Python 2 , 81 Bytes
Probieren Sie es online!
Eine interessante Methode, aber 2 Bytes länger.
Python 2 , 83 Bytes
Probieren Sie es online!
quelle
input
nur eine Zeile?raw_input()
mehr Bytes hinzugefügt.JavaScript (ES6), 77 Byte
Verwendet rekursiv einen regulären Ausdruck, um nach einem immer größeren Quadrat zu suchen, bis keines gefunden wird.
Der reguläre Ausdruck wäre dies für ein 3x3-Quadrat:
Es wird erwartet, dass die Eingabe mit einer neuen Zeile endet, und die Ausgabe ist eine Liste.
Erläuterung:
Snippet:
Code-Snippet anzeigen
quelle
Brachylog , 16 Bytes
Probieren Sie es online!
quelle
Perl 5 , 84 Bytes
Probieren Sie es online!
Erfüllt den
"abcde\nfghij\nklm\nno"
Testfall.quelle
chop
anstelle vonchomp
und++$i<@a
anstelle von verwenden$i++<$#a
R ,
84838176 Byte-5 Bytes portieren Dennis 'Ansatz mit
sum
Probieren Sie es online!
Liest von stdin, druckt auf stdout ohne nachfolgende Newline.
Leicht ungolfed:
quelle
C (gcc) ,
162159151147144142137 BytesHier muss es ein paar Schläge geben, um Golf zu spielen ...
Probieren Sie es online!
quelle
!=-1
darf>-1
dergetchar()
Ausgabewert kleiner als minus eins sein? Könnte es überhaupt sein+1
?~
, um minus eins zu erkennen.Gelee , 15 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Java 8, 150 Bytes
Erläuterung:
Probieren Sie es hier aus.
quelle
MATL , 33 Bytes
Probieren Sie es online!
Mein spidey sense sagt mir, dass es wahrscheinlich einen kürzeren Weg gibt (ich denke
Ybo
von Anfang an etwas mit ) ... Benötigt eine neue Zeile am Ende. (Hinweis: Ich habe dies ein wenig überarbeitet, da dies auch leere Zeilen handhabt, was nicht erforderlich ist. Ich werde sehen, ob ich den Bytecount reduzieren kann, da es im Codegolf keine Funktion ist, sondern ein Fehler.)quelle
Python 2 , 132 Bytes
Probieren Sie es online!
quelle
Python 2 , 103 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6), 95 Byte
Erfordert eine nachgestellte Zeile in der Eingabe.
quelle
Wolfram Language (Mathematica) , 81 Byte
Probieren Sie es online!
quelle
APL (Dyalog) , 25 Byte *
Tacit-Präfix-Funktion. Gibt eine Matrix zurück.
Probieren Sie es online!
Es ist wirklich eine Spitze von zwei unabhängigen Funktionen, nämlich
⎕AV[3]∘≠⊆⊢
welche sich mit dem umständlichen Eingabeformat befassen und↑↑⍨2⍴(⌊/≢,≢¨)
welche die eigentliche interessante Arbeit erledigen.⎕AV[3]∘≠
Unterschied zu LF (das dritte Element des A tomic V ector - der Zeichensatz)⊆
Partitionen (Teilfolgen, die bei Werten beginnen, die größer sind als ihre Vorgänger und bei Nullen fallen)⊢
das Argument(
…)
Wenden folgende stillschweigende Funktion an:2⍴(
…)
Das Folgende in Länge 2 umformen:⌊/
das Minimum von≢
die Anzahl der Saiten,
gefolgt von≢¨
die Anzahl der Zeichen in jeder Zeichenfolge↑⍨
nimm so viele Zeilen und Spalten aus↑
die Saiten werden zu einer Matrix gemischt (Auffüllen mit Leerzeichen)* In der Classic mit
⎕ML
( M igration L evel)3
(Standard auf vielen Systemen) und Substitution⊂
für⊆
und⊃
für die ganz links↑
. Tio!quelle
⎕ML←3
sind veraltet, daher zeige ich die Sprache lieber so, wie sie normalerweise angezeigt wird. Tatsächlich übernehmen fast alle meine Dyalog APL-Lösungen Classic, nur weil wir Bytes anstelle von Zeichen zählen, obwohl selbst die Unicode-Version weniger als 256 Zeichen Bedeutung zuweist.PHP, 123 Bytes
benötigt PHP 5.4, 5.5 oder 5.6. Ersetzen Sie
split
mitexplode
für späteres PHP.Laufen Sie mit
php -nr '<code> '<string>'
oder versuchen Sie es online . (Stellen Sie sicher, dass Sie eine passende PHP-Version auswählen!)
quelle
Haskell ,
9288 BytesProbieren Sie es online!
quelle
Perl 5, 60 + 5 (-0777p) Bytes
Probieren Sie es online aus
quelle
-0777
. Was tun-00
und-0777
tun ?-0
ist der Rekord - Separator in Oktalformat angeben ,777
um anzuzeigen , keinen Separator , so dass die gesamte Datei lesen, ein besonderer Wert0
ist ein weiterer besonderer Wert anzuzeigen „Absatz - Modus“, Separator ist mehr als 1 aufeinanderfolgende ZeilenumbrüchePerl 6 ,
158140 BytesProbieren Sie es online!
Hurra für meine erste Perl 6-Antwort. Ich werde ein paar Kommandozeilenoptionen ausprobieren, um zu sehen, ob ich noch ein bisschen mehr Golf spielen kann. Alle Hilfe beim Speichern von Bytes ist willkommen!
quelle
Scala , 201 Bytes
Probieren Sie es online!
Zum ersten Mal Golfspielen in dieser Sprache, also vielleicht nicht die beste.
quelle