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
1st
y1th
.egrep
es capaz de realizar pruebas de suma y primalidad (en unario), por lo que creo que puede hacer de esto una respuesta egrep.egrep
se 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
***.
1sta
pase 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 env
el 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 conth
y, 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 los0
mapash
ya 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
th
s,st
s,nd
s, yrd
como terminaciones00
a99
. Luego verifica si coincide.fuente
Retina ,
3531 bytes-4 bytes gracias a @Asone Tuhid
Gracias a @Leo por encontrar un error
Salidas
1
para verdadero y0
para falso. Esto supone que la entrada está en formato ordinal con un sufijo válido (con extremosst
,nd
,rd
oth
).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)
regresaFALSE
cuandoA1
termina con11
-13
2*RIGHT(A1)*(MOD(A1-11,100)>2)+1
regresa1
si está en11
-13
y3
,5
,7
, etc. de otra maneraMIN(9,~)
cambia cualquier retorno anterior9
en9
tirar de lath
de la cadenaMID("thstndrdth",MIN(~),2)
extrae el primeroth
para las entradas que terminan en11
-13
,st
para1
,nd
para2
,rd
para3
y el últimoth
para 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
Speak
antes, 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,
1
para verdad.Ejecutar como tubería con
-nF
o 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
th
despué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
,nd
ord
sólo cuando no precedida de1
.Programa de prueba
Resultados
fuente