লগ ধাঁধা পাইথন ব্যায়াম

লগ পাজল অনুশীলনের জন্য, আপনি দুটি ধাঁধা সমাধান করতে পাইথন কোড ব্যবহার করবেন। এই অনুশীলনটি urllib মডিউল ব্যবহার করে, যেমন পাইথন ইউটিলিটি বিভাগে দেখানো হয়েছে। এই অনুশীলনের জন্য ফাইলগুলি google-python-exercises-এর ভিতরে "logpuzzle" ডিরেক্টরিতে রয়েছে (আপনার যদি ইতিমধ্যে না থাকে তবে google-python-exercises.zip ডাউনলোড করুন, বিস্তারিত জানার জন্য সেট আপ দেখুন)। "logpuzzle.py" ফাইলে আপনার কোড যোগ করুন।

একটি প্রাণীর একটি চিত্রকে অনেকগুলি সরু উল্লম্ব ডোরাকাটা চিত্রে ভাঙ্গা হয়েছে৷ স্ট্রাইপ ছবিগুলি ইন্টারনেটে কোথাও না কোথাও রয়েছে, প্রতিটির নিজস্ব ইউআরএল রয়েছে৷ ইউআরএলগুলি একটি ওয়েব সার্ভার লগ ফাইলে লুকানো থাকে। আপনার লক্ষ্য হল ইউআরএলগুলি খুঁজে বের করা এবং আসল চিত্রটি পুনরায় তৈরি করতে সমস্ত চিত্র স্ট্রাইপ ডাউনলোড করা।

স্লাইস ইউআরএলগুলি অ্যাপাচি লগ ফাইলগুলির মধ্যে লুকানো থাকে (ওপেন সোর্স অ্যাপাচি ওয়েব সার্ভারটি ইন্টারনেটে সর্বাধিক ব্যবহৃত সার্ভার)। প্রতিটি লগ ফাইল কিছু সার্ভার থেকে, এবং পছন্দসই স্লাইস url লগ মধ্যে লুকানো হয়. লগ ফাইলটি কোন সার্ভার থেকে এসেছে তা এইভাবে এনকোড করে: লগ ফাইল animal_code.google.com হল code.google.com সার্ভার থেকে (আনুষ্ঠানিকভাবে, আমরা বলব যে সার্ভারের নাম যা প্রথম আন্ডারবার অনুসরণ করে)। animal_code.google.com লগ ফাইলে "প্রাণী" ধাঁধার চিত্রের ডেটা রয়েছে৷ যদিও লগ ফাইলের ডেটাতে একটি বাস্তব অ্যাপাচি ওয়েব সার্ভারের সিনট্যাক্স রয়েছে, তবে ধাঁধার জন্য যা প্রয়োজন তার বাইরের ডেটা হল একটি বাস্তব লগ ফাইল থেকে র্যান্ডমাইজ করা ডেটা।

লগ ফাইল থেকে একটি একক লাইন কেমন দেখায় তা এখানে (এটি আসলেই অ্যাপাচি লগ ফাইলের মতো দেখায়):

10.254.254.28 - - [06/Aug/2007:00:14:08 -0700] "GET /foo/talks/ HTTP/1.1"
200 5910 "-" "Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4"

প্রথম কয়েকটি সংখ্যা অনুরোধকারী ব্রাউজারের ঠিকানা। সবচেয়ে আকর্ষণীয় অংশ হল "GET path HTTP" সার্ভার দ্বারা প্রাপ্ত একটি ওয়েব অনুরোধের পথ দেখায়। পাথ নিজেই কখনও স্পেস ধারণ করে না, এবং স্পেস দ্বারা GET এবং HTTP থেকে আলাদা করা হয় (regex সাজেশন: \S (বড় হাতের S) যেকোন নন-স্পেস অক্ষরের সাথে মেলে)। লগের লাইনগুলি খুঁজুন যেখানে স্ট্রিং "ধাঁধা" পাথের ভিতরে প্রদর্শিত হয়, লগের অন্যান্য অনেক লাইন উপেক্ষা করে।

অংশ A - ইউআরএলে ফাইল লগ করুন

read_urls(ফাইলের নাম) ফাংশনটি সম্পূর্ণ করুন যা একটি লগফাইলের ভিতর থেকে ধাঁধা ইউআরএল বের করে। লগফাইলে সমস্ত "ধাঁধা" পাথ ইউআরএল খুঁজুন। একটি সম্পূর্ণ url তৈরি করতে ফাইলের নাম থেকে সার্ভার নামের সাথে প্রতিটি url থেকে পাথ একত্রিত করুন, যেমন "http://www.example.com/path/puzzle/from/inside/file"। একাধিকবার প্রদর্শিত ইউআরএল স্ক্রিন আউট করুন। read_urls() ফাংশনটি বর্ণানুক্রমিক ক্রম অনুসারে এবং সদৃশ ছাড়াই সম্পূর্ণ url-এর তালিকা ফেরত দেবে। ইউআরএলগুলিকে বর্ণানুক্রমিক ক্রমানুসারে নিলে আসল প্রাণীর ছবি পুনরায় তৈরি করতে সঠিক বাম-থেকে-ডান ক্রমে ছবির স্লাইস পাওয়া যাবে। সবচেয়ে সহজ ক্ষেত্রে, main() শুধুমাত্র url প্রিন্ট করা উচিত, প্রতি লাইনে একটি।

$ ./logpuzzle.py animal_code.google.com
http://code.google.com/something/puzzle-animal-baaa.jpg
http://code.google.com/something/puzzle-animal-baab.jpg
...

পার্ট B - ইমেজ পাজল ডাউনলোড করুন

download_images() ফাংশনটি সম্পূর্ণ করুন যা url এবং একটি ডিরেক্টরির একটি সাজানো তালিকা নেয়। প্রদত্ত ডিরেক্টরিতে প্রতিটি url থেকে ছবিটি ডাউনলোড করুন, প্রয়োজনে প্রথমে ডিরেক্টরি তৈরি করুন (একটি ডিরেক্টরি তৈরি করতে "os" মডিউল দেখুন এবং একটি url ডাউনলোড করার জন্য "urllib.urlretrieve()" দেখুন)। "img0", "img1", "img2" ইত্যাদির মতো একটি সাধারণ স্কিম সহ স্থানীয় চিত্র ফাইলগুলির নাম দিন। প্রতিটি ছবি ডাউনলোড করার সময় আপনি একটু "পুনরুদ্ধার করা হচ্ছে..." স্ট্যাটাস আউটপুট লাইন প্রিন্ট করতে চাইতে পারেন কারণ এটি ধীর হতে পারে এবং প্রোগ্রামটি কাজ করছে এমন কিছু ইঙ্গিত পাওয়া ভাল। প্রতিটি ছবি আসল থেকে একটু উল্লম্ব স্লাইস। আসলটি পুনরায় তৈরি করতে কীভাবে স্লাইসগুলি একসাথে রাখবেন? একটু html দিয়ে সুন্দরভাবে সমাধান করা যায় (এইচটিএমএল জ্ঞানের প্রয়োজন নেই)।

download_images() ফাংশনটি প্রতিটি স্থানীয় ইমেজ ফাইল দেখানোর জন্য একটি *img* ট্যাগ সহ ডিরেক্টরিতে একটি index.html ফাইল তৈরি করা উচিত। img ট্যাগগুলি আলাদা না করেই এক লাইনে থাকা উচিত৷ এইভাবে, ব্রাউজার সমস্ত স্লাইসগুলিকে নির্বিঘ্নে একসাথে প্রদর্শন করে। এটি করার জন্য আপনার HTML এর জ্ঞানের প্রয়োজন নেই; শুধু একটি index.html ফাইল তৈরি করুন যা দেখতে এইরকম:

<html>
<body>
<img src="img0"><img src="img1"><img src="img2">...
</body>
</html>

আপনি যখন পশুর ধাঁধা ডাউনলোড করতে পারেন তখন এটি কেমন হওয়া উচিত তা এখানে:

$ ./logpuzzle.py --todir animaldir animal_code.google.com
$ ls animaldir
img0  img1  img2  img3  img4  img5  img6  img7  img8  img9  index.html

যখন এটি সব কাজ করে, একটি ব্রাউজারে index.html খুললে আসল প্রাণীর ছবি প্রকাশ করা উচিত। ছবিতে প্রাণীটি কী?

পার্ট সি - ইমেজ স্লাইস ডিসক্র্যাম্বলিং

দ্বিতীয় ধাঁধাটিতে একটি খুব বিখ্যাত স্থানের একটি চিত্র জড়িত, তবে এটি কিছু কাস্টম বাছাইয়ের উপর নির্ভর করে। প্রথম ধাঁধার জন্য, চিত্রগুলি সঠিকভাবে অর্ডার করার জন্য urlগুলিকে বর্ণানুক্রমিকভাবে সাজানো যেতে পারে। সাজানোর মধ্যে, পুরো url ব্যবহার করা হয়। যাইহোক, আমরা বলব যে url যদি "- wordchars - wordchars .jpg" প্যাটার্নে শেষ হয়, যেমন "http://example.com/foo/puzzle/bar-abab-baaa.jpg", তাহলে url-এর উচিত সাজানোর দ্বিতীয় শব্দ দ্বারা প্রতিনিধিত্ব করা (যেমন "baaa")। সুতরাং word-word.jpg প্যাটার্ন দিয়ে শেষ হওয়া প্রতিটি ইউআরএলের একটি তালিকা বাছাই করলে দ্বিতীয় শব্দ অনুসারে ইউআরএলগুলিকে অর্ডার করা উচিত।

এই ধরনের ইউআরএলগুলিকে সঠিকভাবে অর্ডার করতে আপনার কোড প্রসারিত করুন এবং তারপরে আপনি দ্বিতীয় place_code.google.com ধাঁধাটি ডিকোড করতে সক্ষম হবেন যা একটি বিখ্যাত স্থান দেখায়। এটা কোন জায়গা দেখায়?

CC অ্যাট্রিবিউশন: এই ধাঁধাটিতে ব্যবহৃত ছবিগুলি তাদের মালিকদের দ্বারা ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন 2.5 লাইসেন্সের অধীনে উপলব্ধ করা হয়েছে, যা উদারভাবে এটির মতো বিষয়বস্তুর রিমিক্সকে উত্সাহিত করে৷ প্রাণীর চিত্রটি ফ্লিকারে ব্যবহারকারী zappowbang থেকে এবং স্থানের চিত্রটি ফ্লিকারে ব্যবহারকারী বুলিয়ানস্প্লিট থেকে।