রুবি, 8618 সঠিক (91.1%), 53 বাইট, 8618 - 10 * 53 = 8088 স্কোর
->s{s.scan(/[aiouy]+e*|e(?!d$|ly).|[td]ed|le$/).size}
এটি একটি বেনামে রুবি ফাংশন যা সিলেবলগুলি গণনা করতে রেজিেক্সগুলি ব্যবহার করে।
ফাংশন প্রতিটি উদাহরণের জন্য একটি সিলেলেবল যুক্ত করে:
- অ-
eস্বরবর্ণের একটি রান , তার পরে আরও eএস এর শূন্য
- একটি
eযা পিছনের অংশ নয়ed বা elyপিছনে tedবা dedএস ব্যতীত
- একটি পিছনে
le
বিশ্লেষণ
মূল ধারণাটি স্বরবর্ণের রান গণনা করা, তবে এটি নিজেই খুব সঠিক নয় ( [aeiouy]+74% সঠিক হয়ে যায়)। এর মূল কারণ হ'ল নীরবতাe , যা নিজেই উচ্চারণ না করা অবস্থায় পূর্বের স্বরধ্বনিকে সংশোধন করে। উদাহরণস্বরূপ, শব্দটির slateদুটি স্বর রয়েছে তবে একটি মাত্র উচ্চারণযোগ্য।
এটি মোকাবেলা করার জন্য, আমরা eরেজেক্সের প্রথম অংশটি বাইরে নিয়ে আলাদাভাবে চিকিত্সা করি। নীরব eগুলি সনাক্ত করা শক্ত, তবে আমি দুটি ক্ষেত্রে খুঁজে পাই যেখানে সেগুলি প্রায়শই ঘটে:
- একটি trailing অংশ হিসেবে
ed(যদি না এটি একটি এর tedবা dedমত settledবা saddled),
- পিছনের অংশ হিসাবে
evy(যেমন lovely)
অন্যথায় কী হবে তা এই ক্ষেত্রেগুলি বিশেষত বাদ দেওয়া হয় e.।
কারণ .এ e(?!d$|ly).পরবর্তী গৃহস্থালির কাজ গ্রাস যদি একটি ডবল স্বরবর্ণ (যেমন হয় eaবা ee), এবং যাতে eশব্দের শেষে গণনা করা হয় না। তবে একটি trailing le হয় সাধারণত উচ্চারিত যাতে ফিরে যোগ করা হয়।
অবশেষে স্বরবর্ণের রানগুলি একটি উচ্চারণ হিসাবে গণনা করা হয়। যদিও এটি সর্বদা ক্ষেত্রে হয় না (যেমন curious), একাধিক সিলেবল রয়েছে কিনা তা প্রায়শই কাজ করা শক্ত work নিন iaএর celestialএবং spatial, একটি উদাহরণ হিসাবে।
পরীক্ষা প্রোগ্রাম
আমি রুবিকে সত্যিই জানি না তাই আমি জানি না যে এটি কতটা ভালভাবে গল্ফ করা যায়। যদিও অনেক এস.ও. এর সাথে পরামর্শ করে আমি একটি পরীক্ষা প্রোগ্রাম একসাথে স্ক্র্যাপ করার ব্যবস্থা করেছিলাম:
cases = 0
correct = 0
s = "->s{s.scan(/[aiouy]+e*|e(?!d$|ly).|[td]ed|le$/).size}"
f = eval s
for i in 1 ... 8
filepath = i.to_s + "-syllable-words.txt"
file = File.open(filepath)
while (line = file.gets)
word = line.strip
cases += 1
if f.call(word) == i
correct += 1
end
end
end
p "Correct: #{correct}/#{cases}, Length: #{s.length}, Score: #{correct - s.length*10}"