ইনপুট সরল করতে মডুলাস ব্যবহার
এটি একটি টিপ খুব সহজ হতে পারে, তাই যদি এটি হয় আমি কেবল এটি প্রতিস্থাপন করব বা এটি মুছব।
ধরা যাক আপনি দুটি অক্ষরের ইনপুট নিতে চান, "ক" এবং "বি" এবং প্রতিটিটির জন্য যথাক্রমে 1 এবং 2 ফেরত চান। আপনি সম্ভবত এটির জন্য শর্তাবল ব্যবহার করতে চাইছেন, যেহেতু এটি সর্বাধিক উপলব্ধি করে এবং আমি এই নির্দিষ্ট উদাহরণের জন্য আরও ঘনীভূত ফর্মটি ব্যবহার করব।
i:"a")+1+n
এইটি ইনপুটটি "ক" এর চেয়ে বেশি এবং 1 যোগ করে কিনা তা পরীক্ষা করে দেখায় যেহেতু "এ" 0 এবং "বি" 1 প্রদান করবে, এটি 1 এবং 2 দেবে This এটি কাজটি বেশ ভাল করে তোলে, তবে আমাদের ক্ষেত্রে ইনপুট, আমরা আরও এগিয়ে যেতে পারে।
i:3%n
Mod 3, 97 এ, যা "a" এর সংখ্যার সমতুল্য, 1 হয়ে যায়, এবং 98, যা "b" গুলি, 2 হয় two দুটিরও বেশিের জন্য, এমন একটি মোড রয়েছে যা অনন্য ফলাফল দেয়, তবে আমার কাছে সহজ উপায়ে সবচেয়ে ছোটটি খুঁজে পাওয়ার জন্য গাণিতিক দক্ষতা নেই (যেমন আপনার কাছে যদি সেট {100,101,102,103} থাকে, তবে 104 এর জন্য অনন্য ফলাফল দেওয়া হবে) এতে প্রতিটি মান তবে খুব সহায়ক ফ্যাশনে নয়)। তবে বেশিরভাগ ক্ষেত্রে, ইনপুটটি কয়েকটি বর্ণানুক্রমিক অক্ষরের মধ্যে সীমাবদ্ধ থাকায় আপনি প্রায়শই এমন একটি মোড খুঁজে পাবেন যা কাজ করে।
ক্ষুদ্রতম মডুলাসটি সন্ধান করতে যা দুটি সংখ্যার জন্য অনন্য ফলাফল দেয়, ক, এবং, বি, আপনি নীচের মত কাজ করেন। A এবং b ( |a - b|
) এর পার্থক্যের নিখুঁত মানটি ধরুন এবং সবচেয়ে ক্ষুদ্রতম সংখ্যা, n, যা এটি ভাগ করে না তা সন্ধান করুন। উদাহরণস্বরূপ, 97 এবং 98 এর জন্য |98 - 97| = 1
, এবং তাই 2 সবচেয়ে ছোট মোড হবে (তবে আমাদের পরীক্ষার প্রোগ্রামের জন্য, এটি 97 এর জন্য 1 এবং 98 এর জন্য 0 দেয়, সুতরাং 3 টি আরও ভাল)।