Input: Anda akan diberikan string yang berisi satu kata bahasa Inggris. Semua huruf akan menjadi huruf kecil, dan tidak akan ada karakter non-alfabet dalam string.
Keluaran: Anda akan mengembalikan bilangan bulat dari 1 hingga 7 yang mewakili berapa banyak suku kata yang menurut Anda ada dalam kata.
Penilaian: Program Anda akan dijalankan terhadap semua kata yang ditemukan di repositori ini . Jika Anda mendapatkan N
kata-kata yang benar, dan program Anda M
berukuran besar, maka skor Anda adalah N-(M*10)
. Skor terbanyak menang.
Untuk menghasilkan jumlah suku kata saya, saya menggunakan ini sebagai daftar kata saya dan ini untuk menghitung suku kata.
code-challenge
word
Nathan Merrill
sumber
sumber
resume
contoh ...Jawaban:
Ruby, 8618 benar (91,1%), 53 byte, 8618 - 10 * 53 = 8088 skor
Ini adalah fungsi Ruby anonim yang menggunakan regex untuk menghitung suku kata.
Fungsi ini menambahkan suku kata untuk setiap instance dari:
e
vokal, diikuti oleh nole
s lebihe
yang bukan bagian dari trailinged
atauely
, dengan pengecualian trailingted
atauded
sle
Analisis
Ide dasarnya adalah untuk menghitung jumlah huruf vokal, tetapi ini dengan sendirinya tidak terlalu akurat (
[aeiouy]+
mendapatkan 74% benar). Alasan utama untuk ini adalah karena diame
, yang memodifikasi suara vokal sebelumnya sementara tidak diucapkan sendiri. Misalnya, kata tersebutslate
memiliki dua vokal tetapi hanya satu suku kata.Untuk mengatasinya, kami mengambil
e
bagian pertama dari regex dan memperlakukannya secara terpisah. Mendeteksi silente
s sulit, tetapi saya menemukan dua kasus di mana mereka sering terjadi:ed
(kecuali itu adalahted
atauded
sepertisettled
atausaddled
),evy
(mis.lovely
)Kasus-kasus ini secara khusus dikecualikan dalam apa yang seharusnya
e.
.Alasan untuk
.
die(?!d$|ly).
adalah untuk mengkonsumsi char berikutnya jika ada vokal ganda (misalnyaea
atauee
), dane
pada akhir kata tidak dihitung. Namun Trailingle
yang biasanya diucapkan, sehingga ditambahkan kembali.Akhirnya, vokal berjalan dihitung sebagai satu suku kata. Meskipun hal ini tidak selalu terjadi (mis.
curious
), Seringkali sulit untuk mengetahui apakah ada banyak suku kata. Ambilia
daricelestial
danspatial
, sebagai contoh.Program uji
Saya tidak begitu mengenal Ruby, jadi saya tidak yakin seberapa bagus golfnya. Saya berhasil mengikis bersama program uji dengan berkonsultasi banyak SO meskipun:
sumber
e
" memberi 6638 (7158 benar)Python3, 7935 - 10 * 71 = 7225
Jawaban cepat-dan-kotor saya: menghitung vokal berturut-turut, tetapi hilangkan e akhir apa pun terlebih dahulu.
Setelah melepaskan e, ini menggantikan vokal dengan
x
dan semua karakter lain dengan spasi. Hasilnya digabungkan kembali menjadi string dan kemudian dipisah pada spasi putih. Secara mudah, spasi putih di awal dan akhir diabaikan (mis." x xx ".split()
Memberi["x","xx"]
). Oleh karena itu, panjang daftar yang dihasilkan adalah jumlah grup vokal.Jawaban asli, 83 byte di bawah ini lebih akurat karena hanya menghapus satu e di bagian akhir. Dengan demikian yang lebih baru memiliki masalah untuk kata-kata seperti
bee
; tetapi kode yang diperpendek melebihi efek itu.Program uji:
Jelas ini terlalu kotor dan tidak cukup cepat untuk mengalahkan jawaban Ruby Sp3000. ; ^)
sumber
->s{s.scan(/([aiouy]|e(?!$))+/).size}
skor 7583. 84% cukup mengesankan untuk sesuatu yang sangat sederhana.Perl, 8145 - 3 * 30 = 7845
Menggunakan daftar dari sebelum komit terbaru.
sumber
Python, 5370-10 * 19 = 5180
Program ini mengasumsikan bahwa kata yang lebih panjang berarti lebih banyak suku kata.
Program tester yang saya gunakan adalah:
sumber
len(x)/6
sebagai gantinya (5377-190 = 5187).readlines()
termasuk baris baru dalam hasilnya. Jadi milikmu sebenarnya(len(x)+1)/7+1
. Anda harus menggunakannyaread().split('\n')
sebagai gantinya. Meskipun saya mendapat 5352 untuk formula itu.