Kata digit adalah kata di mana, setelah menghapus beberapa huruf, Anda hanya memiliki satu digit: SATU, DUA, TIGA, EMPAT, LIMA, ENAM, TUJUH, DELAPAN, DELAPAN atau SEMBILAN (bukan NOL).
Misalnya, BOUNCE dan ANNOUNCE adalah kata digit, karena mengandung kata digit.
ENCODE bukan kata digit, meskipun mengandung O, N dan E, karena mereka tidak berurutan.
Tulis program / fungsi yang menggunakan satu kata (huruf besar atau kecil - Anda pilih) sebagai input atau parameter dan menentukan apakah itu kata digit. Buat kode sesingkat mungkin.
Jika kata tersebut bukan kata digit, Anda harus mengembalikan nilai 'TIDAK', 0 atau 'falsey' (ini dapat bervariasi berdasarkan bahasa Anda). Jika kata itu adalah kata digit, Anda harus menampilkan digit yang dikandungnya, sebagai angka.
Anda dapat berasumsi bahwa tidak ada kata yang mengandung lebih dari satu digit, sehingga Anda tidak akan memiliki sesuatu seperti ONFIVE.
Uji Kasus
BOUNCE
1
ENCODE
NO
EIGHT
8
BLACKJACK
NO
FABULOUS
NO
EXERCISE
NO
DRIFTWOOD
2
SERVICEMAN
7
INSIGNIFICANCE
9
THROWDOWN
2
ZERO
NO
OZNERO
1
Tantangan ini diambil dari (dan sedikit modifikasi) dari Pertanyaan 1 dari BIO 2009 . Sebagian besar kasus uji diambil dari skema tanda .
NOFELINEVET
mengandung 5 dan 9 ... apa yang harus saya kembalikan?0
dalam case no-digit-found bahkan jika itu bukan kepalsuan dalam bahasa pilihan?Jawaban:
Javascript (ES6),
10199 bytesumber
PHP> = 7.0, 87 Bytes
Jika hanya penyisipan karakter dari satu digit sebagai kata ke input selesai keluar dari program dengan digit. Atau ubah urutan untuk
levenshtein("DIGIT $argn",IntlChar::charName("$i"),1,1,0)
tidak menghitung penghapusan karakterlevenshtein
IntlChar :: charName
PHP> = 7.0, 112 Bytes
IntlChar :: charName
PHP, 128 Bytes
Cobalah online!
143 Bytes untuk lebih dari 1 digit
Cobalah online!
sumber
foreach(...)$r+=++$k*preg_match(...);echo$r?:NO;
(-1 byte).chunk_split($v,1,".*")
bukannyajoin(...)
(-2 byte).chunk_split
saya belum pernah melihatnya sebelumnya. Anda harus membuat entri di bagian tipsIntlChar::enumCharNames
... besok.levenshtein()
tampaknya pekerjaan:<?for(;$i++<9;)levenshtein(IntlChar::charName("$i"),"DIGIT $argn",0,1,1)?:die("$i")?>NO
.Python 3, 150 byte
combinations
mengembalikan semua kombinasi hal-hal secara berurutan. Akan lebih mudah untuk memiliki nomor yang ditetapkan untuk parameter keduacombinations
, jadi spasi ditambahkan ke akhir string asli yang merupakan parameter dari lambda saya. Itulah deskripsi sederhana tentang cara kerja entri saya. Tanyakan apakah Anda ingin klarifikasi lagi.sumber
Mathematica, 83 byte (Pengodean WindowsANSI)
Menentukan fungsi unary
±
yang mengambil daftar karakter huruf kecil sebagai input dan mengembalikan digit, dalam bentuk seperti{{7}}
, atau daftar kosong{}
. Saya tidak merasa seperti saya melakukan banyak hal golf di sini, kecuali yangCharacters@*IntegerName~Array~9
menghasilkan pencocokan nama-nomor untuk mencari tanpa hard-coding mereka.Contoh penggunaan:
hasil panen
{{9}}
.sumber
Jelly ,
3128 byte-2 byte sekarang sehingga input huruf kecil dapat diterima
Program lengkap yang mengharapkan input huruf kecil dan mencetak hasilnya, gunakan
0
untuk case falsey.Sebagai tautan monadik yang mengambil daftar karakter, ia sebenarnya mengembalikan daftar bilangan bulat yang berisi satu
0
dalam kasus falsey, satu integer di antara1
dan9
termasuk dalam kasus penggunaan yang diharapkan dan beberapa entri seperti dalam kasus di mana lebih dari satu angka ada di kata.Cobalah online!
Bagaimana?
sumber
Ruby + to_words :
4948 + 12 =6160 byteMenggunakan bendera
-rto_words -n
. Mengambil kata-kata kecil. Kembalinil
jika tidak ada "angka" yang ditemukan.-1 byte sekarang sehingga input huruf kecil diperbolehkan, memungkinkan untuk penghapusan
i
flag pada regex.Untuk jawaban Ruby yang lebih murni tanpa permata eksternal, 91 + 1 = 92 byte:
sumber
05AB1E , 26 byte
Nilai falsy di sini adalah 0 .
Penjelasan:
Menggunakan penyandian 05AB1E . Cobalah online! atau Verifikasi semua kasus uji!
sumber
Haskell,
113111 byteCobalah online!
Kembali
0
jika tidak ada digit yang ditemukan.Temukan semua bagian selanjutnya dari kata input dalam daftar digit. Tambahkan string kosong
[]
pada indeks 0 yang merupakan bagian dari setiap urutan.elemIndices
mengembalikan daftar indeks dan=<<
meratakannya menjadi satu daftar. Pilih indeks terakhir.sumber
JavaScript (ES6), 121 byte
Mengembalikan digit terendah yang terdeteksi atau
0
jika tidak ada digit yang terdeteksi (+6 jikaNO
diperlukan).sumber
Japt , 52 byte
Cobalah online!
sumber
Retina ,
160126120 byteCobalah online!
Mengembalikan string kosong jika input tidak mengandung digit.
-6 byte terima kasih kepada @CalculatorFeline .
sumber
0
alih-alihNO
.PHP,
134 132128 bytedijalankan sebagai pipa dengan
-nF
atau coba online .Membuat regex dengan kata-kata dalam tanda kurung; yaitu setiap kata
N
dalamN
sub-ekspresi th.Jika sebuah kata ditemukan, string yang cocok akan berada di
$m[0]
dan diN
elemen th, dengan elemen di antara mereka kosong dan tidak ada string kosong di belakang; yaitu$m
memilikiN+1
elemen.sumber
<?=preg_match("#(".strtr(chunk_split(ONE0TWO0THREE0FOUR0FIVE0SIX0SEVEN0EIGHT0NINE,1,".*"),[")|("]).")#",$argn,$m)?count($m)-1:NO;
Coba online!Python , 148 byte
Fungsi tanpa nama mengambil hanya huruf besar dan mengembalikan integer (
1
ke9
), atau0
untukNO
.Cobalah online!
Bagaimana?
Untuk string masukan
s
fungsi melintasi melalui daftar string:"x"
,"ONE"
,"TWO"
,"THREE"
,"FOUR"
,"FIVE"
,"SIX"
,"SEVEN"
,"EIGHT"
,"NINE"
, dans
. Sendiri mencari setiap pertandingan *Perbandingan yang digunakan adalah apakah string ini
w
,, adalah yang dapat dibentuk dari kombinasi huruf sesuai urutan dari input. Fungsicombinations
mendapatkan ini untuk kita (dan hanya yang menggunakan panjang yang diperlukanlen(w)
), tetapi mereka dalam bentuk tupel, sehingga string dilemparkan ke tupel untuk perbandingan.Dari sebelas hasil, satu untuk
"x"
selaluFalse
, sedangkan satu untuks
itu sendiri akan selaluTrue
. Di"x"
sana untuk memastikan indeks kecocokan denganONE
melaluiNINE
adalah nilai-nilai yang diperlukan (karena daftar Python diindeks 0),s
ada di sana untuk memastikan panggilan keindex(1)
(identik denganindex(True)
) tidak akan gagal ketika tidak ada kata angka ditemukan, dimana hasilnya dihasilkan10
dikonversi menjadi0
dengan modulo menggunakan sepuluh%10
.* Jika
s
mengandung spasi karena alasan tertentu, daftarw
s akan lebih panjang, tetapi prosesnya masih akan bekerja karena angka yang cocok akan bekerja dengan cara yang sama, dan jika tidak ada yang cocok dengan substring spasi-pemisahan pertamas
akan cocok, sekali lagi memberikan10
dan kembali0
.Jika ada beberapa digit kata, fungsi akan mengembalikan yang minimal.
sumber
Java,
167153 byteImplementasi yang agak naif, cocok dengan regex.
Tes dan ungolfed
Menghemat
sumber
"ONE TWO THREE FOUR FIVE SIX SEVEN EIGHT NINE".split(" ")[i].split("")
langsung di for-loop, dan singkirkanString[]N=
dan;
. Dan Anda dapat menyimpan 2 byte tambahan dengan mengubah urutan for-loop:,for(int i=0;i<9;)
gunakan[i++]
alih-alih[i]
dalam if-check, dan singkirkan+1
dalam pengembalian."".join
kes.join
.Pesta , 163 byte
Cobalah online!
Tidak tahu RETINA tetapi tampaknya jawaban langsung dari jawaban itu.
sumber
*
denganj=0;for i in ONE TWO .. ; do ((j++)); printf "%s)a=%s;;" $(sed 's/./\*&\*/g' <<<$i) $j ; done
tetapi lebih lamaJavascript, 121 byte
atau 116
Tetapi hanya bahan daur ulang pada saat ini.
sumber
Pyth,
-44-41 bytesMengambil string yang dikutip, menghasilkan 0 untuk TIDAK.
Cobalah!
penjelasan
sumber
Java, 254 byte
Coba Online
sumber
C, 198 byte
Coba Online
sumber
Python 2, 155 byte
Fungsi anonim mencari grup regex. Bukan solusi terbaik di sini dengan Python tetapi cara alternatif.
sumber