Ich habe mich kürzlich mit Code-Golf beschäftigt und versucht, den kleinsten Tautogramm-Checker zu schreiben.
Ein Tautogramm ist ein Satz, in dem alle Wörter mit demselben Buchstaben beginnen, zum Beispiel: Blumen gedeihen aus Frankreich .
Bestimmen Sie anhand eines Satzes als Eingabe, ob es sich um ein Tautogramm handelt.
Testfälle
Flowers flourish from France
True
This is not a Tautogram
False
Ich habe mir diesen Python-Code ausgedacht (weil er meine Hauptsprache ist):
print(True if len(list(set([x.upper()[0] for x in __import__('sys').argv[1:]]))) == 1 else False)
Verwendungszweck:
python3 tautogram.py Flowers flourish from France
# True
python3 tautogram.py This is not a Tautogram
# False
Der Satz darf Kommas und Punkte enthalten, aber keine anderen Sonderzeichen, nur Groß- und Kleinbuchstaben und Leerzeichen.
Seine Größe beträgt 98 Bytes. Gibt es eine kleinere Lösung in irgendeiner Sprache?
code-golf
string
decision-problem
Jaime Tenorio
quelle
quelle
tips
Frage gedacht , die auf beschränkt istPython
? In diesem Fall sollten diese beiden Tags hinzugefügt werden.Antworten:
05AB1E , 5 Bytes
Probieren Sie es online aus!
Hat dies auf dem Handy die keine Erklärung entschuldigt.
quelle
Python 2 , 47 Bytes
Probieren Sie es online aus!
Kam mit diesem auf dem Handy. Kann wahrscheinlich mehr Golf gespielt werden.
quelle
Clojure , 80 Bytes
Probieren Sie es online aus! . TIO unterstützt die Standard-String-Bibliothek von Clojure jedoch nicht, sodass die erste Version den Fehler "Kleinbuchstaben können nicht gefunden werden" auslöst.
Ungolfed:
Ich habe eine Version erstellt, die den Import vermeidet:
Aber es sind 112 Bytes .
quelle
(define(f s)(apply char=?(map(λ(x)(char-upcase(car(string->list x))))(string-split s))))
(de f(s)(apply =(mapcar car(split(chop(lowc s))" "))))
PowerShell ,
575041 ByteProbieren Sie es online aus!
Nimmt Eingaben auf und setzt
split
sie auf Leerzeichen. Durchläuft jedes Wort und greift nach dem ersten Buchstaben, indem ders
Ubstring
an der Position beginnt0
und nach dem1
Charakter sucht . Dannsort
s die Buchstaben (standardmäßig ohne-u
Berücksichtigung der Groß- und Kleinschreibung) mit dem Nique-Flag, um nur eine Kopie jedes Buchstabens herauszuziehen, und überprüft, obcount
diese Namen-eq
zutreffend sind1
. Die Ausgabe ist implizit.-9 Bytes dank mazzy.
quelle
05AB1E (Legacy) , 5 Bytes
Probieren Sie es online aus!
quelle
Brachylog , 5 Bytes
Probieren Sie es online aus!
quelle
Haskell , 71 Bytes
Probieren Sie es online aus!
Haskell ,
6158 Bytes (unter VerwendungData.Char.toLower
)Probieren Sie es online aus!
quelle
Perl 5 (
-p
), 20 BytesTIO
folgende Kommentare bei fehlerhafter Interpunktion (31 Bytes)
31 Bytes
Ansonsten gibt es einen anderen Ansatz, ebenfalls mit 31 Bytes:
31 Bytes andere
quelle
$_=!/^\W*+(.).*(?=\b\w)(?!\1)/i
JavaScript (Node.js) , 54 Byte
Probieren Sie es online aus!
Oder 47 Bytes, wenn jedem Wort (außer dem ersten) garantiert ein Leerzeichen vorangestellt ist.
quelle
\W
test
speichert mit ein weiteres Byte.Japt
-¡
, 5 BytesVersuch es
quelle
C # (Visual C # Interactive Compiler) , 41 Byte
Löst eine Ausnahme aus, wenn false, nichts, wenn true.
Probieren Sie es online aus!
quelle
Perl 6 , 19 Bytes
Probieren Sie es online aus!
quelle
Java, (36 Bytes)
TIO
quelle
(?> *)
, Atomgruppe mit Raum passen zu beginnen und zu pEvent bactracking. Nur "*" funktioniert nicht, weil nach fehlgeschlagenen Übereinstimmungen "*" zurückverfolgt wird, um mit der leeren Zeichenfolge