Descrição :
Dada uma string como entrada, verifique se é um número ordinal válido em inglês ou não. Se for válido, retorne o valor verdadeiro, caso contrário, retorne o valor falso. (Sugerido por @Arnauld. Obrigado. Também por @JoKing)
Para usuários que desejam saber sobre números ordinais, acesse aqui:
https://www.mathsisfun.com/numbers/cardinal-ordinal-chart.html (sugestão de: qwr)
Entradas possíveis:
21st ---> true
12nd ---> false
1nd ---> false
....
Este é um desafio de código de golfe , pelo que o código mais curto em cada idioma será o vencedor.
Exemplos :
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
Como muitas pessoas fizeram a pergunta sobre se a entrada será apenas uma sequência válida ou não:
Todas as entradas sempre serão válidas. ou seja, eles terão a forma de sequência e consistirão em um dígito (ou número de dígitos) junto com um dos quatro sufixos:
st
, nd
, rd
,th
code-golf
string
number
decision-problem
Muhammad Salman
fonte
fonte
1st
, não existem ordinais negativos - english.stackexchange.com/questions/309713/...Respostas:
Utilitários Bash + GNU , 54
A correspondência de regex parece ser um caminho simples a seguir. Tenho certeza de que essa expressão poderia ser reduzida mais:
Entrada de STDIN. Saída como um código de retorno do shell - 0 é verdade e 1 é falsey.
Experimente online!
fonte
1st
e1th
.egrep
é capaz de testes de adição e primalidade (em unário), então acho que você pode fazer disso uma resposta egrep.egrep
forem executados separadamente para cada entrada para obter o código de saída correspondente para cada um: Experimente online! .isso está sob a suposição de que a entrada é um padrão ordinal válido. se não for o caso, é necessário fazer alterações
JavaScript (Node.js) ,
979278 bytesExperimente online!
Explicação
_____________________________________________________________________
porto de @Herman Lauenstein
JavaScript (Node.js) , 48 bytes
Experimente online!
fonte
***.
1sta
passe no teste de registro; se assumido,/1.th|(^|[^1])(1s|2n|3r|[^1-3]t)/
trabalhoPython ,
5653 bytes-3 graças a (use inclusão de letra exclusiva em vez da penúltima igualdade de caracteres)
Uma função sem nome.
Experimente online!
Quão?
Desde toda entrada (aqui
v
) é garantido para ser da forma\d*[st|nd|rd|th]
nós podemos apenas testar se um personagem existe nav
qual esperamos estar lá se fosse correto (s
,n
,r
, ouh
, respectivamente) - que é<getExpectedLetter>in v
.O último dígito geralmente determina isso:
... exceto quando o penúltimo dígito é a
1
, quando tudo deve terminar comth
e, portanto, nosso caráter esperado deve serh
; para avaliar isso, podemos tirar uma fatia (para evitar um erro de índice ocorrendo há entradas sem -4 th personagem)v[-4:-3]
. Desde os0
mapas parah
já, podemos alcançar o efeito desejado usando a multiplicação antes da indexação'hsnrhhhhhh'
.fonte
Java 8,
5451 bytesExplicação:
Experimente online.
A String # do Java corresponde implicitamente a adiciona
^...$
.Explicação Regex:
fonte
Pitão,
49bytes SBCSSuíte de teste
O SE comeu alguns imprimíveis no código (e na explicação abaixo), mas eles estão presentes no link.
Explicação: Tradução Python 3:fonte
Python 2,
92827468 bytes-8 graças a Chas Brown
-6 graças a Kevin Cruijssen
Constrói uma grande cadeia de
th
s,st
s,nd
s, erd
é para terminações00
para99
. Em seguida, verifica se ele corresponde.fonte
Retina ,
3531 bytes-4 bytes graças a @Asone Tuhid
Obrigado ao @Leo por encontrar um bug
Saídas
1
para verdadeiro e0
para falso. Isso pressupõe que a entrada esteja no formato ordinal com um sufixo válido (termina comst
,nd
,rd
outh
).Experimente online!
fonte
Perl 5
-n
, 57 bytesExperimente online!
fonte
Haskell , 100 bytes
Experimente online!
fonte
Geléia ,
2522 bytes-3 bytes graças a uma observação feita em um comentário feito por minha entrada em Python.
Um link monádico.
Experimente online! Ou veja a suíte de testes .
Quão?
fonte
Python 2 ,
9482777370 bytesExperimente online!
fonte
05AB1E , 24 bytes
Experimente online! ou como um conjunto de testes
Explicação
fonte
Rubi ,
4239 bytesLambda:
Experimente online!
Entrada do usuário:
Experimente online!
Partidas:
1(anything)(anything)h
-12th
(not 1)1s
- (1st
)(not 1)2n
- (2nd
)(not 1)3r
- (3rd
)Como
[^1]
(not 1
) não corresponde ao início de uma sequência, a entrada é duplicada para garantir que haja um caractere antes da última.Ruby
-n
, 35 bytesExperimente online!
A mesma idéia que acima, mas em vez de duplicar a string, isso também corresponde ao início da string (
^
).fonte
Excel, 63 bytes
(MOD(A1-11,100)>2)
retornaFALSE
quandoA1
termina com11
-13
2*RIGHT(A1)*(MOD(A1-11,100)>2)+1
retornos1
Se está em11
-13
e3
,5
,7
, etc. de outra formaMIN(9,~)
muda todos os retornos acima9
para9
puxar oth
partir da cadeiaMID("thstndrdth",MIN(~),2)
extrai o primeiroth
para entradas que terminam em11
-13
,st
para1
,nd
para2
,rd
para3
e o últimoth
para algo mais alto.=A1&MID(~)
Anexa o número original ao ordinal.Postando como wiki, já que eu não sou o autor disso. ( Fonte )
fonte
Língua Wolfram (Mathematica) , 122 bytes
Diferentemente da maioria das outras respostas aqui, isso realmente retornará false quando a entrada não é um "padrão ordinal válido", portanto, retornará corretamente false na entrada como "3a23rd", "monkey" ou "╚§ +!". Então, acho que isso funciona para todo o conjunto de possíveis strings de entrada.
Experimente online!
fonte
Wolfram Language (Mathematica) ,
6559 bytesExperimente online!
É claro que o Mathematica possui um built-in (embora não documentado) para converter em número ordinal. Fonte .
(para a versão de 65 bytes: de acordo com isso, parece que a v9 e anterior não precisam ser chamadas
Speak
antes, para que seja possível salvar mais alguns bytes)Verifique também a resposta de KellyLowder para obter uma versão não incorporada .
fonte
PHP, 60 bytes
chato: regexp mais uma vez a solução mais curta
saída vazia por falsidade,
1
por verdade.Execute como pipe
-nF
ou experimente online . (TiO envolvido como função por conveniência)fonte
código de máquina x86, 65 bytes
Montagem:
Experimente online!
fonte
Expressão regular compatível com Perl, 29 bytes
Aceitamos
th
após qualquer número "adolescente" ou após qualquer dígito que não seja 1..3. Para 1..3, usamos um lookbehind negativo para aceitarst
,nd
ourd
somente quando não precedido por1
.Programa de teste
Resultados
fonte