Beschreibung :
Überprüfen Sie anhand einer Zeichenfolge als Eingabe, ob es sich um eine gültige Ordnungszahl in Englisch handelt. Wenn es gültig ist, geben Sie den Wahrheitswert zurück, andernfalls geben Sie den falschen Wert zurück. (Vorgeschlagen von @Arnauld. Danke. Auch von @JoKing)
Für Benutzer, die über Ordnungszahlen wissen wollen, gehen Sie hier:
https://www.mathsisfun.com/numbers/cardinal-ordinal-chart.html (Vorschlag von: qwr)
Mögliche Eingaben:
21st ---> true
12nd ---> false
1nd ---> false
....
Dies ist eine Code-Golf- Herausforderung, so dass der kürzeste Code in jeder Sprache der Gewinner ist.
Beispiele:
console.log('12th' , true) // This evaluates to true
console.log('1st' , true) // also evaluates to true
console.log('21nd' , false) // returns false
console.log('11st' , false) // returns false
console.log('111199231923819238198231923213123909808th' , true) // true
Da viele Leute die Frage gestellt haben, ob Eingaben nur gültige Zeichenfolgen sind oder nicht:
Alle Eingaben sind immer gültig. Das heißt, sie haben die Form eines Strings und bestehen aus einer Ziffer (oder einer Anzahl von Ziffern) zusammen mit einem der vier Suffixe:
st
, nd
, rd
,th
quelle
1st
, negative Ordnungszahlen existieren nicht - english.stackexchange.com/questions/309713/…Antworten:
Bash + GNU-Dienstprogramme , 54
Regex-Matching scheint ein einfacher Weg zu sein. Ich bin mir ziemlich sicher, dass dieser Ausdruck mehr verkürzt werden könnte:
Eingabe von STDIN. Ausgabe als Shell-Rückkehrcode - 0 ist wahr und 1 ist falsch.
Probieren Sie es online!
quelle
1st
und an1th
.egrep
ist in der Lage zu addieren und die Primalität zu testen (in unary), daher denke ich, dass Sie dies zu einer egrep Antwort machen können.egrep
sie für jede Eingabe separat ausgeführt würden, um jeweils den passenden Exit-Code zu erhalten: Probieren Sie es online aus! .Dies unter der Annahme, dass die Eingabe ein gültiges Ordnungsmuster ist. Wenn dies nicht der Fall ist, müssen Änderungen vorgenommen werden
JavaScript (Node.js) ,
979278 ByteProbieren Sie es online!
Erläuterung
_____________________________________________________________________
Hafen von @Herman Lauenstein
JavaScript (Node.js) , 48 Byte
Probieren Sie es online!
quelle
***.
1sta
bestehen Sie den Reg-Test. wenn angenommen,/1.th|(^|[^1])(1s|2n|3r|[^1-3]t)/
ArbeitPython ,
5653 Bytes-3 Dank an (Verwenden Sie die eindeutige Buchstabeneinbeziehung anstelle der vorletzten Zeichengleichheit)
Eine unbenannte Funktion.
Probieren Sie es online!
Wie?
Da alle Eingabe (hier
v
) garantiert die Form sein ,\d*[st|nd|rd|th]
können wir nur testen , ob ein Zeichen in bestehtv
die wir dort sein zu erwarten , wenn es richtig wäre (s
,n
,r
, oderh
, respectively) - das ist<getExpectedLetter>in v
.Die letzte Ziffer bestimmt normalerweise Folgendes:
... außer wenn die vorletzte Ziffer a ist
1
, wenn alles mit enden sollteth
und daher unser erwarteter Charakter sein mussh
; dies zu bewerten wir ein Stück nehmen können (einen Index Fehler zu vermeiden , für die Eingänge mit nicht vorkommenden -4 th Charakter)v[-4:-3]
. Da0
Kartenh
bereits vorhanden sind, können wir den gewünschten Effekt durch Multiplikation vor der Indizierung in erzielen'hsnrhhhhhh'
.quelle
Java 8,
5451 BytesErläuterung:
Probieren Sie es online aus.
Javas String # -Matches werden implizit hinzugefügt
^...$
.Regex Erklärung:
quelle
Pyth,
4960 Bytes SBCSTestsuite
SE hat einige nicht druckbare Dateien im Code (und in der folgenden Erläuterung) gefressen, diese sind jedoch im Link enthalten.
Erläuterung: Python 3 Übersetzung:quelle
Python 2,
92827468 Bytes-8 danke an Chas Brown
-6 danke an Kevin Cruijssen
Konstruiert eine große Folge von
th
s,st
s,nd
s undrd
s für Endungen00
zu99
. Überprüfen Sie dann, ob es passt.quelle
Retina ,
35-31Bytes-4 Bytes dank @Asone Tuhid
Vielen Dank an @Leo für das Auffinden eines Fehlers
Ausgänge
1
für wahr und0
falsch. Dies setzt voraus , der Eingang in ordinal Format mit einem gültigen Suffix (Enden mitst
,nd
,rd
oderth
).Probieren Sie es online!
quelle
Perl 5
-n
, 57 BytesProbieren Sie es online!
quelle
Haskell , 100 Bytes
Probieren Sie es online!
quelle
Jelly ,
2522 Bytes-3 Bytes dank einer Beobachtung in einem Kommentar von meinem Python-Eintrag.
Eine monadische Verbindung.
Probieren Sie es online! Oder sehen Sie sich die Testsuite an .
Wie?
quelle
Python 2 ,
9482777370 BytesProbieren Sie es online!
quelle
05AB1E , 24 Byte
Probieren Sie es online! oder als Testsuite
Erläuterung
quelle
Rubin ,
4239 BytesLambda:
Probieren Sie es online!
Benutzereingabe:
Probieren Sie es online!
Streichhölzer:
1(anything)(anything)h
-12th
(not 1)1s
- (1st
)(not 1)2n
- (2nd
)(not 1)3r
- (3rd
)Da
[^1]
(not 1
) nicht mit dem Anfang einer Zeichenfolge übereinstimmt, wird die Eingabe dupliziert, um sicherzustellen, dass ein Zeichen vor dem letzten steht.Ruby
-n
, 35 BytesProbieren Sie es online!
Dieselbe Idee wie oben, aber anstatt die Zeichenfolge zu duplizieren, entspricht dies auch dem Anfang der Zeichenfolge (
^
).quelle
Excel, 63 Bytes
(MOD(A1-11,100)>2)
kehrt zurück,FALSE
wennA1
endet mit11
-13
2*RIGHT(A1)*(MOD(A1-11,100)>2)+1
kehrt ,1
wenn es in11
-13
und3
,5
,7
usw. AndernfallsMIN(9,~)
ändert alle Rückgaben9
in9
, um dieth
aus der Zeichenfolge zu ziehenMID("thstndrdth",MIN(~),2)
aus den ersten Zügenth
für die Eingänge der Endung11
-13
,st
für1
,nd
für2
,rd
für3
, und die letzteth
für etwas höher.=A1&MID(~)
Stellt die ursprüngliche Nummer vor die Ordnungszahl.Als Wiki posten, da ich nicht der Autor davon bin. ( Quelle )
quelle
Wolfram Language (Mathematica) , 122 Bytes
Im Gegensatz zu den meisten anderen Antworten hier wird hier tatsächlich false zurückgegeben, wenn die Eingabe kein "gültiges Ordnungsmuster" ist, sodass sie bei Eingaben wie "3a23rd", "monkey" oder "╚§ +!" Korrekt false zurückgibt. Ich denke, das funktioniert für den gesamten Satz möglicher Eingabezeichenfolgen.
Probieren Sie es online!
quelle
Wolfram Language (Mathematica) ,
6559 BytesProbieren Sie es online!
Natürlich verfügt Mathematica über eine integrierte (wenn auch nicht dokumentierte) Funktion zum Konvertieren in eine Ordnungszahl. Quelle .
(für die 65-Byte-Version: dementsprechend scheint es, dass v9 und früher keinen Aufruf benötigen
Speak
so dass möglicherweise weitere Bytes werden können)Schauen Sie sich auch die Antwort von KellyLowder für eine nicht eingebaute Version an.
quelle
PHP, 60 Bytes
langweilig: regexp nochmal die kürzeste lösung
leere Ausgabe für falsch,
1
für wahr.Laufen Sie als Pipe mit
-nF
oder probieren Sie es online aus . (TiO aus Bequemlichkeitsgründen als Funktion eingewickelt)quelle
x86-Maschinencode, 65 Byte
Versammlung:
Probieren Sie es online!
quelle
Perl-kompatibler regulärer Ausdruck, 29 Byte
Wir akzeptieren
th
nach jeder "Teen" -Nummer oder nach jeder anderen Ziffer als 1..3. Für 1..3 verwenden wir eine negative Lookbehind zu akzeptierenst
,nd
oderrd
nur , wenn sie nicht mit vorangestelltem1
.Testprogramm
Ergebnisse
quelle