Descripción:
Dada una cadena como entrada, verifique si es un número ordinal válido en inglés o no. Si es válido, devuelva el valor verdadero de lo contrario, devuelva el valor falso. (Sugerido por @Arnauld. Gracias. También por @JoKing)
Para usuarios que quieran saber sobre números ordinales, haga clic aquí:
https://www.mathsisfun.com/numbers/cardinal-ordinal-chart.html (Sugerencia de: qwr)
Posibles entradas:
21st ---> true
12nd ---> false
1nd ---> false
....
Este es un desafío de código de golf, por lo que el código más corto en cada idioma será el ganador.
Ejemplos:
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
Dado que muchas personas hicieron la pregunta sobre si las entradas serán solo cadenas válidas o no:
Todas las entradas siempre serán válidas. es decir, estarán en forma de cadena y constarán de un dígito (o número de dígitos) junto con uno de los cuatro sufijos:
st, nd, rd,th
fuente

1st, los ordinales negativos no existen - english.stackexchange.com/questions/309713/…Respuestas:
Bash + utilidades GNU , 54
La combinación de expresiones regulares parece ser una forma sencilla de hacerlo. Estoy bastante seguro de que esta expresión podría acortarse más:
Entrada de STDIN. Salida como un código de retorno de shell: 0 es verdadero y 1 es falso.
Pruébalo en línea!
fuente
1sty1th.egrepes capaz de realizar pruebas de suma y primalidad (en unario), por lo que creo que puede hacer de esto una respuesta egrep.egrepse ejecutaran por separado para cada entrada para obtener el código de salida correspondiente para cada uno: ¡ Pruébelo en línea! .esto se da por supuesto que la entrada es un patrón ordinal válido. si no es el caso, se deben hacer cambios
JavaScript (Node.js) ,
979278 bytesPruébalo en línea!
Explicación
_____________________________________________________________________
puerto de @Herman Lauenstein
JavaScript (Node.js) , 48 bytes
Pruébalo en línea!
fuente
***.1stapase la prueba de registro; si se supone,/1.th|(^|[^1])(1s|2n|3r|[^1-3]t)/trabajoPython ,
5653 bytes-3 gracias a (use la inclusión de letras únicas en lugar de la penúltima igualdad de caracteres)
Una función sin nombre.
Pruébalo en línea!
¿Cómo?
Dado que todas las entradas (en este caso
v) se garantiza que sea de la forma\d*[st|nd|rd|th]sólo podemos probar si existe un personaje envel que esperamos estar allí si fuese correcto (s,n,r, oh, respectivamente) - que es<getExpectedLetter>in v.El último dígito generalmente determina esto:
... excepto cuando el penúltimo dígito es a
1, cuando todo debería terminar conthy, por lo tanto, nuestro carácter esperado debe serh; para evaluar esto podemos tomar una rebanada (para evitar un error de índice que ocurren para entradas sin -4 ° carácter)v[-4:-3]. Ya que los0mapashya podemos lograr el efecto deseado usando la multiplicación antes de indexar'hsnrhhhhhh'.fuente
Java 8,
5451 bytesExplicación:
Pruébalo en línea.
Java String # coincide implícitamente agrega
^...$.Explicación de expresiones regulares:
fuente
Pyth,
4960 bytes SBCSBanco de pruebas
SE comió algunos no imprimibles en el código (y en la explicación a continuación) pero están presentes en el enlace.
Explicación: Traducción de Python 3:fuente
Python 2,
92827468 bytes-8 gracias a Chas Brown
-6 gracias a Kevin Cruijssen
Construye una cadena grande de
ths,sts,nds, yrdcomo terminaciones00a99. Luego verifica si coincide.fuente
Retina ,
3531 bytes-4 bytes gracias a @Asone Tuhid
Gracias a @Leo por encontrar un error
Salidas
1para verdadero y0para falso. Esto supone que la entrada está en formato ordinal con un sufijo válido (con extremosst,nd,rdoth).Pruébalo en línea!
fuente
Perl 5
-n, 57 bytesPruébalo en línea!
fuente
Haskell , 100 bytes
Pruébalo en línea!
fuente
Jalea ,
2522 bytes-3 bytes gracias a una observación realizada en un comentario realizado en mi entrada de Python.
Un enlace monádico.
Pruébalo en línea! O vea el conjunto de pruebas .
¿Cómo?
fuente
Python 2 ,
9482777370 bytesPruébalo en línea!
fuente
05AB1E , 24 bytes
Pruébalo en línea! o como un conjunto de pruebas
Explicación
fuente
Ruby ,
4239 bytesLambda
Pruébalo en línea!
Entrada del usuario:
Pruébalo en línea!
Partidos:
1(anything)(anything)h-12th(not 1)1s- (1st)(not 1)2n- (2nd)(not 1)3r- (3rd)Debido a que
[^1](not 1) no coincide con el comienzo de una cadena, la entrada se duplica para asegurarse de que haya un carácter antes del último.Ruby
-n, 35 bytesPruébalo en línea!
La misma idea que la anterior, pero en lugar de duplicar la cadena, esto también coincide con el inicio de la cadena (
^).fuente
Excel, 63 bytes
(MOD(A1-11,100)>2)regresaFALSEcuandoA1termina con11-132*RIGHT(A1)*(MOD(A1-11,100)>2)+1regresa1si está en11-13y3,5,7, etc. de otra maneraMIN(9,~)cambia cualquier retorno anterior9en9tirar de lathde la cadenaMID("thstndrdth",MIN(~),2)extrae el primerothpara las entradas que terminan en11-13,stpara1,ndpara2,rdpara3y el últimothpara cualquier cosa más alta.=A1&MID(~)antepone el número original al ordinal.Publicar como wiki ya que no soy el autor de esto. ( Fuente )
fuente
Wolfram Language (Mathematica) , 122 bytes
A diferencia de la mayoría de las otras respuestas aquí, esto en realidad devolverá falso cuando la entrada no sea un "patrón ordinal válido", por lo que correctamente devolverá falso en entradas como "3a23rd", "monkey" o "╚§ +!". Así que creo que esto funciona para todo el conjunto de posibles cadenas de entrada.
Pruébalo en línea!
fuente
Wolfram Language (Mathematica) ,
6559 bytesPruébalo en línea!
Por supuesto, Mathematica tiene una función incorporada (aunque no documentada) para convertir a un número ordinal. Fuente .
(para la versión de 65 bytes: según parece, v9 y antes no necesitan llamar
Speakantes, por lo que es posible guardar algunos bytes más)Consulte también la respuesta de KellyLowder para una versión no incorporada.
fuente
PHP, 60 bytes
aburrido: regexp una vez más la solución más corta
salida vacía para falsedad,
1para verdad.Ejecutar como tubería con
-nFo probarlo en línea . (TiO envuelto como función para mayor comodidad)fuente
código de máquina x86, 65 bytes
Montaje:
Pruébalo en línea!
fuente
Expresión regular compatible con Perl, 29 bytes
Aceptamos
thdespués de cualquier número "adolescente", o después de cualquier dígito que no sea 1..3. Para 1..3, se utiliza una búsqueda hacia atrás negativa a aceptarst,ndordsólo cuando no precedida de1.Programa de prueba
Resultados
fuente