Deskripsi:
Diberikan string sebagai input, periksa apakah itu nomor urut yang valid dalam bahasa Inggris atau tidak. Jika valid mengembalikan nilai kebenaran, sebaliknya mengembalikan nilai palsu. (Disarankan oleh @Arnauld. Terima kasih. Juga oleh @JoKing)
Untuk pengguna yang ingin tahu tentang nomor urut, buka di sini:
https://www.mathsisfun.com/numbers/cardinal-ordinal-chart.html (Saran oleh: qwr)
Input yang mungkin:
21st ---> true
12nd ---> false
1nd ---> false
....
Ini adalah tantangan kode golf sehingga kode terpendek di setiap bahasa akan menjadi pemenangnya.
contoh:
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
Karena banyak orang mengajukan pertanyaan mengenai apakah input hanya berupa string yang valid atau tidak:
Semua input akan selalu valid. yaitu mereka akan dalam bentuk string dan terdiri dari digit (atau jumlah digit) bersama dengan salah satu dari empat sufiks:
st
, nd
, rd
,th
sumber
1st
, ordinal negatif tidak ada - english.stackexchange.com/questions/309713/…Jawaban:
Utilitas Bash + GNU , 54
Pencocokan Regex tampaknya merupakan cara yang mudah untuk dilakukan. Saya cukup yakin ungkapan ini dapat dipersingkat lebih:
Masukan dari STDIN. Output sebagai kode pengembalian shell - 0 benar dan 1 palsu.
Cobalah online!
sumber
1st
dan1th
.egrep
mampu melakukan pengujian penjumlahan dan primality (dalam unary), jadi saya pikir Anda dapat membuat ini jawaban egrep.egrep
akan dieksekusi secara terpisah untuk setiap input untuk mendapatkan kode keluar yang cocok untuk masing-masing: Coba online! .ini dengan asumsi bahwa input adalah pola ordinal yang valid. jika itu bukan perubahan kasus perlu dilakukan
JavaScript (Node.js) ,
979278 byteCobalah online!
Penjelasan
_____________________________________________________________________
pelabuhan @Herman Lauenstein
JavaScript (Node.js) , 48 byte
Cobalah online!
sumber
***.
1sta
lulus tes reg; jika diasumsikan,/1.th|(^|[^1])(1s|2n|3r|[^1-3]t)/
bekerjaPython ,
5653 byte-3 terima kasih kepada (gunakan penyertaan huruf yang unik alih-alih kesetaraan karakter kedua dari belakang)
Fungsi yang tidak disebutkan namanya.
Cobalah online!
Bagaimana?
Karena semua masukan (di sini
v
) dijamin menjadi bentuk yang\d*[st|nd|rd|th]
kita dapat hanya menguji apakah karakter ada div
mana kami berharap untuk berada di sana jika itu benar (s
,n
,r
, atauh
, masing-masing) - yang<getExpectedLetter>in v
.Digit terakhir biasanya menentukan ini:
... kecuali jika digit kedua dari belakang adalah a
1
, ketika semua harus diakhirith
dan karenanya karakter yang kita harapkan haruslahh
; untuk mengevaluasi ini kita dapat mengambil sepotong (untuk menghindari kesalahan indeks terjadi untuk input tanpa -4 th karakter)v[-4:-3]
. Sejak0
petah
sudah kita dapat mencapai efek yang diinginkan menggunakan perkalian sebelum pengindeksan ke'hsnrhhhhhh'
.sumber
Java 8,
5451 bytePenjelasan:
Cobalah online.
String Java # cocok ditambahkan secara implisit
^...$
.Penjelasan regex:
sumber
Pyth,
4960 byte SBCSSuite uji
SE memakan beberapa unsintables dalam kode (dan dalam penjelasan di bawah) tetapi mereka ada di tautan.
Penjelasan: Terjemahan Python 3:sumber
Python 2,
92827468 byte-8 Terima kasih kepada Chas Brown
-6 terima kasih kepada Kevin Cruijssen
Membangun string besar
th
s,st
s,nd
s, danrd
s untuk akhiran00
untuk99
. Kemudian periksa untuk melihat apakah cocok.sumber
Retina ,
3531 byte-4 byte terima kasih kepada @Asone Tuhid
Terima kasih kepada @ Leo untuk menemukan bug
Output
1
untuk benar dan0
salah. Ini mengasumsikan input dalam format ordinal dengan akhiran valid (berakhir denganst
,nd
,rd
atauth
).Cobalah online!
sumber
Perl 5
-n
, 57 byteCobalah online!
sumber
Haskell , 100 byte
Cobalah online!
sumber
Jelly ,
2522 byte-3 byte berkat pengamatan yang dibuat dalam komentar yang dibuat pada entri Python saya.
Tautan monadik.
Cobalah online! Atau lihat test-suite .
Bagaimana?
sumber
Python 2 ,
9482777370 byteCobalah online!
sumber
05AB1E , 24 byte
Cobalah online! atau sebagai Test suite
Penjelasan
sumber
Ruby ,
4239 byteLambda:
Cobalah online!
Input pengguna:
Cobalah online!
Cocok:
1(anything)(anything)h
-12th
(not 1)1s
- (1st
)(not 1)2n
- (2nd
)(not 1)3r
- (3rd
)Karena
[^1]
(not 1
) tidak cocok dengan awal string, input diduplikasi untuk memastikan ada karakter sebelum yang terakhir.Ruby
-n
, 35 byteCobalah online!
Gagasan yang sama seperti di atas tetapi alih-alih menduplikasi string, ini juga cocok dengan awal string (
^
).sumber
Excel, 63 byte
(MOD(A1-11,100)>2)
kembaliFALSE
saatA1
diakhiri dengan11
-13
2*RIGHT(A1)*(MOD(A1-11,100)>2)+1
kembali1
jika dalam11
-13
dan3
,5
,7
, dll. jika tidakMIN(9,~)
mengubah pengembalian apa pun di atas9
ke dalam9
untuk menarikth
dari stringMID("thstndrdth",MIN(~),2)
mengeluarkan yang pertamath
untuk input yang diakhiri dengan11
-13
,st
untuk1
,nd
untuk2
,rd
untuk3
, dan yang terakhirth
untuk sesuatu yang lebih tinggi.=A1&MID(~)
menambahkan nomor asli ke ordinal.Posting sebagai wiki karena saya bukan penulisnya. ( Sumber )
sumber
Bahasa Wolfram (Mathematica) , 122 byte
Tidak seperti kebanyakan jawaban lain di sini, ini sebenarnya akan mengembalikan false ketika input bukan "pola ordinal yang valid", jadi itu akan benar mengembalikan false pada input seperti "3a23rd", "monyet" atau "+§ +!". Jadi saya pikir ini berfungsi untuk seluruh rangkaian string input yang mungkin.
Cobalah online!
sumber
Bahasa Wolfram (Mathematica) ,
6559 byteCobalah online!
Tentu saja Mathematica memiliki built-in (walaupun tidak berdokumen) untuk mengkonversi ke nomor urut. Sumber .
(untuk versi 65-byte: menurut itu tampaknya v9 dan sebelumnya tidak perlu memanggil
Speak
sebelumnya sehingga mungkin untuk menyimpan lebih banyak byte)Lihat juga jawaban KellyLowder untuk versi yang bukan bawaan .
sumber
PHP, 60 byte
membosankan: regexp sekali lagi solusi terpendek
output kosong untuk kepalsuan,
1
untuk kebenaran.Jalankan sebagai pipa dengan
-nF
atau coba online . (TiO dibungkus sebagai fungsi untuk kenyamanan)sumber
kode mesin x86, 65 byte
Majelis:
Cobalah online!
sumber
Ekspresi reguler yang kompatibel dengan Perl, 29 byte
Kami menerima
th
setelah nomor "remaja", atau setelah angka apa pun selain 1..3. Untuk 1..3, kita menggunakan lookbehind negatif untuk menerimast
,nd
ataurd
hanya ketika tidak didahului oleh1
.Program uji
Hasil
sumber