একটি গ্যারেজ সেলে আপনি সস্তায় একটি চমৎকার ভিন্টেজ টাইপরাইটার পেয়ে যান! উত্তেজিত হয়ে আপনি বাড়ি ছুটে যান, একটি কাগজ ঢোকান, আর টাইপ করা শুরু করেন। তবে আউটপুট দেখে আপনার উত্তেজনা কমে যায়: সব শব্দ এলোমেলো হয়ে গেছে! যেমন, এটি "post"-এর বদলে "stop" আর "stale"-এর বদলে "least" প্রিন্ট করে। সাবধানে আপনি আবার চেষ্টা করেন, কিন্তু এবার এটি "spot" আর "slate" প্রিন্ট করে। কিছু পরীক্ষা-নিরীক্ষার পর আপনি বুঝতে পারেন, প্রতিটি অক্ষর প্রিন্ট হওয়ার আগে একটি র্যান্ডম বিলম্ব থাকে, যা ক্রম নষ্ট করে দেয়। এখন আপনি বুঝতে পারেন কেন তারা এটা এত কম দামে বিক্রি করেছিল!
আপনি বুঝতে পারেন, এই অদ্ভুত বৈশিষ্ট্যটি আপনাকে অ্যানাগ্রাম তৈরি করার সুযোগ দেয়, অর্থাৎ অ্যানাগ্রাম হলো এমন শব্দ যা অন্য একটি শব্দের অক্ষরগুলো পুনর্বিন্যাস করে তৈরি হয়। আপনার এই আবিষ্কারে খুশি হয়ে, দিনের বাকি অংশটি আপনি শত শত অ্যানাগ্রাম তৈরি করতে ব্যয় করেন।
আপনার কাজ হলো, একটি লক্ষ্য শব্দ ও কিছু প্রার্থী শব্দ দেওয়া থাকলে, প্রার্থীদের মধ্যে থেকে লক্ষ্য শব্দটির অ্যানাগ্রামগুলো নিয়ে গঠিত উপসেটটি খুঁজে বের করা।
একটি অ্যানাগ্রাম হলো অক্ষরগুলো নতুন করে সাজিয়ে নতুন একটি শব্দ তৈরি করা: যেমন "owns" হলো "snow"-এর একটি অ্যানাগ্রাম।
একটি শব্দ তার নিজের অ্যানাগ্রাম নয়: যেমন "stop" "stop"-এর অ্যানাগ্রাম নয়।
লক্ষ্য ও প্রার্থী হলো এমন শব্দ, যেগুলো এক বা একাধিক ASCII বর্ণমালার অক্ষর (A-Z এবং a-z) দিয়ে গঠিত।
ছোট হাতের ও বড় হাতের অক্ষর সমতুল্য: যেমন "PoTS" হলো "sTOp"-এর একটি অ্যানাগ্রাম, কিন্তু StoP sTOp-এর অ্যানাগ্রাম নয়।
অ্যানাগ্রাম সেট হলো প্রার্থী সেটের সেই উপসেট, যেগুলো লক্ষ্য শব্দের অ্যানাগ্রাম (যেকোনো ক্রমে)।
অ্যানাগ্রাম সেটের শব্দগুলোতে অক্ষরের যে বড়-ছোট হাতের বিন্যাস প্রার্থী সেটে ছিল, সেটিই থাকা উচিত।
লক্ষ্য "stone" এবং প্রার্থী "stone", "tones", "banana", "tons", "notes", "Seton" হলে, অ্যানাগ্রাম সেট হলো "tones", "notes", "Seton"।
ক্যান্ডিডেট শব্দের তালিকায় যে ক্রমে সেগুলো দেওয়া আছে, ঠিক সেই ক্রমেই আপনাকে অ্যানাগ্রামগুলো রিটার্ন করতে হবে।
Exercism-এ সাইন আপ করুন, Delphi Pascal ট্র্যাকের 76টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।