La description :
Étant donné une chaîne en entrée, vérifiez s'il s'agit d'un nombre ordinal valide en anglais ou non. Si elle est valide, renvoyez la valeur véridique, sinon retournez la valeur fausse. (Suggéré par @Arnauld. Merci. Aussi par @JoKing)
Pour les utilisateurs qui souhaitent connaître les nombres ordinaux, cliquez ici:
https://www.mathsisfun.com/numbers/cardinal-ordinal-chart.html (Suggestion de: qwr)
Entrées possibles:
21st ---> true
12nd ---> false
1nd ---> false
....
Il s'agit d'un défi de golf de code, donc le code le plus court dans chaque langue sera le gagnant.
Exemples :
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
Étant donné que de nombreuses personnes ont posé la question de savoir si la saisie ne sera que des chaînes valides:
Toutes les entrées seront toujours valides. c'est-à-dire qu'ils seront sous forme de chaîne et se composeront d'un chiffre (ou nombre de chiffres) avec l'un des quatre suffixes:
st
, nd
, rd
,th
la source
1st
, les ordinaux négatifs n'existent pas - english.stackexchange.com/questions/309713/…Réponses:
Utilitaires Bash + GNU , 54
L'appariement des expressions rationnelles semble être un moyen simple de procéder. Je suis sûr que cette expression pourrait être raccourcie davantage:
Entrée de STDIN. Sortie sous forme de code retour shell - 0 est véridique et 1 est falsey.
Essayez-le en ligne!
la source
1st
et1th
.egrep
est capable de tests d'addition et de primalité (en unaire), donc je pense que vous pouvez en faire une réponse egrep.egrep
étaient exécutés séparément pour chaque entrée pour obtenir le code de sortie correspondant pour chacun: Essayez-le en ligne! .c'est sous l'hypothèse que l'entrée est un modèle ordinal valide. si ce n'est pas le cas, des modifications doivent être apportées
JavaScript (Node.js) ,
979278 octetsEssayez-le en ligne!
Explication
_____________________________________________________________________
port de @Herman Lauenstein
JavaScript (Node.js) , 48 octets
Essayez-le en ligne!
la source
***.
1sta
passez le test reg; si supposé,/1.th|(^|[^1])(1s|2n|3r|[^1-3]t)/
travauxPython ,
5653 octets-3 grâce à (utiliser l'inclusion d'une lettre unique au lieu de l'avant-dernière égalité de caractère)
Une fonction sans nom.
Essayez-le en ligne!
Comment?
Depuis toutes les entrées (ici
v
) est garanti de la forme que\d*[st|nd|rd|th]
nous pouvons simplement tester si un caractère existe dansv
lequel nous nous attendons à être là si elle était correcte (s
,n
,r
ouh
, respectivement) - c'est<getExpectedLetter>in v
.Le dernier chiffre détermine généralement ceci:
... sauf lorsque l'avant-dernier chiffre est un
1
, quand tout doit se terminer parth
et donc notre caractère attendu doit êtreh
; pour évaluer cela, nous pouvons prendre une tranche (pour éviter qu'une erreur d'index ne se produise pour les entrées sans -4 ème caractère)v[-4:-3]
. Puisque0
mappeh
déjà, nous pouvons obtenir l'effet souhaité en utilisant la multiplication avant l'indexation dans'hsnrhhhhhh'
.la source
Java 8,
5451 octetsExplication:
Essayez-le en ligne.
Les correspondances String # de Java s'ajoutent implicitement
^...$
.Explication de l'expression régulière:
la source
Pyth,
4960 octets SBCSSuite de tests
SE a mangé des éléments non imprimables dans le code (et dans l'explication ci-dessous) mais ils sont présents dans le lien.
Explication: Traduction Python 3:la source
Python 2,
92827468 octets-8 grâce à Chas Brown
-6 grâce à Kevin Cruijssen
Construit une grande chaîne de
th
s,st
s,nd
s etrd
s pour les fins00
de99
. Vérifie ensuite si cela correspond.la source
Rétine ,
3531 octets-4 octets grâce à @Asone Tuhid
Merci à @Leo d'avoir trouvé un bug
Sorties
1
pour vrai et0
pour faux. Cela suppose l'entrée est au format ordinal avec un suffixe valide (extrémités avecst
,nd
,rd
outh
).Essayez-le en ligne!
la source
Perl 5
-n
, 57 octetsEssayez-le en ligne!
la source
Haskell , 100 octets
Essayez-le en ligne!
la source
Gelée ,
2522 octets-3 octets grâce à une observation faite dans un commentaire fait par sur mon entrée Python.
Un lien monadique.
Essayez-le en ligne! Ou consultez la suite de tests .
Comment?
la source
Python 2 ,
9482777370 octetsEssayez-le en ligne!
la source
05AB1E , 24 octets
Essayez-le en ligne! ou comme suite de tests
Explication
la source
Rubis ,
4239 octetsLambda:
Essayez-le en ligne!
Entrée utilisateur:
Essayez-le en ligne!
Allumettes:
1(anything)(anything)h
-12th
(not 1)1s
- (1st
)(not 1)2n
- (2nd
)(not 1)3r
- (3rd
)Parce que
[^1]
(not 1
) ne correspond pas au début d'une chaîne, l'entrée est dupliquée pour s'assurer qu'il y a un caractère avant le dernier.Rubis
-n
, 35 octetsEssayez-le en ligne!
Même idée que ci-dessus mais au lieu de dupliquer la chaîne, cela correspond également au début de la chaîne (
^
).la source
Excel, 63 octets
(MOD(A1-11,100)>2)
retourneFALSE
quandA1
se termine par11
-13
2*RIGHT(A1)*(MOD(A1-11,100)>2)+1
retours1
si elle est en11
-13
et3
,5
,7
, etc. autrementMIN(9,~)
modifie les retours ci-dessus9
en9
tirantth
de la chaîneMID("thstndrdth",MIN(~),2)
extrait le premierth
pour les entrées se terminant par11
-13
,st
pour1
,nd
pour2
,rd
pour3
et le dernierth
pour tout ce qui est supérieur.=A1&MID(~)
ajoute le numéro d'origine à l'ordinal.Publier en tant que wiki car je n'en suis pas l'auteur. ( Source )
la source
Wolfram Language (Mathematica) , 122 octets
Contrairement à la plupart des autres réponses ici, cela retournera en fait faux lorsque l'entrée n'est pas un "modèle ordinal valide", donc il retournera correctement faux en entrée comme "3a23rd", "singe" ou "╚§ +!". Je pense donc que cela fonctionne pour l'ensemble des chaînes d'entrée possibles.
Essayez-le en ligne!
la source
Wolfram Language (Mathematica) ,
6559 octetsEssayez-le en ligne!
Bien sûr, Mathematica a un module intégré (bien que non documenté) pour la conversion en nombre ordinal. Source .
(pour la version 65 octets: selon cela, il semble que la v9 et les versions antérieures n'ont pas besoin d'appeler
Speak
avant, il peut donc être possible d'enregistrer d'autres octets)Consultez également la réponse de KellyLowder pour une version non intégrée.
la source
PHP, 60 octets
ennuyeux: regexp une fois de plus la solution la plus courte
sortie vide pour faux,
1
pour vrai.Exécuter en tant que pipe avec
-nF
ou l' essayer en ligne . (TiO enveloppé comme fonction pour plus de commodité)la source
code machine x86, 65 octets
Assemblée:
Essayez-le en ligne!
la source
Expression régulière compatible Perl, 29 octets
Nous acceptons
th
après tout numéro "adolescent" ou après tout chiffre autre que 1..3. Pour 1..3, nous utilisons un lookbehind de négatif à accepterst
,nd
ourd
seulement lorsqu'ils ne sont pas Précédé par1
.Programme de test
Résultats
la source