In einigen Versionen der Standard-Android-Taschenrechner-App können Sie eine Taste drücken, z. B. "sin" und dann die Taste "del", um sie zu "si" zu machen. Wahrscheinlich nur ein Fehler, den sie nicht entfernen müssen.
Die folgenden Buchstaben / Buchstabengruppierungen sind typisierbar:
Sünde si s cos co c bräunen ta t ln l Log lo e
So ist "geschmacklos" typisierbar, weil ta-steless und so ist "Clogs", weil "c-log-s". 'Got' ist jedoch nicht typisierbar, ebenso wenig wie 'an' oder 'xyz'.
Schreiben Sie ein Programm, das ein einzelnes Wort (oder eine Folge von Buchstaben, bei der Eingabe nur az) als Eingabe verwendet und eine Ausgabe erzeugt, um anzuzeigen, ob ein Wort typisierbar ist oder nicht.
Die Ausgabe kann ein einzelnes Zeichen, ein Buchstabe, eine Ziffer usw. sein. oder es kann größer sein. Alle typisierbaren Wörter sollten die gleiche Ausgabe erzeugen. Alle nicht typisierbaren Wörter sollten auch die gleiche Ausgabe erzeugen.
PS: Ist "geschmacklos" aus Neugier das längste typisierbare Wörterbuchwort?
quelle
Antworten:
Perl,
474341 + 1 = 42 Bytes-4 Bytes dank @Sunny Pun. -2 Bytes dank @Brad Gilbert b2gills und @Downgoat
Laufen Sie mit der
-n
Flagge.Es kann definitiv weiter golfen werden, aber im Geiste des Wettbewerbs lasse ich den meist originalen Regex, den ich mir zu Beginn ausgedacht habe. Gibt nichts zurück, wenn wahr,
1
wenn falsch.Probieren Sie es online!
Ich habe eine Wörterbuchdatei heruntergeladen und das längste Wort, das ich gefunden habe, waren 11 Buchstaben -
tattletales
quelle
co?
sollte ausreichen, dasin
sich das kümmern wirds
:) Schön mit zu spielen/log?/
!i
), oder dass das einzelne Ergebnis einen Sinn ergeben muss (remove one!
)/^(s|sin?|co?|t|tan?|ln?|log?|e)+$/
oder wenn Sie es vorziehen:/^([celst]|sin?|co|tan?|ln|log?)+$/
JavaScript (ES6), 44 Byte
Ich denke, das ist die kürzest mögliche Regex, aber natürlich kann ich mich irren.
Erläuterung
Ein naheliegender erster Startpunkt wäre ein regulärer Ausdruck, der einfach alle Optionen separat einschließt:
Erstens können wir beobachten, dass
cos
ausco
und gebildet werden kanns
, was es unnötig macht:Einige davon, wie z. B.
sin
undsi
, können kombiniert werden, indem der letzte Buchstabe optional angegeben wird:Dies funktioniert, weil es mit oder ohne am Ende
sin?
übereinstimmt und somit sowohl als auch abdeckt .si
n
sin
si
Es scheint auch viele
n?
s zu geben. Was ist, wenn wir sie alle zusammenfügen?Eine weitere Möglichkeit, Golf zu spielen, besteht darin, die verbleibenden Single-Char-Optionen in einem Charakterumfang zu kombinieren, der sich jedoch in der gleichen Länge ergibt:
Und so spielt man einen einfachen Regex. Ich glaube, das ist die kürzest mögliche Regex, die zu jeder Zeichenfolge passt, aber vielleicht nicht. Ich werde jedem, der es schafft, diesen regulären Ausdruck zu verbessern, ein Kopfgeld von +100 gewähren.
quelle
^(s|t|co?|(l|ta|si)n?|log?|e)+$
/ /.test.bind(/^((si|ta|l)n?|co?|log?|[ste])+$/)
.a=/^((si|ta|l)n?|co?|log?|[ste])+$/;a.test
für 42 Bytes tun . Ich glaube das ist erlaubt, daa.test
es sich um eine anonyme Funktion handelt.f=a.test
es nicht funktioniert. Ich frage mich, ob es akzeptabel ist, mit dem alternativen Namena.test
Pyth,
37332928 BytesDer Code enthält ein nicht druckbares Zeichen. Hier ist also ein
xxd
Hexdump.Probieren Sie es online aus.
Extremastronomisch ineffizient. Die zeitliche und räumliche Komplexität beträgtO (16 n )O (24 n ).Erläuterung
Zunächst
Q
wird implizit ein angehängt.quelle
s
.Jelly ,
3231302826 BytesGibt 0 aus, wenn das Wort typisierbar ist, und 1, wenn nicht. Vielen Dank an @JonathanAllan für das Abschlagen von 1 Byte!
Probieren Sie es online!
Wie es funktioniert
quelle
Brachylog , 33 Bytes
Behebung eines Fehlers dank @Synoli.
Probieren Sie es online!
Ausgänge
true.
wenn typisierbarem oder ausfalse.
anderen Gründen .Erläuterung
Wir versuchen, die Eingabe zu dekonkatenieren, bis wir eine finden, für die alle verketteten Zeichenfolgen ein Präfix von einer von ihnen sind
["sin", "cos", "tan", "log", "lne", "eee]
.quelle
.
nachhertrue
?true.
undfalse.
anders. Ich habe dies nur neu implementiert: Wenn die Ausgabe ignoriert wird (so wie sie hier ist) und es keine Schreibvorgänge gibtSTDOUT
, wird sie gedruckttrue.
oderfalse.
abhängig davon, ob das Hauptprädikat erfolgreich ist oder fehlschlägt. Es hat einen Punkt in SWI-Prolog, weiltrue.
undfalse.
tatsächlich gültige Programme sind, die immer erfolgreich sind / immer fehlschlagen.tan
explizit in der Liste zu erscheinen?Perl 6 ,
60 5044 Byteserster Versuch ( 60 )
Übersetzung der Perl 5 Antwort ( 50 )
mit
-n
Schalter ( 43 + 1 )Der erste
?
konvertiert das Ergebnis in einen Booleschen Wert und der erste konvertiert das Ergebnis in+
eine Zahl (1
fürTrue
,0
fürFalse
).quelle
Mathematica, 101 Bytes
Es scheint, dass die schwierigen Teile dieser Herausforderung darin bestehen, die kürzeste Regex zu finden und die prägnanteste Sprache zu wählen, die zur Regex passt. Ich habe nichts zum ersteren beizutragen, und Mathematica ist kein guter Kandidat für das letztere, da Sie
StringMatchQ
und verwenden müssenRegularExpression
. Ich kann Ihnen nur antworten: Ist "geschmacklos" das längste Wort, das Sie eingeben können?"Tattletale" scheint also die längste von einem Charakter zu sein.
quelle
True
oderFalse
eher als ein einzelnes Zeichen.Wunder , 41 Bytes
Verwendungszweck:
Hat die Frage vorher total missverstanden, aber jetzt ist alles behoben. Ausgänge
F
für Übereinstimmung undT
für keine Übereinstimmung.Nicht konkurrierend, 35 Bytes
Verwendungszweck:
Hierfür werden anwendbare reguläre Ausdrücke verwendet, die nach dieser Herausforderung implementiert wurden.
quelle
n
Nach meinem Verständnis kann man im Taschenrechner nur das letzte Zeichen löschen, das heißt nicht eintippbar abersin
undln
sind.sa
als wahrgot
.?
macht den Unterausdruck fügsam; Siehe rexegg.com/regex-quantifiers.html#cheat_sheet . Aber selbst wenn man es mit gierig??
oder besitzergreifend?+
macht, funktioniert es aus irgendeinem Grund nicht (zumindest in PHP).coelostats
Löst die Falle aus (beilo
undta
).Verarbeitung, 223 Bytes
Endlich beschlossen, eine Antwort ohne Regex zu machen. Verwenden Sie zum Aufrufen der Funktion
l("tasteless");
. Gibt0
für false und1
für true zurück.Erweiterter Code mit Erklärung
Grundsätzlich iterieren wir über den angegebenen String und bauen
b
char für char auf. Wir prüfen mit ,d()
wenn eine dertan
,log
... beginnen mitb
. Wenn ja, ist es gültig. Andernfalls prüfen wir, ob das Zeichen an dieser Position gültig ist, und setzen es zurückb
. Jetzt, wenn es ungültig ist,0
wird zurückgegeben, oder es wird noch gültig sein. Wenn das Programm am Ende noch nichts zurückgegeben hat, kehren Sie zurück1
.quelle
d
Funktion nicht a zurückgebenbool
?boolean
alsint
. Auchtrue
undfalse
erfordern mehr Bytes als1
und0
Scala, 49 Bytes
Gibt true zurück, wenn die angegebene Zeichenfolge mit dem regulären Ausdruck übereinstimmt, andernfalls false.
quelle
Python 3 , 154 Bytes
Probieren Sie es online!
quelle
Python 3 ,
149130 Bytesedit # 1: 19 Bytes mit @Henke Lösung rasiert
quelle
Python 2, 124 Bytes
quelle
PHP, 60 Bytes
Von ETHproductions gestohlener Regex : Nimmt
Eingaben vom Kommandozeilenargument entgegen. druckt
1
für typisierbar,0
für nicht typisierbar.ältere Versionen,
757369 BytesErsetzt alle möglichen Wörter durch eine leere Zeichenfolge, gibt das Ergebnis zurück und negiert.
Teilt die Eingabe nach Regex-Übereinstimmungen auf. Flag
1
steht fürPREG_SPLIT_NO_EMPTY
und weistpreg_split
an, nur nicht leere Ergebnisse zurückzugeben. Wenn die Eingabe typisierbar ist, enthältpreg_split
sie nur leere Ergebnisse, sodass ein leeres Array zurückgegeben wird, das falsch ist.!
negiert das Ergebnis.Beide Versionen nehmen Eingaben vom Kommandozeilenargument entgegen
und geben aus,
1
wenn das Ergebnis leer ist (Eingaben können eingegeben werden), sonst nichts.Anmerkungen: Das
Packen des regulären Ausdrucks mit
?
funktioniert hier nicht. es macht die Ausdrücke grässlich; wahrscheinlich wegen backtracking. Und die Reihenfolge der Alternativen ist wichtig:ta
muss vorher stehent
oder der Motor hört auf zu passen, wenn er es findett
.Ich habe ein Quantifier-Spickzettel gefunden , dachte
??
oder?+
könnte helfen; aber sie arbeiteten nicht für mich.quelle
Java 8, 55 Bytes
Disclamer: Ich habe den regulären Ausdruck von ETHproductions verwendet, weil er viele Bytes kürzer war als meiner. Volle Gutschrift auf dem Regex an ihn. Ich habe 24 Bytes hinzugefügt, um es zu einer Java-Funktion zu machen.
Gibt zurück,
false
wenn das Wort nicht in den Regex passte, sonsttrue
.quelle