পাঠ্যে বানান ত্রুটিগুলি গণনা করুন; আপনার কোডটিতে বানান ত্রুটির সংখ্যা হ্রাস করুন


28

একটি প্রোগ্রাম বা ফাংশন লিখুন যা দুটি ইনপুট নেয়:

  1. একটি বার্তা
  2. ইংলিশ ভাষার অভিধান, যেমনটি এই গিথুব ফাইলে প্রদর্শিত হবে (প্রায় 60000 শব্দযুক্ত)

এবং বার্তায় বানান ত্রুটির সংখ্যা আউটপুট করে (সংজ্ঞা এবং পরীক্ষার ক্ষেত্রে নীচে দেখুন)।

আপনি আপনার ফাংশনটির প্যারামিটার হিসাবে অভিধানটি পেতে পারেন, আপনার প্রোগ্রামটি একটি প্রাক-সংজ্ঞায়িত ফাইল হিসাবে প্রত্যাশা করে যা আপনার কোডে হার্ড কোডেড ডেটা, বা অন্য কোনও বুদ্ধিমান পদ্ধতিতে find


আপনার কোডটি নিজেই একটি সংক্ষিপ্ত সংখ্যক বানান ত্রুটির সাথে একটি পাঠ্য বার্তার মতো দেখা উচিত। সুতরাং, আপনি নিজের কোডটিকে এটিকে ইনপুট হিসাবে খাওয়ানোর মাধ্যমে স্কোর গণনা করবেন ।

বিজয়ী এমন কোড যা সর্বনিম্ন স্কোর (সর্বনিম্ন সম্ভাব্য স্কোর 0) 0 যদি একই স্কোর সহ বেশ কয়েকটি উত্তর থাকে তবে বিজয়ীর কোড আকার (অক্ষরে) দ্বারা সিদ্ধান্ত নেওয়া হয়। যদি দুটি উত্তর এখনও বাঁধা থাকে তবে বিজয়ীর পূর্ববর্তী উত্তর।


যদি প্রয়োজন হয় তবে আপনি ইনপুট বার্তাটি ASCII (বাইট 32 ... 126) হিসাবে প্রচলিত পদ্ধতিতে এনকোড করা নতুন লাইনের (1 বাইট "10" বা 2 বাইট "13 10"), এবং খালি খালি ধরে নিতে পারেন। তবে, যদি আপনার কোডটিতে অ-এএসসিআইআই অক্ষর থাকে, তবে এটি নন-এসসিআইআই ইনপুটটিকেও সমর্থন করা উচিত (যাতে এটি নিজস্ব স্কোর গণনা করতে পারে)।

অক্ষরগুলি নিম্নলিখিত শ্রেণিতে বিভক্ত করা হয়:

  • চিঠিগুলি একটি ... জেড এবং এ ... জেড
  • হোয়াইটস্পেস (স্পেস অক্ষর বা নিউলাইন চরিত্র হিসাবে এখানে সংজ্ঞায়িত)
  • যতিচিহ্নসিন্নিবেশ . , ; : ! ?
    • বাক্য শেষ . ! ?
  • আবর্জনা (বাকি সব)

একটি শব্দকে বর্ণের ক্রম হিসাবে সংজ্ঞায়িত করা হয়, যা সর্বাধিক (অর্থাত্ কোনও বর্ণের আগে নয় বা তার পরেও নয়)।

একটি বাক্য অক্ষরের সর্বাধিক ক্রম হিসাবে সংজ্ঞায়িত হয় যা বাক্য সমাপ্ত হয় না।

একটি অক্ষরটি একটি বানান ত্রুটি হয় যদি এটি কোনও বানানের নিয়ম লঙ্ঘন করে:

  1. একটি অক্ষর অবশ্যই একটি অভিধান শব্দের অন্তর্ভুক্ত থাকে (বা, অন্য কথায়: দৈর্ঘ্যের N এর প্রতিটি শব্দ যা অভিধানে এন বানান ত্রুটি হিসাবে গণনা করা হয় না)
  2. কোনও বাক্যটির প্রথম অক্ষর, কোনও প্রাথমিক শ্বেতক্ষেত্রের অক্ষর উপেক্ষা করে অবশ্যই বড় হাতের অক্ষর হওয়া উচিত
  3. পূর্ববর্তী নিয়ম অনুসারে বর্ণিত অক্ষরগুলি বাদে সমস্ত বর্ণ অবশ্যই নিম্নের হতে হবে
  4. একটি বিরামচিহ্ন অক্ষর কেবল কোনও চিঠি বা আবর্জনার পরে অনুমোদিত হয়
  5. একটি বাক্য-সমাপ্তি অক্ষরের পরে একটি নতুন লাইন অক্ষর অনুমোদিত হয়
  6. বার্তাটির শুরুতে এবং সাদা স্থানের অক্ষরের পরে শ্বেতস্পেসের অক্ষরগুলি অনুমোদিত নয়
  7. কোনও আবর্জনা থাকতে হবে না (বা, অন্য কথায়: প্রতিটি আবর্জনা চরিত্রের গণনা একটি বানান ত্রুটি)

তদতিরিক্ত, শেষ বাক্যটি অবশ্যই ফাঁকা বা সঠিকভাবে একটি নতুনলাইন চরিত্রের সমন্বয়ে গঠিত হবে (অর্থাত্ বার্তাটি একটি বাক্য-সমাপ্তি চরিত্র এবং একটি optionচ্ছিক নতুন লাইনের সাথে শেষ হওয়া উচিত - আসুন আমরা এটি নিয়ম 8 বলি)।

পরীক্ষার কেস (প্রতিটি অক্ষরের নীচে একটি নিয়ম যা এটি লঙ্ঘন করে; এর পরে =>প্রয়োজনীয় উত্তর হয়):

Here is my 1st test case!!
           711           4                => 4

main(){puts("Hello World!");}
2   777    883     3     77 78            => 12

  This message starts with two spaces
66                                   8    => 3

What ? No apostrophe's??
     4              71 4                  => 4

  Extra   whitespace   is   BAD!
66      661111111111 66   66333           => 21

Several
lines?
Must be used only to separate sentences.
                                          => 1 (first linebreak is en error: rule 5)

"Come here," he said.
73         7                              => 3 (sentence starts with '"', not 'C')

2
আমি একগুচ্ছ লুফোলের প্রত্যাশা করছিলাম, তবে আপনি তাদের সমস্তটি কভার করেছেন বলে মনে হচ্ছে। আমার কাছ থেকে +1
নাথান মেরিল

4
আমি মনে করি এসপিএল এখানে বিজয়ী।
গুরুপদ মামাদাপুর

2
.গেরট্রুড আরও ভাল। কমান্ডগুলি নির্বিচার বাক্য, কেবল শব্দের গণনা এবং গড় শব্দের দৈর্ঘ্যের বিষয় length
রেইনার পি।

আমি যখন এটি দেখি তখন "অ্যাপ্লাস্ক্রিপ্ট" ভেবেছিলাম। যদিও ম্যাক নেই।
পূর্কাকাডারী

1
@ পিটারটেলর আমি চাই না যে নিয়মগুলি খুব জটিল হয়ে উঠুক। আপনার পরীক্ষার কেস ঠিক আছে; আমি এটি আমার পোস্টে যুক্ত করেছি।
অ্যানাটলিগ

উত্তর:


6

পার্ল 6 , 134 বানান ত্রুটি

my token punctuation {<[.,;:!?]>}
my \text = slurp; my \mistakes=[]; for split /\.|\!|\?/, text { for .trim.match: :g, /<:letter>+/ -> \word { (append mistakes, .comb when none words slurp pi given lc word) or (push mistakes, $_ if ((.from or word.from) xor m/<[a..z]>/) for word.match: :g, /./) }}
append mistakes, comb / <after \s | <punctuation>> <punctuation> | <!before <punctuation> | <:letter> | \s> . | <!after \.|\!|\?> \n | [<before ^> | <after \s>] \s /, text; say mistakes.Numeric

পাঠযোগ্যতার জন্য অতিরিক্ত সাদা স্থান সহ:

my token punctuation {<[.,;:!?]>}
my \text = slurp;
my \mistakes=[];
for split /\.|\!|\?/, text {
    for .trim.match: :g, /<:letter>+/ -> \word {
        (append mistakes, .comb when none words slurp pi given lc word)
        or
        (push mistakes, $_ if ((.from or word.from) xor m/<[a..z]>/) for word.match: :g, /./)
    }
}
append mistakes, comb /
  <after \s | <punctuation>> <punctuation>
  | <!before <punctuation> | <:letter> | \s> .
  | <!after \.|\!|\?> \n
  | [<before ^> | <after \s>] \s
/, text;
say mistakes.Numeric

নোট:

  • 3.14159265358979বর্তমান ওয়ার্কিং ডিরেক্টরিতে ডাকা একটি ফাইলের অভিধানের প্রত্যাশা ।
  • একমাত্র অনুপ্রাণিত অংশটি লাইন
    append mistakes, .comb when none words slurp pi given lc word,
    বাকিটি বেশ খারাপ। তবে এটি কমপক্ষে আরও ভাল সমাধানের জন্য বেসলাইন হিসাবে পরিবেশন করতে পারে ... :)

4
এখন পর্যন্ত সর্বাধিক পঠনযোগ্য পার্ল কোড
ক্রিটিক্সী লিথোস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.