Luhn

Luhn

মধ্যম

নির্দেশনা

একটি সংখ্যা দেওয়া হলে লুহ্ন সূত্র অনুযায়ী সেটি বৈধ কি না তা নির্ণয় করুন।

লুহ্ন অ্যালগরিদম হলো একটি সরল চেকসাম সূত্র, যা নানা ধরনের আইডেন্টিফিকেশন নম্বর, যেমন ক্রেডিট কার্ড নম্বর ও কানাডিয়ান সোশ্যাল ইনস্যুরেন্স নম্বর যাচাই করতে ব্যবহৃত হয়।

কাজটি হলো, প্রদত্ত একটি স্ট্রিং বৈধ কি না তা যাচাই করা।

একটি সংখ্যা যাচাই করা

১ বা তার কম দৈর্ঘ্যের স্ট্রিং বৈধ নয়। ইনপুটে স্পেস থাকতে পারে, তবে যাচাই করার আগে সেগুলো সরিয়ে ফেলতে হবে। এছাড়া অন্য সব অঙ্ক-বহির্ভূত ক্যারেক্টার অনুমোদিত নয়।

উদাহরণ ১: বৈধ ক্রেডিট কার্ড নম্বর

4539 3195 0343 6467

লুহ্ন অ্যালগরিদমের প্রথম ধাপ হলো, ডান দিক থেকে শুরু করে প্রতি দ্বিতীয় অঙ্ককে দ্বিগুণ করা। আমরা দ্বিগুণ করব

4539 3195 0343 6467
↑ ↑  ↑ ↑  ↑ ↑  ↑ ↑  (double these)

দ্বিগুণ করার ফলে সংখ্যাটি ৯-এর চেয়ে বড় হয়ে গেলে গুণফল থেকে ৯ বিয়োগ করতে হবে। আমাদের দ্বিগুণ করার ফলাফল:

8569 6195 0383 3437

এরপর সব অঙ্ক যোগ করুন:

8+5+6+9+6+1+9+5+0+3+8+3+3+4+3+7 = 80

যোগফল যদি ১০ দিয়ে নিঃশেষে বিভাজ্য হয়, তাহলে সংখ্যাটি বৈধ। এই সংখ্যাটি বৈধ!

উদাহরণ ২: অবৈধ ক্রেডিট কার্ড নম্বর

8273 1232 7352 0569

ডান দিক থেকে শুরু করে প্রতি দ্বিতীয় অঙ্ক দ্বিগুণ করুন

7253 2262 5312 0539

অঙ্কগুলো যোগ করুন

7+2+5+3+2+2+6+2+5+3+1+2+0+5+3+9 = 57

৫৭, ১০ দিয়ে নিঃশেষে বিভাজ্য নয়, তাই এই সংখ্যাটি বৈধ নয়।

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Haskell Exercism

Luhn শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Haskell ট্র্যাকের 107টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।

ডিপ ডাইভ: Luhn!

আমরা Luhn-এর ৮টি ভিন্ন সংস্করণ ঘেঁটে দেখি; শুরু করি অত্যন্ত পরিপাটি একটি Ruby ইমপ্লিমেন্টেশন দিয়ে, তারপর কিছু ইম্পারেটিভ ও ফাংশনাল পদ্ধতি ঘেঁটি অবশেষে পৌঁছাই একটি SQLite সংস্করণে, যার পাঠোদ্ধার করতে Erik আর Jeremy-কে বেশ পরিশ্রম করতে হয়েছিল!