ট্র্যাক
/
Clojure
Clojure
/
অনুশীলনী
/
অ্যানালিনের অনুপ্রবেশ
অ্যানালিনের অনুপ্রবেশ

অ্যানালিনের অনুপ্রবেশ

লার্নিং অনুশীলনী

ভূমিকা

Clojure-এ বুলিয়ান মান true বা false দিয়ে প্রকাশ করা হয়।

প্রেডিকেট ফাংশনগুলো (যে ফাংশনগুলো বুলিয়ান রিটার্ন করে) সাধারণত একটি প্রশ্নবোধক চিহ্ন (?) দিয়ে শেষ হয়, তবে এটি শুধু প্রচলিত রীতি।

কোর লাইব্রেরিতে not, and এবং or-এর মতো লজিক্যাল অপারেটরগুলোর জন্য ফাংশন রয়েছে।

নির্দেশনা

এই অনুশীলনীতে আপনি একটি নতুন RPG গেমের কোয়েস্ট লজিক তৈরি করবেন, যেটি এক বন্ধু বানাচ্ছে। গেমটির মূল চরিত্র Annalyn, এক সাহসী মেয়ে, যার আছে একটি দুর্দান্ত ও বিশ্বস্ত পোষা কুকুর। দুর্ভাগ্যবশত বিপর্যয় নেমে আসে: বনের মধ্যে ফল খুঁজতে গিয়ে তার প্রিয় বন্ধুকে অপহরণ করা হয়েছে। Annalyn তার বন্ধুকে খুঁজে উদ্ধার করার চেষ্টা করবে, আর চাইলে এই কোয়েস্টে তার কুকুরটিকেও সঙ্গে নিয়ে যাবে।

কিছু সময় ধরে পথ অনুসরণ করার পর, Annalyn সেই শিবির খুঁজে পায় যেখানে তার বন্ধুকে বন্দী করে রাখা হয়েছে। দেখা যায়, অপহরণকারী দুজন: এক পরাক্রমশালী নাইট আর এক চতুর তিরন্দাজ।

অপহরণকারীদের খুঁজে পাওয়ার পর Annalyn ভেবে দেখে, নিচের কোন কোন কাজ সে করতে পারে:

  • দ্রুত আক্রমণ: নাইট ঘুমিয়ে থাকলে দ্রুত আক্রমণ করা যায়, কারণ বর্ম পরতে তার সময় লাগে, তাই সে অরক্ষিত থাকবে।
  • গুপ্তচরবৃত্তি: তাদের মধ্যে অন্তত একজন জেগে থাকলে দলটির উপর গুপ্তচরবৃত্তি করা যায়। নইলে গুপ্তচরবৃত্তি শুধুই সময়ের অপচয়।
  • বন্দীকে সংকেত: বন্দী জেগে থাকলে এবং তিরন্দাজ ঘুমিয়ে থাকলে পাখির ডাক দিয়ে বন্দীকে সংকেত পাঠানো যায়। তিরন্দাজরা পাখির সংকেতে প্রশিক্ষিত, তাই তারা জেগে থাকলে বার্তাটি ধরে ফেলতে পারে।
  • বন্দীকে মুক্ত করা: Annalyn বন্দীকে মুক্ত করতে চুপিচুপি শিবিরে ঢোকার চেষ্টা করতে পারে। এটি করা ঝুঁকিপূর্ণ, এবং দুটি উপায়ের একটিতেই কেবল এটি সফল হতে পারে:
    • Annalyn-এর সঙ্গে তার পোষা কুকুর থাকলে তিরন্দাজ ঘুমিয়ে থাকলে সে বন্দীকে উদ্ধার করতে পারে। নাইট কুকুরটিকে ভয় পায়, আর Annalyn ও বন্দী পালিয়ে যাওয়ার আগে তিরন্দাজ প্রস্তুত হওয়ার সময় পাবে না।
    • Annalyn-এর সঙ্গে তার পোষা কুকুর না থাকলে তাকে ও বন্দীকে খুব চুপিচুপি চলতে হবে! বন্দী জেগে থাকলে এবং নাইট ও তিরন্দাজ দুজনেই ঘুমিয়ে থাকলে Annalyn বন্দীকে মুক্ত করতে পারে, কিন্তু বন্দী ঘুমিয়ে থাকলে তাকে উদ্ধার করা যায় না, কারণ Annalyn-এর হঠাৎ আবির্ভাবে বন্দী চমকে উঠবে আর নাইট ও তিরন্দাজকে জাগিয়ে ফেলবে।

আপনার চারটি কাজ: বনের তিনটি চরিত্রের অবস্থা এবং Annalyn-এর পোষা কুকুর উপস্থিত আছে কি না, তার ভিত্তিতে উপরের কাজগুলো করা সম্ভব কি না তা নির্ণয় করার লজিক তৈরি করা।

1. দ্রুত আক্রমণ করা যায় কি না তা যাচাই করুন

can-fast-attack? ফাংশনটি তৈরি করুন, যা একটি বুলিয়ান মান নেয় এবং তা নির্দেশ করে নাইট জেগে আছে কি না। নাইটের অবস্থার ভিত্তিতে দ্রুত আক্রমণ করা সম্ভব হলে ফাংশনটি true রিটার্ন করে। নইলে এটি false রিটার্ন করে:

(def knight-awake? true)

(can-fast-attack? knight-awake?)
;;=> false

2. দলটির উপর গুপ্তচরবৃত্তি করা যায় কি না তা যাচাই করুন

can-spy? ফাংশনটি তৈরি করুন, যা তিনটি বুলিয়ান মান নেয় এবং যথাক্রমে নাইট, তিরন্দাজ ও বন্দী জেগে আছে কি না তা নির্দেশ করে। তিনটি চরিত্রের অবস্থার ভিত্তিতে দলটির উপর গুপ্তচরবৃত্তি করা সম্ভব হলে ফাংশনটি true রিটার্ন করে। নইলে এটি false রিটার্ন করে:

(def knight-awake? false)
(def archer-awake? true)
(def prisoner-awake? false)

(can-spy? knight-awake? archer-awake? prisoner-awake?)
;;=> true

3. বন্দীকে সংকেত পাঠানো যায় কি না তা যাচাই করুন

can-signal-prisoner? ফাংশনটি তৈরি করুন, যা দুটি বুলিয়ান মান নেয় এবং যথাক্রমে তিরন্দাজ ও বন্দী জেগে আছে কি না তা নির্দেশ করে। দুটি চরিত্রের অবস্থার ভিত্তিতে বন্দীকে সংকেত পাঠানো সম্ভব হলে ফাংশনটি true রিটার্ন করে। নইলে এটি false রিটার্ন করে:

(def archer-awake? false)
(def prisoner-awake? true)

(can-signal-prisoner? archer-awake? prisoner-awake?)
;;=> true

4. বন্দীকে মুক্ত করা যায় কি না তা যাচাই করুন

can-free-prisoner? ফাংশনটি তৈরি করুন, যা চারটি বুলিয়ান মান নেয়। প্রথম তিনটি প্যারামিটার নির্দেশ করে যথাক্রমে নাইট, তিরন্দাজ ও বন্দী জেগে আছে কি না। শেষ প্যারামিটারটি নির্দেশ করে Annalyn-এর পোষা কুকুর উপস্থিত আছে কি না। তিনটি চরিত্রের অবস্থা ও Annalyn-এর পোষা কুকুরের উপস্থিতির ভিত্তিতে বন্দীকে মুক্ত করা সম্ভব হলে ফাংশনটি true রিটার্ন করে। নইলে এটি false রিটার্ন করে:

(def knight-awake? false)
(def archer-awake? true)
(def prisoner-awake? false)
(def dog-present? false)

(can-free-prisoner? knight-awake? archer-awake? prisoner-awake? dog-present?)
;;=> false
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Clojure Exercism

অ্যানালিনের অনুপ্রবেশ শুরু করতে প্রস্তুত?

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