Tulis program atau fungsi yang menerima sebagai input string yang mewakili kata Welsh (UTF-8 kecuali ditentukan lain oleh Anda).
Berikut ini adalah semua huruf tunggal dalam bahasa Welsh:
a, b, c, ch, d, dd, e, f, ff, g, ng, h, i, j, l, ll, m, n, o, p, ph, r, rh, s, t, th, u, b, y
Mengutip Wikipedia ,
Sementara digraf ch , dd , ff , ng , ll , ph , rh , th masing-masing ditulis dengan dua simbol, semuanya dianggap sebagai huruf tunggal. Ini berarti, misalnya bahwa Llanelli (sebuah kota di South Wales) dianggap hanya memiliki enam huruf dalam bahasa Welsh, dibandingkan dengan delapan huruf dalam bahasa Inggris.
Huruf-huruf ini juga ada di Welsh, meskipun terbatas pada kosakata teknis yang dipinjam dari bahasa lain:
k, q, v, x, z
Surat dengan diakritik tidak dianggap sebagai huruf yang terpisah, tetapi fungsi Anda harus menerimanya dan dapat menghitungnya. Kemungkinan surat-surat tersebut adalah:
" ù, ẁ
(Ini berarti bahwa ASCII bukan penyandian input yang dapat diterima, karena tidak dapat menyandikan karakter ini.)
Catatan:
- Ini kode golf.
- Anda tidak harus menjelaskan kata-kata seperti llongyfarch , di mana ng bukan digraph, tetapi dua huruf terpisah. Kata ini memiliki sembilan huruf, tetapi Anda dapat salah menghitungnya menjadi delapan. (Jika Anda dapat menjelaskan kata-kata seperti itu, itu luar biasa, tetapi di luar cakupan tantangan ini.)
- Input dijamin tidak memiliki spasi putih (kecuali jika Anda lebih suka dengan satu trailing newline (atau sesuatu yang lebih esoteris), dalam hal ini yang dapat diberikan). Tidak akan ada spasi putih internal.
Kasus uji:
- Llandudno, 8
- Llanelli, 6
- Rhyl, 3
- Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch, 50 (benar-benar 51, tapi kami akan menghitung 50)
- Tiga, 3
- Cymru, 5
- Glyndŵr, 7
sumber
Jawaban:
05AB1E ,
242321 byteKode:
Penjelasan:
Menggunakan pengkodean CP-1252 . Cobalah online!
sumber
Retina , 23 byte
Cobalah online!
Bahkan moar regex.
sumber
JavaScript (ES6), 44 byte
Jawaban sepele mungkin yang terpendek.
sumber
BASH
52 50(sed + wc) 41Terima kasih kepada Jordan
Jika huruf besar diperlukan ini perlu
i
di akhir perintah sed. (Saya meninggalkannya karena semua "huruf tunggal" dalam pertanyaan adalah huruf kecil meskipun beberapa contoh tidak).sumber
grep -o .|wc -l
bukannyawc -c
?wc
Anda dapat menggunakan-m
untuk menghitung karakter alih-alih byte.c
darich
dalam dengan[prt]
?sed -r 's,dd|ff|ng|ll|[cprt]h,1,gi'|wc -m
([dfl])\1
akan lebih lama daridd|ff|ll
. Satu lagi konsonan berlipat ganda akan mendukung versi pintar.Straw ,
30583533 byteGanti setiap kemunculan regex dengan
0
, dan konversi dari unary ke desimal.Sedihnya, Straw tidak bisa mengibarkan bendera ke regex.Saya lupa tentang?flags:
konstruknyaCobalah online! (Kode yang ditambahkan adalah untuk memverifikasi semua kasus uji)
sumber
Python 3, 64 byte
Gunakan regex lagi
Ide itu!
sumber
PowerShell v2 +,
525048 byteApakah
-replace
pada semua huruf dua simbol-satu-huruf, perubahan mereka0
(dilakukan karena mengubah ke non-angka akan memerlukan tanda kutip), kemudian mendapatkan hasil.length
dari string yang dihasilkan.Uji kasus
sumber
[prtc]h
?V , 31 byte
Cobalah secara online , atau Verifikasikan semua uji kasus!
Ini berisi beberapa karakter yang tidak patut dicetak, jadi ini adalah hexdump:
sumber
PHP, 56 Bytes
sumber
[dfl]{2}
pertandingandf
,,ld
dll. Serta pertandingan yang dimaksud.dd|ff|ll
memiliki panjang yang sama.echo
(spasi di akhir), gunakan<?=
, yang menyimpan 2 byte. Juga,$t
tidak diperlukan di sana, menghemat 3 byte lebih banyak.Java 7,
15673 byteBanyak byte yang disimpan berkat @ OlivierGrégoire .
Kasus yang tidak disatukan & uji:
Coba di sini.
Keluaran:
sumber
Matcher
secara langsung? : o Juga,Matcher
dapat didefinisikan dalam for loop.return s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length()
jauh, jauh lebih pendek. Bisakah ini bekerja?int c(String s){return s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length();}
). Dan hanya 51 untuk versi Java 8 (s->s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length()
).Matcher
kecelakaan. Saya sudah benar dalam kode tes, tetapi tidak dalam kode golf ..>.>replaceAll
Pekerjaan Anda lebih baik, terima kasih.R, 54 byte
Sangat mirip dengan jawaban yang lain. Cocok dengan salah satu dari dua huruf karakter dan menggantinya dengan
@
dan kemudian menghitung jumlah karakter. Membaca input dari stdin. Menggunakan opsiignore.case = TRUE
(argumen ketiga kegsub
) untuk mencocokkan karakter huruf besar dan kecil.Bonus
Keduanya
gsub
dannchar
merupakan vektor yang artinya ini juga berfungsi pada vektor karakter, misalnya:menghasilkan:
sumber
Perl 6 , 36 byte
Cobalah online!
sumber
XQuery, 77 byte
sumber
tcl, 71
demo
sumber
Perl 5 , 35 +1 (
-p
) = 36 byteCobalah online!
sumber