Buat fungsi yang mengambil string suku kata pinyin sebagai argumen, dan mengembalikan true dari kombinasi yang ada, salah jika tidak.
Gunakan "v" untuk "ü".
Berikut adalah daftar lengkap kombinasi. http://www.pinyin.info/rules/initials_finals.html
Contohnya
f("bu") == true
f("zheng") == true
f("nv") == true
f("ri") == true
f("cei") == false
f("ia") == false
f("kian") == false
f("qa") == false
Tolong, jangan lakukan hal-hal seperti mengikis halaman web atau membaca file metode input untuk mengurangi jumlah karakter. (Jika Anda melakukannya, panjang data akan dihitung terhadap jumlah karakter). Salah satu tujuan golf kode ini adalah untuk melihat bagaimana aturan dapat disederhanakan. Kode terpendek menang.
code-golf
kolmogorov-complexity
Ming-Tang
sumber
sumber
nar
? : Pnvi
pernah kombinasi yang valid.Jawaban:
JavaScript 1.6,
503496477 karakterFomatt sedikit lebih mudah dibaca (kecuali ada kesalahan dalam memecah kode menjadi beberapa baris):
Kasus nol-inisial ditambah beberapa kali diuji dengan ekspresi reguler. Setelah itu, tabel dikodekan sebagai seri (digabungkan) dari 6 digit, angka dasar-36, satu per suara awal. Pencarian kemudian menggunakan sepasang
indexOf
panggilan dan pergeseran untuk memilih bit yang tepat.Diuji terhadap semua sel dalam tabel kombinasi (sel terisi diuji benar, sel kosong diuji false).
Sunting: Mengganti beberapa dari 36 karakter dari base-36 lookup dengan perbandingan sejak g–, k–, h–, j–, q–, dan z– memiliki blok padat benar / salah.
Sunting: Mengatur ulang uji bit untuk menghindari yang tidak perlu
!!
dan memadatkan regex lebih lanjut.sumber
!!
? Saya tidak yakin saya mengerti mengapa Anda akan membutuhkan ganda bukan ...if (g(s) == (validList.indexOf(s) >= 0)
yang mengembalikan false on16 == true
; Saya memperdebatkannya dari sudut pandang "apa yang benar-benar 'benar-benar berarti" dan meninggalkannya. Dalam kedua kasus tersebut, saya memiliki perubahan terencana untuk hari ini yang akan menghapus dengan!!
mengganti1<<r&*parseInt
dengan (lebih atau kurang)(parseInt>>r)&1
sehingga return adalah 1 dan saya mencukur dua karakter.PHP, 548 karakter
Memang, sepertinya tidak optimal, tetapi saya menulis regex agar cocok dengan kombinasi pinyin yang valid. Mengurangi karakter dengan mengganti substring berulang dengan variabel.
Kode
Pemakaian
sumber
F #, 681 karakter
Tidak cukup mendapatkan suku kata tanpa konsonan awal yang benar (Y, W dll).
sumber
APL (Dyalog Extended) , 475 byte
Cobalah online!
Golf sedang berlangsung.
Tidak disatukan
Cobalah online!
Fungsi helper
s
membongkar string yang dibatasi ruang:Saya pertama-tama menyimpan string awal dan terakhir yang mungkin dalam suku kata, kemudian membuat tabel yang
tab
berisi rangkaian setiap string dari daftar pertama dengan setiap string dari daftar kedua.Selanjutnya, saya menyimpan data biner sebagai daftar bilangan bulat. Beberapa bilangan bulat diulang dan karena itu dapat disimpan dalam variabel, yang juga memungkinkan penghilangan beberapa ruang.
Setiap integer diterjemahkan ke dalam biner, dan mewakili satu baris tabel. Setiap bit dalam jumlah mewakili apakah suku kata tertentu di baris itu adalah suku kata yang valid, dengan MSB mewakili kolom pertama. Semua suku kata yang tidak valid dihapus dari tabel.
Kami meratakan tabel ke dalam daftar, menambahkan formulir tanpa konsonan awal sebagai kasus khusus, dan akhirnya memeriksa apakah input kami ada dalam daftar.
Kemungkinan potensi bermain golf lebih lanjut:
Skrip bermanfaat Python dan generator kasus uji: Coba online!
sumber