Bei einer Zeichenfolge aus druckbarem ASCII-Text (einschließlich Zeilenumbrüchen und Leerzeichen), die mindestens ein Zeichen enthält, bei dem es sich weder um eine neue Zeile noch um ein Leerzeichen handelt, wird ein wahrer Wert ausgegeben, wenn die Zeichenfolge rechteckig ist, andernfalls ein falscher Wert. Darüber hinaus muss der Quellcode für Ihre Lösung rechteckig sein .
Eine Zeichenfolge ist rechteckig, wenn alle folgenden Bedingungen erfüllt sind:
- Die erste und die letzte Zeile enthalten keine Leerzeichen.
- Das erste und letzte Zeichen jeder Zeile ist kein Leerzeichen.
- Alle Zeilen haben die gleiche Anzahl von Zeichen.
Der folgende Text ist beispielsweise rechteckig:
abcd
e fg
hijk
Dieser Text ist jedoch nicht rechteckig (Anforderung 3):
1234
567
8900
Testfälle
Wahrheit:
sdghajksfg
asdf
jkl;
qwerty
u i op
zxcvbn
1234
5 6
7890
abcd
e fg
hijk
Falsey:
a b c
123
456
7 9
12
345
qwerty
uiop
zxcvnm
1234
567
8900
Das ist Code-Golf , also gewinnt die kürzeste Lösung in Bytes.
Antworten:
C (GCC) ,
127125124118 Bytesr*=!e&(!t|t==c);
zu gespeichertr>>=e||t&&t-c;
. (Dieser Golf war die Inspiration für meine letzten C-Tipps zum Inverse Flag-Update .)*(_-2)
auf gespeichert_[~1]
.*_++-10||(...)
,*_++<11?...:0
indem...:0
dasc++
Inkrement mit dem Platzhalter Null (der nicht konstruktiv verwendet wird) abgegolft und verwendet wurde. Diese Golfplätze erlaubten ein weiteres Ummischen der Loops.Probieren Sie es online!
Quelllayout für ein größeres Rechteck.
Erläuterung
Im Folgenden wird die 124 Byte lange Version erläutert.
Probieren Sie es online!
quelle
r,e,c,t
Java 10,
214176169152144139 Bytes-5 Bytes dank @Neil .
Verwendet
String[]a
anstelle vonvar a
;return-r<0;
stattreturn r>0;
; und//
am Ende einen Kommentar hinzugefügt , sodass in der ersten und letzten Zeile keine Leerzeichen vorhanden sind.Beachten Sie, dass dieses Rechteck kürzer als eine einzeilige Eingabe ist, da
int r=1,...;
es durch ersetzt werden sollteint[]v{1,...};
, und alle Verwendungen der ganzen Zahlen dann werdenv[n]
(wobei n der Index der Variablen im Array istv
).Probieren Sie es online aus.
Erläuterung:
Hier ist das gleiche Basisprogramm mit Leerzeichen (
128126 Bytes ):-2 Bytes dank @Neil .
Probieren Sie es online aus.
quelle
T-SQL,
237207 BytesAusgang 1 für Rechteck, sonst 0. Ich musste Tonnen von zusätzlichen Parens und Klammern verwenden, um Leerzeichen zu entfernen. Ich bin sicher, es gibt viel Raum für Verbesserungen.
Erklärung :
Gemäß unseren zulässigen E / A-Optionen und der Erläuterung in den Fragenkommentaren werden die Eingaben als separate Zeilen in einer bereits vorhandenen Tabelle t verwendet . Da Daten in SQL von Natur aus ungeordnet sind, enthält diese Tabelle das Identitätsfeld "Zeilennummer" i :
Grundsätzlich führt mein SQL 3 Unterabfragen aus, von denen jede die 3 Kriterien des "rechteckigen" Codes zurückgibt
0
oder auf diesen1
basiert. Diese 3 Werte werden miteinander multipliziert und nur1
für Code zurückgegeben, der alle 3 erfüllt.BEARBEITEN : Kombinieren Sie die Kriterien 2 und 3 in einem SELECT, um Platz zu sparen
Die
TRIM(v)
Funktion wird nur von SQL 2017 und höher unterstützt. Frühere Versionen würden benötigenLTRIM(RTRIM(v))
, was ein erneutes Ausgleichen der Zeilen erfordern würde.Eine zufällige Anmerkung: Die
LEN()
Funktion in SQL ignoriert also nachfolgende LeerzeichenLEN('foo ') = 3
. Um eine "wahre" Länge zu erhalten, müssen Sie ein Zeichen bis zum Ende anheften und dann eins subtrahieren: Pquelle
C ++,
199183181175 BytesDiese Vorlagenfunktion akzeptiert Zeilen als Sammlung von Zeichenfolgen (bei denen es sich um breite Zeichenfolgen handeln kann), die als Iteratorenpaar übergeben werden.
Vielen Dank an den Benutzer Erroneous , der mich an das
back()
Mitglied von erinnertstd::string
und darauf hingewiesen hat, dassnpos+1
es null ist.Ungolfed-Äquivalent
Das einzige wirkliche Golfspiel besteht darin, die erste und die letzte Zeile zu verketten, damit wir eine einzelne Zeile
find
für Leerzeichen in diesen Zeilen ausführen können .Testprogramm
quelle
.find(' ')+1==0
unds.back()
anstelle von auf 183 Bytes mit einer Linienbreite von 22 weiter golfen werden*s.rbegin()
.JavaScript (Node.js) , 85 Byte
Probieren Sie es online!
quelle
NOR
Operator!Python 2 , 82 Bytes
Probieren Sie es online!
Aufrufen als
f("abcd", "e fg", "hijk")
.quelle
Haskell ,
10610298110109102 BytesVielen Dank an @nimi und @Laikoni für jeweils ein Byte!
Probieren Sie es online!
quelle
Haskell , 79 Bytes
Probieren Sie es online! Nimmt die Eingabe als eine Liste von Zeilen.
Das Muster
g(x:r)= ...
bindet die erste Zeile anx
und die (möglicherweise leere) Liste der verbleibenden Zeilen anr
.all((==(0<$x)).(0<$))r
Überprüfen Sie dann , ob alle Zeilen inr
derselben Länge wiex
(mit diesem Tipp ) sind.Wenn nicht, dann schließt die Verbindung
&&
kurz und kehrt zurückFalse
, andernfalls wird die rechte Seite ausgewertet. Dort wird ein String gebildet, der ausx
der ersten Zeile,last(x:r)
der letzten Zeiler
(oder der ersten Zeile, falls dieser
noch leer ist) und(head<$>r)
dem ersten und(last<$>r)
dem letzten Zeichen jeder Zeile besteht.all(>='!')
Überprüft für diese Zeichenfolge, ob sie keine Leerzeichen enthält (wir können sie(>' ')
aufgrund der Quellcodeeinschränkung nicht verwenden ).quelle
contains at least one character that is neither a newline nor a space
, die auch das Löschen der leeren Liste Fall ermöglicht.MATL , 13 Bytes
Die Eingabe ist ein Array von Zeichenfolgen im Format
{'abc' 'de'}
.Die Ausgabe ist ein Array, das nur Einsen enthält, was der Wahrheit entspricht , oder ein Array, das mindestens eine Null enthält, was falsch ist .
Probieren Sie es online! Oder überprüfen Sie alle Testfälle , einschließlich des Wahrheits- / Falschheitstests.
Erläuterung
quelle
cO6Lt&(32=~
Probieren Sie es online! Löscht einfach die nicht umrandeten Teile und prüft dann, ob Leerzeichen vorhanden sind.cF6Lt&(32=~
. Fühlen Sie sich frei, es zu bearbeiten, oder wenn nicht, können wir es einfach in den Kommentaren belassen.JavaScript (ES6), 88 Byte
Probieren Sie es online!
quelle
Leinwand ,
1715 BytesProbieren Sie es hier aus!
Erklärung (ASCII-fähig für Monospace):
quelle
Perl 5 , 70 Bytes
Probieren Sie es online!
Ausgaben
0
für Wahrheiten, jede andere Zahl für Falseys.quelle
Rot ,
216191 BytesProbieren Sie es online!
Ich habe in die erste und letzte Reihe eine Menge ansonsten nicht notwendiger Klammern gesetzt.
quelle
Gelee , 17 Bytes
Probieren Sie es online!
quelle
Does not seem to enforce equal line length
ist alles, was ich gesagt habe." \n "
Try it onlineGelee , 15 Bytes
Verwendet eine von Mnemonic entwickelte Methode in einer (derzeit - aufgrund eines Edge-Case-Fehlers) gelöschten Pyth-Übermittlung. (Wenn es jetzt repariert ist, geben Sie etwas Kredit !)
Eine monadische Verknüpfung, die eine Liste von Zeichen akzeptiert, die 1 oder 0 zurückgibt.
Probieren Sie es online!
Wie?
quelle
Japt , 22 Bytes
Nicht konkurrierende Antwort: Es gibt einen bekannten Fehler in Japt , bei dem zweidimensionale Array-Rotationen die Ergebnisse abschneiden. Aufgrund dieses Fehlers funktioniert der folgende Code nur bei Eingaben, die quadratisch sind. Wenn der Fehler jedoch nicht vorhanden war, sollte der folgende Code vollständig korrekt funktionieren.
Nimmt Eingaben als ein Array von Zeichenfolgen. Durch die Verwendung von Klammern anstelle von Leerzeichen wird das Erfordernis eines Rechteckcodes recht einfach.
Probieren Sie es hier aus .
quelle
Ruby 2.5+, 63 Bytes
Nimmt Eingaben als ein Array von Zeichenfolgen. Kein Testlink, da die Version auf TIO (2.4) für diesen zu alt ist. Stattdessen ist hier eine etwas längere (69 Byte) Version zum Testen:
Probieren Sie es online!
Der Unterschied besteht darin, dass 2.5 Ruby die direkte Übergabe eines Regex-Musters an
all?, any?, none?
Methoden unterstützt, wodurch einige Bytes eingespart werden. Die Methode selbst ist selbsterklärend - wir testen:quelle
C (gcc) , 119 Bytes
Übernimmt die Eingabe als Liste (n) von n Zeichenfolgen.
Probieren Sie es online!
quelle
C # (.NET Core) ,
145167 BytesProbieren Sie es online!
quelle
S[0].IndexOf(" ")
sucht nach einem Leerzeichen in der ersten undS[S.Count()-1].IndexOf(" ")
in der letzten Zeile. Wenn in der ersten und letzten Zeile kein Leerzeichen vorhanden ist, ist es -2, was dann bei zutrifft-2 < -1
.True
wenn er an Ihr Programm übergeben wird. Dies ist eine zusätzliche Einschränkung bei dieser Herausforderung.