Eine Zeichenfolge gilt als quadratisch, wenn folgende Bedingungen erfüllt sind:
- Jede Zeile hat die gleiche Anzahl von Zeichen
- Die Anzahl der Zeichen in jeder Zeile entspricht der Anzahl der Zeilen.
Ihre Aufgabe ist es, ein Programm oder eine Funktion zu schreiben, die bestimmt, ob eine bestimmte Eingabezeichenfolge ein Quadrat ist oder nicht.
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 ist und nur druckbare ASCII-Zeichen einschließlich Leerzeichen enthält.
Sie müssen einen Wahrheitswert für quadratische Zeichenfolgen und einen falschen Wert für andere Zeichenfolgen ausgeben.
Wahrheitstestfälle:
foo Bar baz
.
.s. .ss .s. (s steht für Leerzeichen)
ss ss (s steht für Leerzeichen)
aaaaa aaaaa aaaaa aaaaa aaaaa
Falsche Testfälle:
.. .
.
.
.... ....
4444 333 22
333 333
abc.def.ghi
Beachten Sie in einigen Fällen zusätzliche Leerzeilen.
Das ist Code-Golf - die wenigsten Bytes gewinnen!
Antworten:
Brachylog (2), 3 Bytes
Probieren Sie es online!
Volles Programm. Ausgänge
true.
für Wahrheit,false.
für Falschheit.Erläuterung
Ich war ein bisschen skeptisch, was die Nützlichkeit des
ṁ
eingebauten Codes angeht, als es hinzugefügt wurde, aber ich kann nicht wirklich leugnen, dass es hier hilfreich ist ...Brachylog (2), 7 Bytes
Probieren Sie es online!
Nicht eingebaute Lösung.
Noch schlägt alle anderen Einträge, zum Zeitpunkt des Schreibens.EDIT: Nicht ganz, der gleichlange Jelly-Eintrag ist eingegangen, während ich das geschrieben habe, und schlägt es über den Timestamp-Tiebreak.Erläuterung
quelle
ṁ
= "Behauptet, das Ergebnis ist quadratisch" :(.\l~l
Zeit gab es eine Herausforderung, bei der ich Schwierigkeiten hatte, ein Assert-Quadrat zu schreiben (es wäre damals so gewesen, außer dass der Backslash-Befehl, der unter anderem behauptet, dass seine Eingabe ein Rechteck ist , fehlerhaft war; Beachten sie, dass selbst wenn wir ersetzenṁ
mit.\l~l
, das ist immer noch hier das kürzeste Programm, kommt , daran zu denken, ich , dass auf den Posten hinzugefügt werden). Der Backslash-Befehl wurde behoben, aber der Sprachautor beschloss, gleichzeitig ein Assert-Quadrat hinzuzufügen. Ich dachte, "das wird bestimmt nie wieder auftauchen". Anscheinend habe ich mich geirrt.Python 2 , 52 Bytes
Probieren Sie es online! oder Probieren Sie alle Testfälle aus
quelle
'\n'
, lassen Sie es einfach leer (da die Eingabe keine Leerzeichen und Tabulatoren enthält).JavaScript (ES6),
46-45ByteErläuterung
true
nach Quadrat undfalse
nicht nach Nicht zu suchen .Versuch es
quelle
s=>!(s=s.split`\n`).some(x=>x.length-s.length)
!some
, einfach weil es genauso lang ist wieevery
.05AB1E ,
108 BytesProbieren Sie es online!
-2 Dank Riley ist dies im Grunde seine Antwort ._.
quelle
s
. So¶¡€gDgQP
Gelee ,
75 BytesProbieren Sie es online!
Vielen Dank an FryAmTheEggman für -2
quelle
Haskell,
3834 BytesProbieren Sie es online!
Pointfree-Version von
f s = all ((==length (lines s)).length) (lines s)
, dh die Eingabe in Zeilen aufteilen und prüfen, ob die Länge jeder Zeile der Anzahl der Zeilen entspricht.Edit: Danke an @xnor für 4 Bytes.
quelle
all
fürmap
das Schneiden verwendenand.
.Gelee , 7 Bytes
Probieren Sie es online!
Erläuterung
quelle
Japt , 9 Bytes
Online testen!
Erläuterung
Bei Verwendung einiger Funktionen, die kurz nach dem Veröffentlichen dieser Herausforderung implementiert wurden, können dies 6 Byte sein:
Online testen!
Erläuterung
quelle
y
die Lösung war, aber meine kam mit ein paar Bytes mehr herein.Retina ,
33-31BytesProbieren Sie es online! Erläuterung: In der ersten Stufe werden einfach alle druckbaren ASCII-Zeichen in dasselbe Zeichen geändert, um die Zuordnung zu vereinfachen. (Dies könnte auch ohne Code-Golf und nicht ohne Code-Challenge geschehen.) Die zweite Stufe entspricht dann mindestens einem Zeichen in der ersten Zeile. Für jedes zusätzliche Zeichen in der ersten Zeile wird dann optional eine neue Zeile gefolgt von einer Kopie der ersten Zeile gefunden. Der letzte Teil des Ausdrucks führt dazu, dass die Übereinstimmung fehlschlägt, wenn mehr Spalten als Zeilen vorhanden sind.
quelle
\S\n;
anstelle der ersten Zeile spart ein Byte.
mit.
spart zwei, aber danke.Schale , 6 Bytes
Nimmt einen String und druckt entweder
1
oder0
. Probieren Sie es online! Die erste Zeile durchläuft die Testfälle. Entfernen Sie es, wenn Sie einen einzelnen Wert testen möchten.Erläuterung
Husk ist eine neue funktionale Golfsprache, die von mir und Leo entwickelt wurde . Es fehlen viele Funktionen und die Entwicklung ist noch nicht abgeschlossen. Sein Hauptmerkmal ist ein starres System, mit dem wir Funktionen höherer Ordnung überladen können.
Auf einer hohen Ebene funktioniert das Programm wie folgt:
Die Funktion
≡
prüft tatsächlich, ob zwei Arrays dieselbe Form und dieselbe Verteilung wahrer Elemente haben. In Husk sind alle Zeichen mit Ausnahme des Nullbytes wahr, und dies wird in unseren Eingaben nicht vorkommen. AuchS
ist der S-combinator , eine Funktion , die als Eingaben zwei Funktionen übernimmt, hier≡
undT'a
und gibt eine neue Funktion, die Kartenx
zu≡(x)(T'a x)
. Das Ergebnis vonS
wird mit zusammengesetzt¶
, und diese Funktion wird implizit auf die Eingabe angewendet.Woher weiß Husk, dass es für
S
die nächste Funktion gelten soll, aber¶
mit der Funktion auf der linken Seite erstellt werden soll? Einfach: Es wird einfach jede Interpretation ausprobiert und die ausgewählt, bei der die Typen sinnvoll sind. Dies wird in der Husk-Dokumentation näher erläutert .quelle
Pure Bash (keine Dienstprogramme), 55
mapfile
Liest die Eingabe in das Arraya
Der umgekehrte Sinn wird als Shell-Returncode zurückgegeben (prüfen mit
echo $?
) - perfektes Quadrat ist 1, alles andere ist 0.Versuchen Sie es online (wahr) .
Versuchen Sie es online (falsch) .
Vorherige Antwort mit eval-escape-expansion hell, 78:
Versuchen Sie es online (wahr) .
Versuchen Sie es online (falsch) .
quelle
Perl 6 , 27 Bytes
Prüft, ob die Anzahl der Zeilen in der Eingabezeichenfolge der Anzahl der Zeichen in jeder Zeile entspricht.
quelle
.lines
Methode nicht zurückgegeben .Pyth, 7 Bytes
Probieren Sie es hier aus
Benötigt keinen nachgestellten Zeilenumbruch. Ersetzt die Eingabe durch ein 2D-Array mit 1, wobei eine 1 ein beliebiges Zeichen in der ursprünglichen Eingabe darstellt. Dann prüfen wir, ob das Array nach der Transponierung unverändert ist (Ersetzen von Spalten durch Zeilen). In einer solchen Situation ist nur ein Quadrat wahr.
quelle
Java (OpenJDK 8) ,
96919087 Bytes-5 Bytes dank @KevinCruijssen
-1 Bytes dank @TheLethalCoder
-2 Bytes dank @ OlivierGrégoire
Probieren Sie es online!
quelle
String[]s
und Sie können das,0
in.split("\\n");
für -3 Byte entfernen . Und das Semikolon / ganz;
am Ende musst du nicht zählen, damit nochmal -1. Oh, und Sie müssen das sindjava.util.
vor demArrays
fürchte ich. Importe / Verwendungen sind ebenfalls Teil der Byteanzahl.java.util.
eine reguläre for-Schleife wie diesefor(String x:s)if(x.length()!=s.length)return 0>1;return 1>0;
kürzer zu sein alsreturn java.util.Arrays.stream(s).anyMatch(l->l.length()!=s.length);
.\n
?a.split("\n")
ist eigentlich kürzer!a->java.util.Arrays.stream(a.split("\n")).allMatch(x->x.length()==a.split("\n").length)
leng
und sind noch mehr vorhandenth()
. Sie erscheinen also anscheinend erst nach dem 60. Zeichen und dann alle 20 Zeichen.05AB1E , 7 Bytes
Probieren Sie es online!
quelle
n
Eingaben anstelle von 1 und warum meine ursprüngliche Antwort nicht funktioniert hat.|
bedeutet "den Rest der Eingabe übernehmen und durch Zeilenumbrüche teilen", was in keiner Weise bedeutet, dass mehrere Eingaben vorgenommen werden. Sie müssen STDIN nur als eine einzige Eingabe behandeln.R , 57 Bytes
Eine anonyme Funktion; Teilt sich in Zeilenumbrüche, berechnet die Länge jeder Zeile und überprüft, ob alle Zeilen der Anzahl der Zeilen entsprechen.
Probieren Sie es online!
quelle
MATL ,
1412 BytesDie Eingabezeichenfolge wird mithilfe der Zeichenfolgenverkettung (
[...]
) und des Codepunkts10
zur Darstellung von LF definiert. Zum Beispiel['aaa' 10 'bb']
wird in MATL interpretiert als String'aaa'
mit dem Zeichen mit dem Code Punkt konkateniert10
mit Zeichenkette verkettet'bb'
.Die Ausgabe ist ein nicht leerer numerischer Vektor, der genau dann wahr ist, wenn alle seine Einträge ungleich Null sind.
Probieren Sie es online!
Erläuterung
Betrachten Sie die Eingabe
['4444' 10 '333' 10 '22']
.quelle
R, 35 Bytes
Übernimmt die Eingabe von stdin. Überprüft, ob die Anzahl der Zeichen in jeder Zeile der Gesamtzahl der Zeilen entspricht. Rückgabe
TRUE
oderFALSE
entsprechend.quelle
JavaScript (ES6), 48 Byte
quelle
CJam, 11 Bytes
Probieren Sie es online!
quelle
OCaml , 56 Bytes
Probieren Sie es online!
quelle
Pyth,
1210 Bytes2 Bytes dank @FryAmTheEggman gespart.
Probieren Sie es online aus
Erläuterung
quelle
QBIC , 43 Bytes
Ich bin froh darüber, wie kurz ein QBasic-Derivat für diese Herausforderung sein muss.
Erläuterung:
quelle
Pyth, 7 Bytes
Demonstration
Transponieren Sie die Eingabe zweimal mit Kürzung und prüfen Sie dann, ob das Ergebnis mit dem Original übereinstimmt.
quelle
Ruby, 50 Bytes
Probieren Sie es online!
Erläuterung
quelle
.split($/,-1);
->.split $/,-1;
lines
anstelle vonread
und dann verwendensplit
(aber dann müssen Sie 1 hinzufügen,size
da die Zeilen den abschließenden Zeilenumbruch enthalten)Cheddar , 39 Bytes
Probieren Sie es online!
quelle
Clojure, 58 Bytes
Benötigt einen abschließenden Zeilenumbruch und freut sich darauf, etwas Magischeres zu sehen.
quelle
APL (Dyalog) , 17 Bytes
Benötigt,
⎕ML←3
was auf vielen Systemen Standard ist. Verwendet CR.Probieren Sie es online!
↓∘⎕FMT
[ist] split-in-Linien F oder m eine t ted-in-a-square Argument≡
identisch mit⎕TC[2]∘≠
die In-Groups-of-Non-Newline * -Zeichen⊂
partitioniert⊢
Streit?* Das zweite Element der Liste von T erminal C ontrol Zeichen.
In Version 16.0 kann man
↓∘⎕FMT≡⎕TC[3]∘≠⊆⊢
mit schreiben⎕ML←1
.quelle
⎕ML
?⎕ML
, während Menschen, die mit den anderen APLs begonnen haben, tendieren, mit einem Niedrig zu laufen⎕ML
.PowerShell, 64 Byte
Der gleiche Ansatz (Aufteilung, Zeilenlänge, Anzahl der Zeilen) wie bei anderen Antworten in anderen Sprachen als Golf, aber es gibt kein nettes map () - Äquivalent. Es handelt sich also um ein Array von Zeilenlängen mit der Anzahl der am Ende markierten Zeilen und dann um dieses Array ist gruppiert. Quadrate kommen heraus wie
3,3,3,3 -> 1 group, all line lengths and line count were equal
und Nichtquadrate kommen heraus wie3,2,1 -> 3 groups
, etwas war im Quadrat ungleich:Erfordert Zeilenende im Linux-Stil, kein abschließendes Zeilenende. z.B
(Und Sie können für die falschen Tests Ähnliches tun, aber ich werde es nicht hierher setzen, da es mehr von ihnen gibt). Die paar
@
Symbole sind erforderlich, wenn die Eingabe die einzige ist,'.'
andernfalls wird bei der Aufteilung kein Array aus einer Zeichenfolge erstellt, sondern nur eine Zeichenfolge, und die Array-Verkettung gibt keine1,1
Ausgaben aus2
.Ich hoffte, es könnte kürzer sein, alle Zeichen durch 'a' zu ersetzen und dann alle Quadrate 'a' mit roher Gewalt von 1 auf Eingabelänge zu setzen und zu prüfen, ob sie mit der Eingabe übereinstimmen. Sobald ich über param () und .Length und -join und -replace hinausgekommen bin, endet es viel länger bei 81 Bytes:
quelle
Schmutz , 11 Bytes
Druckt
1
für Quadrate und0
für Nichtquadrate. Probieren Sie es online!Erläuterung
Eine ausführliche Erklärung finden Sie auf der Grime-Tutorial-Seite , die genau dieses Programm als Beispiel enthält.
quelle