আপনি জিওক্যাশিং-এর একনিষ্ঠ ভক্ত, কারণ এটি আপনার বাইরে ঘোরাঘুরির ভালোবাসার সঙ্গে ধাঁধা সমাধান করার ভালোবাসাকে একসঙ্গে মিলিয়ে দেয়। স্থানীয় জিওক্যাশিং ওয়েবসাইটে সব ক্যাশের GPS স্থানাঙ্কের তালিকা থাকলেও, সেগুলো সংগ্রহ করার জন্য একটি দক্ষ রুট বানানোর সুবিধা এতে নেই। সৌভাগ্যক্রমে আপনার মেশিনে পাথফাইন্ডিং সফটওয়্যার ইনস্টল করা আছে, তবে এটি জিওক্যাশিং ওয়েবসাইটের থেকে আলাদা একটি GPS ফরম্যাট ব্যবহার করে। পাথফাইন্ডিং সফটওয়্যারে ডেটা ঢোকাতে হলে, ওয়েবসাইটে থাকা প্রতিটি GPS স্থানাঙ্কের অক্ষাংশ ও দ্রাঘিমাংশের ডিগ্রি এবং গোলার্ধ আপনাকে পার্স করতে হবে।
আপনার কাজ হলো GPS কোঅর্ডিনেট পার্স করা। প্রতিটি কোঅর্ডিনেট ডেসিমেল ডিগ্রি ফরম্যাট-এর একটি ভ্যারিয়েন্টে লেখা হয়, যেখানে গোলার্ধগুলো স্পষ্টভাবে উল্লেখ থাকে:
<LATITUDE_DEGREES> <LATITUDE_HEMISPHERE>, <LONGITUDE_DEGREES> <LONGITUDE_HEMISPHERE>
প্রতিটি আলাদা কম্পোনেন্টের জন্য অনুমোদিত মানগুলো হলো:
<LATITUDE_DEGREES>: 0..90 রেঞ্জের মধ্যে একটি ফ্লোটিং-পয়েন্ট সংখ্যা (উভয় প্রান্তসহ)<LATITUDE_HEMISPHERE>: N অথবা S
<LONGITUDE_DEGREES>: 0..180 রেঞ্জের মধ্যে একটি ফ্লোটিং-পয়েন্ট সংখ্যা (উভয় প্রান্তসহ)<LONGITUDE_HEMISPHERE>: E অথবা W
উদাহরণস্বরূপ, "48.8584 N, 2.2945 E" পার্স করলে পাওয়া যায়:
<LATITUDE_DEGREES>: 48.8584<LATITUDE_HEMISPHERE>: N<LONGITUDE_DEGREES>: 2.2945<LONGITUDE_HEMISPHERE>: Eআপনার সামনে ১১টি টাস্ক আছে, যেখানে আপনি ধাপে ধাপে GPS কোঅর্ডিনেট পার্স করবেন। আপনি ব্যবহার করবেন Prolog-এর ডেফিনিট ক্লজ গ্রামার (DCG) সাপোর্ট, যা স্ট্রাকচার্ড টেক্সট পার্স করার জন্য ডিজাইন করা হয়েছে।
শুরু করার জন্য, স্টাব ফাইলে ইতিমধ্যেই dcg/basics লাইব্রেরি অন্তর্ভুক্ত করা আছে, এভাবে:
:- use_module(library(dcg/basics)).
একটি কমা (",") পার্স করার জন্য comma রুলটি ইমপ্লিমেন্ট করুন:
?- string_codes(",", Codes), phrase(comma, Codes).
একটি স্পেস (" ") পার্স করার জন্য space রুলটি ইমপ্লিমেন্ট করুন:
?- string_codes(" ", Codes), phrase(space, Codes).
নিউলাইন ছাড়া সব হোয়াইটস্পেস পার্স করতে space রুলটি পরিবর্তন করুন:
?- string_codes("\t", Codes), phrase(space, Codes).
?- string_codes("\n", Codes), phrase(space, Codes).
false.
অক্ষাংশের গোলার্ধ "N" অথবা "S" হতে পারে, যাকে north বা south অ্যাটমে পার্স করা উচিত।
অক্ষাংশের গোলার্ধ পার্স করার জন্য latitude_hemisphere রুলটি ইমপ্লিমেন্ট করুন:
?- string_codes("N", Codes), phrase(latitude_hemisphere(Hemisphere), Codes).
Hemisphere = north.
দ্রাঘিমাংশের গোলার্ধ "E" অথবা "W" হতে পারে, যাকে east বা west অ্যাটমে পার্স করা উচিত।
দ্রাঘিমাংশের গোলার্ধ পার্স করার জন্য longitude_hemisphere রুলটি ইমপ্লিমেন্ট করুন:
?- string_codes("E", Codes), phrase(longitude_hemisphere(Hemisphere), Codes).
Hemisphere = east.
দ্রাঘিমাংশ বা অক্ষাংশের ডিগ্রিকে একটি ফ্লোটিং-পয়েন্ট সংখ্যা হিসেবে সংজ্ঞায়িত করা হয়।
ফ্লোটিং-পয়েন্ট সংখ্যা পার্স করার জন্য degrees রুলটি ইমপ্লিমেন্ট করুন:
?- string_codes("748.012", Codes), phrase(degrees(Degrees), Codes).
Degrees = 748.012.
অক্ষাংশের ডিগ্রি শুধু ফ্লোটিং-পয়েন্ট সংখ্যা নয়, বরং 0..90 রেঞ্জের মধ্যে থাকা ফ্লোটিং-পয়েন্ট সংখ্যা (উভয় প্রান্তসহ)।
উপরের রেঞ্জ ব্যবহার করে অক্ষাংশের ডিগ্রি পার্স করার জন্য latitude_degrees রুলটি ইমপ্লিমেন্ট করুন:
?- string_codes("48.745", Codes), phrase(latitude_degrees(Degrees), Codes).
Degrees = 48.745.
?- string_codes("117.844", Codes), phrase(latitude_degrees(Degrees), Codes).
false.
দ্রাঘিমাংশের ডিগ্রি শুধু ফ্লোটিং-পয়েন্ট সংখ্যা নয়, বরং 0..180 রেঞ্জের মধ্যে থাকা ফ্লোটিং-পয়েন্ট সংখ্যা (উভয় প্রান্তসহ)।
উপরের রেঞ্জ ব্যবহার করে দ্রাঘিমাংশের ডিগ্রি পার্স করার জন্য longitude_degrees রুলটি ইমপ্লিমেন্ট করুন:
?- string_codes("178.773", Codes), phrase(longitude_degrees(Degrees), Codes).
Degrees = 178.773.
?- string_codes("-22.523", Codes), phrase(longitude_degrees(Degrees), Codes).
false.
অক্ষাংশের দুটি অংশ থাকে: ডিগ্রি এবং গোলার্ধ, যেগুলো একটি স্পেস দিয়ে আলাদা করা থাকে।
একটি অক্ষাংশ পার্স করার জন্য latitude রুলটি ইমপ্লিমেন্ট করুন:
?- string_codes("56.101 N", Codes), phrase(latitude(Degrees, Hemisphere), Codes).
Degrees = 56.101,
Hemisphere = north.
অক্ষাংশের দুটি অংশ থাকে: ডিগ্রি এবং গোলার্ধ, যেগুলো একটি স্পেস দিয়ে আলাদা করা থাকে।
একটি অক্ষাংশ পার্স করার জন্য latitude রুলটি ইমপ্লিমেন্ট করুন:
?- string_codes("143.889 W", Codes), phrase(longitude(Degrees, Hemisphere), Codes).
Degrees = 143.889,
Hemisphere = west.
কোঅর্ডিনেটের দুটি অংশ থাকে: অক্ষাংশ এবং দ্রাঘিমাংশ, যেগুলো একটি কমার পরে একটি স্পেস দিয়ে আলাদা করা থাকে।
অক্ষাংশ (ডিগ্রি ও গোলার্ধ) দুটোই পার্স করার জন্য coordinate রুলটি ইমপ্লিমেন্ট করুন:
?- string_codes("48.8584 N, 2.2945 E", Codes), phrase(coordinate(Latitude, LatitudeHemisphere, Longitude, LongitudeHemisphere), Codes).
Latitude = 48.8584,
LatitudeHemisphere = north,
Longitude = 2.2945,
LongitudeHemisphere = east.
Exercism-এ সাইন আপ করুন, Prolog ট্র্যাকের 109টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।