সংখ্যার একটি ম্যাট্রিক্স বোঝানো একটি স্ট্রিং দেওয়া থাকলে, সেই ম্যাট্রিক্সের সারিগুলো ও কলামগুলো রিটার্ন করুন।
তাহলে এরকম ভেতরে নিউলাইন-সহ একটি স্ট্রিং দেওয়া হলে:
9 8 7
5 3 2
6 6 7
যা এই ম্যাট্রিক্স বোঝায়:
1 2 3
|---------
1 | 9 8 7
2 | 5 3 2
3 | 6 6 7
আপনার কোড যেন এগুলো বের করে দিতে পারে:
আমাদের উদাহরণের ম্যাট্রিক্সের সারিগুলো:
আর এর কলামগুলো:
এটি এমন প্রথম অনুশীলনী, যেখানে সমাধানটি কোনো "main" স্ক্রিপ্ট নয়। লক্ষ্য হলো ফাংশনের একটি লাইব্রেরি লেখা, যেটি অন্য awk প্রোগ্রামে ইনক্লুড করা যাবে। এই অনুশীলনীতে দেখার মতো বেশ কয়েকটি নতুন ও মজার ধারণা আছে।
নিচের যে বিভাগগুলোর গায়ে "(gawk)" ট্যাগ দেওয়া আছে, সেগুলো বিশেষভাবে GNU awk-এর এক্সটেনশন।
এই অনুশীলনীতে আপনি মূল ইনপুট স্ট্রিম থেকে নয়, একটি ফাইল থেকে ডেটা পড়বেন।
Gnu awk ম্যানুয়ালে getline সম্পর্কে পড়ুন, বিশেষ করে Getline/File এবং Getline/Variable/File রূপগুলো।
দ্বিমাত্রিক অ্যারে এই সমাধানটি বাস্তবায়নের একটি উপায় হতে পারে। GNU awk-এ এটি উপস্থাপন করার দুটি উপায় আছে:
টেস্ট ফাইলে @include ডিরেক্টিভটি লক্ষ্য করুন।
এটি gawk-কে উল্লিখিত ফাইলটি পড়ে ইভ্যালুয়েট করার নির্দেশ দেয়।
সব awk ভ্যারিয়েবলই গ্লোবাল (ফাংশনের প্যারামিটারগুলো ছাড়া, যেগুলো ওই ফাংশনের ভেতরে লোকাল)।
নামের সংঘর্ষের সম্ভাবনা অনেক বেশি, বিশেষ করে যখন থার্ড-পার্টি লাইব্রেরি ইনক্লুড করা হয়।
নেমস্পেস হলো ভ্যারিয়েবল কোথায় সংরক্ষিত থাকবে তা ভাগ করে রাখার একটি উপায়।
অনুশীলনীর ফাইলগুলোতে @namespace ডিরেক্টিভটি লক্ষ্য করুন।
ডিফল্ট নেমস্পেসের নাম "awk"। একটি ডিফল্ট নেমস্পেস থাকলে প্রোগ্রামার ভিন্ন নেমস্পেসের কোনো ফাংশনের ভেতর থেকে বিল্ট-ইন awk ফাংশন কল করতে পারেন।
অ্যারে প্যারামিটার রেফারেন্স দ্বারা পাস হয়। ফাংশনের ভেতরে অ্যারেটিতে যে পরিবর্তন করা হয়, তা কল করা জায়গাতেও দেখা যায়।
অ্যারে ছাড়া অন্য প্যারামিটার মান দ্বারা পাস হয়।
আনটাইপড প্যারামিটারের ক্ষেত্রে নির্ভর করে ফাংশনটি সেগুলো নিয়ে কী করে তার উপর:
বিস্তারিত সব কিছু ম্যানুয়ালের ফাংশনের আর্গুমেন্ট মান বা রেফারেন্স দ্বারা পাস করা অংশে আছে।
"মান দ্বারা পাস" প্যারামিটার ব্যবহার করে ফাংশন-স্কোপড (লোকাল) ভ্যারিয়েবল তৈরি করা যায়। তালিকাভুক্ত প্যারামিটারের সংখ্যার চেয়ে কম মান কোনো ফাংশনে পাস করলে সেটি এরর নয়; বাড়তি প্যারামিটারগুলো ব্যবহার হওয়ার আগে পর্যন্ত "আনটাইপড" থাকে। ফাংশনের ভেতরে এগুলোতে স্কেলার মান অ্যাসাইন করা যায়, যা গ্লোবাল নেমস্পেসে সংরক্ষিত হয় না।
প্রথা অনুযায়ী, ফাংশন সিগনেচারে প্রত্যাশিত প্যারামিটারগুলো আগে থাকে, তারপর কিছু হোয়াইটস্পেস, আর শেষে লোকাল প্যারামিটারগুলো। একটি উদাহরণ:
function add(a, b, total) {
# here, `typeof(total)` is "untyped"
total = a + b
# now, `typeof(total)` is "number"
return total
}
BEGIN {
sum = add(5, 10)
print sum # 15
print typeof(total) # untyped, meaning "total" is unused in this scope
}
Exercism-এ সাইন আপ করুন, AWK ট্র্যাকের 3টি কনসেপ্ট92টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।