প্যালিনড্রোম (palindrome)

5864312_f260
A man, a plan, a canal- Panama!
শব্দ বা বাক্য নিয়ে যত ধরনের মজার মজার ব্যাপার হতে পারে তার মধ্যে প্যালিনড্রোম(palindrome) অন্যতম। আমরা মোটামুটি সবাই জানি যে, কোনো একটা শব্দ বা বাক্যকে উভয়দিক থেকে পড়লে যদি একই জিনিস পাওয়া যায় তাহলেই সেটা একটা প্যালিনড্রোম, যেমন- ‘MADAM’ বা উপরের বাক্যটি।
এখন যদি একজন প্রোগ্রামারকে কেউ বলে আপনাকে একটি বাক্য দেয়া হবে, আপনাকে বলতে হবে বাক্যটি প্যালিনড্রোম কিনা? তাহলে প্রোগ্রামার করবে কি বাক্যটার একটা কপি তৈরি করে, সেটাকে উলটে
দুটো বাক্যকে মিলিয়ে দেখবে। যদি দুটো বাক্য মিলে যায় তাহলে সেটা একটা প্যালিনড্রোম। আর একটু ‘চাল্লু প্রোগ্রামার’ হলে সে এতো কষ্ট করতে যাবে না। সে করবে কি যেই শব্দ বা বাক্য দেয়া আছে সেটার প্রথম অক্ষরের সাথে শেষ অক্ষরকে মিলিয়ে দেখবে, ২য় অক্ষরের সাথে শেষেরটার আগেরটা মিলিয়ে দেখবে, এভাবে শব্দ বা বাক্যটার মাঝখান পর্যন্ত গেলেই বলে দেয়া যাবে যে শব্দ বা বাক্যটা প্যালিনড্রোম কিনা।
palindrome check
শুধু শব্দ বা বাক্যই নয় একটা নাম্বারও প্যালিনড্রোম হতে পারে। যেমন- ১২৩৪৪৩২১, এটা একটা প্যালিনড্রোমিক নাম্বার।
কোনো একটা শব্দ বা বাক্য বা নাম্বার আসলেই প্যালিনড্রোম কিনা সেটা চেক করা আসলে ‘চা’ তে ‘টোস্ট বিস্কুট’ চুবিয়ে খাওয়ার মতই সহজ কাজ। কিন্তু যদি বলা হয়, একটা নাম্বার দেয়া হলো তার পরের প্যালিনড্রোমিক নাম্বার কি হবে?? তখন একটু মাথাটা চুলকানোর প্রয়োজন হয় বৈকি। কিন্তু আসলেই কি সেটা খুব কঠিন কাজ?? এই নাম্বারের পরের নাম্বার একটা একটা করে নিয়ে সেটা প্যালিনড্রোম কিনা চেক করে করেই বের করে ফেলা যায়, তাই না??
হ্যাঁ, কাজটা এভাবেও করা যায়, কিন্তু অনেক বড় নাম্বারের জন্য এভাবে করলে অনেকবার লুপ ঘুরবে, মানে অনেক সময় লাগবে।
এই কাজটাই সহজভাবে করা যায়।
মনে করি আমাদেরকে বলা হলো ‘134567329807541’ এই নাম্বারের পরের প্যালিনেড্রোমিক নাম্বারটা বের করতে হবে।
এখন আমরা নাম্বারটিকে ‘head’, ‘mid’ এবং ‘tail’ এ ভাগ করবো।head-> 1345673
mid-> 2
tail-> 9807541

এখন ‘head’  কে উলটে ‘tail’ এর সাথে compare করবো।
সেক্ষেত্রে ২ টা ব্যাপার হতে পারে-

if reverse(head) <= tail
(যদি প্রদত্ত নাম্বারটাই একটা প্যালিনড্রোম হয়, তখন reverse(head)= tail হবে, তখন পরের প্যালিনড্রোমটা খুঁজতে হবে)

  • if mid<9, increment mid
  • else increment ‘head’ part and set mid = 0
এখন রেজাল্ট পাওয়া যাবে-
Result := head mid reverse(head)

তারমানে আমাদের নাম্বারের জন্য আমরা পাচ্ছি-
1345673 3 reverse(1345673) => 134567333765431

দেখা যাচ্ছে যে, যদি reverse(head) > tail হয়, তখন কোনো কিছু চেঞ্জ না করে শুধু head mid reverse(head) করলেই রেজাল্ট পাওয়া যাবে।

যাই হোক, প্যালিনড্রোম নিয়ে ভালোই গুতাগুতি হলো। শেষ করবো মজার একটা জিনিস দিয়ে।
তুমি যদি প্যালিনড্রোমকে ভয় পাও, তাহলে কিন্তু কোনো সমস্যাই নেই। কারণ প্যালিনড্রোম ভয় পাওয়াটা খুব অদ্ভুত কিছু না, ইংরেজীতে এটার একটা সুন্দর নাম পর্যন্ত আছে।
প্যালিনড্রোম ভয় পাওয়াকে বলে-

AIBOHPHOBIA

মজার ব্যাপারটা কি ধরতে পেরেছো?
‘AIBOHPHOBIA’ নিজেই কিন্তু একটা প্যালিনড্রোম!!!!!!
আরো মজার কিছু প্যালিনড্রোম দেখতে পাবে এখানে

Life without logic is useless…………………………………………………..

Want to like or share?:
0

2 comments

Leave a Reply

Your email address will not be published. Required fields are marked *