ট্র্যাক
/
F#
F#
/
অনুশীলনী
/
টিসবেরি গুপ্তধন সন্ধান
টিসবেরি গুপ্তধন সন্ধান

টিসবেরি গুপ্তধন সন্ধান

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

ভূমিকা

টিউপল

একটি টিউপল হলো নামহীন কিন্তু ক্রম অনুসারে সাজানো মানের একটি ইমিউটেবল সমষ্টি। টিউপলে যেকোনো (বা একাধিক) ডেটা টাইপ রাখা যায়, এমনকি অন্য টিউপলও।

টিউপলকে ( ও ) অক্ষরের মাঝে কমা দিয়ে আলাদা করা মান হিসেবে লেখা হয়: (<element_1>, ... , <element_n>)।

("one", 2) // Tuple pair (2 values)
("one", 2, true) // Tuple triplet (3 values)

শুধু একই দৈর্ঘ্য ও একই টাইপের (একই ক্রমে) টিউপলই তুলনা করা যায়। টিউপলে কাঠামোগত সমতা থাকে, অর্থাৎ তাদের সব মান সমান হলেই কেবল তারা সমান হয়।

(1, 2) = (1, 2) // Same length, same types, same values, same order
// => true

(1, 2) = (2, 1) // Same length, same types, same values, different order
// => false

(1, 2) = (1, "2") // Same length, different types
// compiler error

(1, 2) = (1, 2, 3) // Different length
// compiler error

টিউপল থেকে মান বের করার তিনটি উপায় আছে:

  • fst ও snd ফাংশন
  • টিউপল ডিকনস্ট্রাকশন
  • প্যাটার্ন ম্যাচিং
let person = ("Jordan", 170)

// Option 1: fst/snd
let name1 = fst person
let length2 = snd person

// Option 2: deconstruction
let (name2, length2) = person
// => name2 = "Jordan"
// => length2 = 170

// Option 3: pattern matching
match person with
| name3, length3 -> printf "%s: %d" name3 length3

নির্দেশনা

আজারা আর রুই একই দলের সতীর্থ, তারা জলদস্যু-থিমের একটি ট্রেজার হান্ট প্রতিযোগিতায় লড়ছে। একজনের কাছে ম্যাপের কোঅর্ডিনেটসহ ট্রেজারদের একটি তালিকা আছে, অন্যজনের কাছে ম্যাপের কোঅর্ডিনেটসহ লোকেশনের নামের একটি তালিকা। তাদের দুজনকে ফাঁকা ম্যাপও দেওয়া হয়েছে, যেখানে শুরুর স্থানে লেখা আছে YOU ARE HERE।

আজারার তালিকা রুইয়ের তালিকা
ট্রেজার কোঅর্ডিনেট
Amethyst Octopus 1F
Angry Monkey Figurine 5B
Antique Glass Fishnet Float 3D
Brass Spyglass 4B
Carved Wooden Elephant 8C
Crystal Crab 6A
Glass Starfish 6D
Model Ship in Large Bottle 8A
Pirate Flag 7F
Robot Parrot 1C
Scrimshaw Whale's Tooth 2A
Silver Seahorse 4E
Vintage Pirate Hat 7E
লোকেশনের নাম কোঅর্ডিনেট কোয়াড্র্যান্ট
Seaside Cottages (1, 'C') Blue
Aqua Lagoon (Island of Mystery) (1, 'F') Yellow
Deserted Docks (2, 'A') Blue
Spiky Rocks (3, 'D') Yellow
Abandoned Lighthouse (4, 'B') Blue
Hidden Spring (Island of Mystery) (4, 'E') Yellow
Stormy Breakwater (5, 'B') Purple
Old Schooner (6, 'A') Purple
Tangled Seaweed Patch (6, 'D') Orange
Quiet Inlet (Island of Mystery) (7, 'E') Orange
Windswept Hilltop (Island of Mystery) (7, 'F') Orange
Harbor Managers Office (8, 'A') Purple
Foggy Seacave (8, 'C') Purple

তবে ব্যাপারটা একটু এলোমেলো: আজারার কোঅর্ডিনেটগুলো দেখে মনে হয় রুইয়ের থেকে আলাদাভাবে ফরম্যাট করা আর সাজানো হয়েছে, আর কোন ট্রেজার কোন লোকেশনের সাথে যায় সেটা বের করার জন্য তাদের বারবার এক তালিকা থেকে আরেক তালিকায় দেখতে হচ্ছে। যেহেতু তারা সদ্য F# শিখতে শুরু করেছে, তাই হান্টের তথ্যগুলো আরও ভালোভাবে গুছিয়ে রাখার জন্য একটি ছোট প্রোগ্রাম (আসলে কিছু ফাংশন) লিখতে তারা আপনার কাছে সাহায্য চেয়ে এসেছে।

1. কোঅর্ডিনেট বের করা

getCooordinate() ফাংশনটি ইমপ্লিমেন্ট করুন, যা আজারার তালিকা থেকে একটি (treasure, coordinate) জোড়া নেয় এবং শুধু বের করা ম্যাপ কোঅর্ডিনেটটি রিটার্ন করে।

getCoordinate ("Scrimshaw Whale's Tooth", "2A")
// "2A"

2. কোঅর্ডিনেট ফরম্যাট করা

convertCoordinate() ফাংশনটি ইমপ্লিমেন্ট করুন, যা "2A" ফরম্যাটের একটি কোঅর্ডিনেট নেয় এবং (2, 'A') ফরম্যাটের একটি টাপল রিটার্ন করে।

convertCoordinate "2A"
// (2, 'A')

3. কোঅর্ডিনেট মেলানো

compareRecords() ফাংশনটি ইমপ্লিমেন্ট করুন, যা একটি (treasure, coordinate) জোড়া এবং একটি (location, coordinate, quadrant) রেকর্ড নেয়, আর দুটির কোঅর্ডিনেট তুলনা করে। কোঅর্ডিনেটগুলো যদি "মেলে" তবে true রিটার্ন করুন, আর না মিললে false রিটার্ন করুন। সঠিকভাবে তুলনা করার জন্য প্রয়োজন অনুযায়ী কোঅর্ডিনেট আবার ফরম্যাট করুন।

compareRecords ("Brass Spyglass", "4B") ("Seaside Cottages", (1, 'C'), "blue")
// false

compareRecords ("Model Ship in Large Bottle", "8A") ("Harbor Managers Office", (8, 'A'), "purple")
// true

4. মিলে যাওয়া রেকর্ড একত্র করা

createrecord() ফাংশনটি ইমপ্লিমেন্ট করুন, যা আজারার তালিকা থেকে একটি (treasure, coordinate) জোড়া এবং রুইয়ের তালিকা থেকে একটি (location, coordinate, quadrant) রেকর্ড নেয়, আর কোঅর্ডিনেটগুলো মিলে গেলে (coordinate, location, quadrant, treasure) রিটার্ন করে। কোঅর্ডিনেটগুলো যদি না মেলে, তবে একই আকারের একটি টাপল রিটার্ন করুন, তবে সেটি "" দিয়ে ভরা থাকবে। সঠিকভাবে তুলনা করার জন্য প্রয়োজন অনুযায়ী কোঅর্ডিনেট আবার ফরম্যাট করুন।

createRecord ("Brass Spyglass", "4B") ("Abandoned Lighthouse", (4, 'B'), "Blue")
// ("4B", "Abandoned Lighthouse", "Blue", "Brass Spyglass")

createRecord ("Brass Spyglass", "4B") ("Seaside Cottages", (1, 'C'), "Blue")
// ("", "", "", "")
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
F# Exercism

টিসবেরি গুপ্তধন সন্ধান শুরু করতে প্রস্তুত?

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