Opis:
Biorąc pod uwagę ciąg znaków, sprawdź, czy jest to poprawna liczba porządkowa w języku angielskim, czy nie. Jeśli jest poprawny, zwróć wartość prawdy, w przeciwnym razie zwróć wartość fałszu. (Sugerowane przez @Arnauld. Dzięki. Również przez @JoKing)
Dla użytkowników, którzy chcą wiedzieć o liczbach porządkowych, przejdź tutaj:
https://www.mathsisfun.com/numbers/cardinal-ordinal-chart.html (Sugestia: qwr)
Możliwe dane wejściowe:
21st ---> true
12nd ---> false
1nd ---> false
....
Jest to wyzwanie dla golfistów, więc zwycięzcą będzie najkrótszy kod w każdym języku.
Przykłady:
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
Ponieważ wiele osób zadało pytanie, czy dane wejściowe będą prawidłowe, czy nie:
Wszystkie dane wejściowe zawsze będą ważne. tzn. będą miały postać ciągu i będą składać się z cyfry (lub liczby cyfr) wraz z jednym z czterech sufiksów:
st
, nd
, rd
,th
code-golf
string
number
decision-problem
Muhammad Salman
źródło
źródło
1st
, nie istnieją ujemne porządki - polish.stackexchange.com/questions/309713/…Odpowiedzi:
Narzędzia Bash + GNU , 54
Dopasowywanie wyrażeń regularnych wydaje się prostą drogą. Jestem prawie pewien, że to wyrażenie można skrócić bardziej:
Dane wejściowe ze STDIN. Wyjście jako kod powrotu powłoki - 0 to prawda, a 1 to falsey.
Wypróbuj online!
źródło
1st
i1th
.egrep
jest zdolny do dodawania i testowania pierwotności (jednostronnie), więc myślę, że możesz zrobić z tego odpowiedź egrep.egrep
były wykonywane osobno dla każdego wejścia, aby uzyskać pasujący kod wyjścia dla każdego: Wypróbuj online! .zakłada się, że dane wejściowe są prawidłowym wzorem porządkowym. jeśli nie, należy wprowadzić zmiany
JavaScript (Node.js) ,
979278 bajtówWypróbuj online!
Wyjaśnienie
_____________________________________________________________________
port @Herman Lauenstein
JavaScript (Node.js) , 48 bajtów
Wypróbuj online!
źródło
***.
1sta
przejść test reg; jeśli założono,/1.th|(^|[^1])(1s|2n|3r|[^1-3]t)/
pracaPython ,
5653 bajtów-3 dzięki (użyj unikalnego włączenia liter zamiast przedostatniej równości postaci)
Funkcja bez nazwy.
Wypróbuj online!
W jaki sposób?
Ponieważ wszystkie wejścia (tutaj
v
) jest gwarancją formularza\d*[st|nd|rd|th]
możemy tylko testy czy postać istnieje wv
którym spodziewamy się tam, jeśli to były prawidłowe być (s
,n
,r
, lubh
, odpowiednio) - to jest<getExpectedLetter>in v
.Ostatnia cyfra zwykle określa to:
... z wyjątkiem sytuacji, gdy przedostatnia cyfra to a
1
, kiedy wszystko powinno się kończyć,th
a zatem naszym oczekiwanym znakiem musi byćh
; ocena tego możemy wziąć kawałek (w celu uniknięcia błędu indeksu występujących na wejściach z bez -4 th znaków)v[-4:-3]
. Od0
map doh
już możemy osiągnąć pożądany efekt za pomocą mnożenia przed indeksowaniem do'hsnrhhhhhh'
.źródło
Java 8,
5451 bajtówWyjaśnienie:
Wypróbuj online.
Ciąg # dopasowań języka Java niejawnie dodaje
^...$
.Wyjaśnienie Regex:
źródło
Pyth,
4960 bajtów SBCSZestaw testowy
SE zjadł kilka niedrukowalnych elementów w kodzie (i w poniższym wyjaśnieniu), ale są one obecne w łączu.
Wyjaśnienie: Tłumaczenie Python 3:źródło
Python 2,
92827468 bajtów-8 dzięki Chas Brown
-6 dzięki Kevin Cruijssen
Konstruuje duży ciąg
th
s,st
s,nd
s ird
s dla zakończeń00
do99
. Następnie sprawdza, czy pasuje.źródło
Siatkówka ,
3531 bajtów-4 bajty dzięki @Asone Tuhid
Dzięki @Leo za znalezienie błędu
Dane wyjściowe
1
dla wartości true i0
false. Zakłada się, że dane wejściowe są w formacie porządkowym z poprawnym sufiksem (kończy się nast
,nd
,rd
ith
).Wypróbuj online!
źródło
Perl 5
-n
, 57 bajtówWypróbuj online!
źródło
Haskell , 100 bajtów
Wypróbuj online!
źródło
Galaretka ,
2522 bajtów-3 bajty dzięki obserwacji dokonanej w komentarzu autorstwa mojego wpisu w Pythonie.
Link monadyczny.
Wypróbuj online! Lub zobacz zestaw testowy .
W jaki sposób?
źródło
Python 2 ,
9482777370 bajtówWypróbuj online!
źródło
05AB1E , 24 bajty
Wypróbuj online! lub jako pakiet testowy
Wyjaśnienie
źródło
Rubin ,
4239 bajtówLambda:
Wypróbuj online!
Dane wejściowe użytkownika:
Wypróbuj online!
Mecze:
1(anything)(anything)h
-12th
(not 1)1s
- (1st
)(not 1)2n
- (2nd
)(not 1)3r
- (3rd
)Ponieważ
[^1]
(not 1
) nie pasuje do początku łańcucha, dane wejściowe są duplikowane, aby upewnić się, że przed ostatnim jest znak.Rubin
-n
, 35 bajtówWypróbuj online!
Taki sam pomysł jak powyżej, ale zamiast duplikowania łańcucha, odpowiada to również początkowi łańcucha (
^
).źródło
Excel, 63 bajty
(MOD(A1-11,100)>2)
zwraca,FALSE
gdyA1
kończy się na11
-13
2*RIGHT(A1)*(MOD(A1-11,100)>2)+1
zwraca1
jeśli jest w11
-13
i3
,5
,7
itp. InaczejMIN(9,~)
zmienia wszelkie zwroty powyżej9
w,9
aby wyciągnąćth
z łańcuchaMID("thstndrdth",MIN(~),2)
wyciąga pierwszyth
dla danych wejściowych kończących się na11
-13
,st
for1
,nd
for2
,rd
na3
, a ostatnith
o nic wyższego.=A1&MID(~)
wstawia oryginalny numer do liczby porządkowej.Publikowanie jako wiki, ponieważ nie jestem autorem tego. ( Źródło )
źródło
Wolfram Language (Mathematica) , 122 bajty
W przeciwieństwie do większości innych odpowiedzi tutaj, to faktycznie zwróci fałsz, gdy dane wejściowe nie są „prawidłowym wzorem porządkowym”, więc poprawnie zwróci fałsz przy danych wejściowych, takich jak „3a23rd”, „monkey” lub „╚§ +!”. Myślę więc, że działa to dla całego zestawu możliwych ciągów wejściowych.
Wypróbuj online!
źródło
Wolfram Language (Mathematica) ,
6559 bajtówWypróbuj online!
Oczywiście Mathematica ma wbudowaną (choć nieudokumentowaną) funkcję konwersji na liczbę porządkową. Źródło .
(dla wersji 65-bajtowej: zgodnie z tym wydaje się, że wersja 9 i wcześniejsza nie potrzebuje wywoływania
Speak
wcześniejszego więc można zaoszczędzić trochę więcej bajtów)Również sprawdzić KellyLowder za odpowiedź na wersję bez wbudowanego.
źródło
PHP, 60 bajtów
nudne: regexp jeszcze raz najkrótsze rozwiązanie
puste wyjście dla fałszowania,
1
dla prawdy.Uruchom jako potok z
-nF
lub spróbuj online . (TiO zawinięty jako funkcja dla wygody)źródło
kod maszynowy x86, 65 bajtów
Montaż:
Wypróbuj online!
źródło
Wyrażenie regularne zgodne z Perl, 29 bajtów
Akceptujemy
th
po każdym numerze „teen” lub po dowolnej cyfrze innej niż 1..3. Dla 1..3 używamy lookbehind negatywny, aby zaakceptowaćst
,nd
lubrd
tylko wtedy, gdy nie poprzedza1
.Program testowy
Wyniki
źródło