Professional Web Application Developer.
Social Links
Pinned Post
3
13 0 Comments 1 Shares
Recent Updates
  • 1
    0 Comments 0 Shares
  • PHP দিয়ে প্রব্লেম সল্ভিং, কম্পিটিটিভ প্রোগ্রামিং এর শুরু
    SUNWARUL ISLAM·FRIDAY, MAY 1, 2020·
    এই লেখায় ‘প্রব্লেম সল্ভিং’, ‘কম্পিটিটিভ প্রোগ্রামিং’ কি এবং কিভাবে PHP ল্যাঙ্গুয়েজ ব্যবহার করে আমরা ‘কম্পিটিটিভ প্রোগ্রামিং’ বা ‘প্রব্লেম সল্ভিং’ -এর যাত্রা শুরু করতে পারি তা নিয়ে একটু আলোচনা করার চেষ্টা করেছি।
    আমরা অনেকেই আছি যারা বিভিন্ন যায়গা থেকে একটু-আধটু PHP শিখেছি এবং টুকটাক ডেভেলপমেন্ট করি সেই PHP দিয়ে। হয়তঃ অল্প সল্প ফ্রেমওয়ার্কও শিখে গেছি এত দিনে। তবে আমাদের অনেকেরই প্রোগ্রামিংয়ের বেসিকটা তেমন স্ট্রং নয়। সব সময় এটা নিয়ে দুশ্চিন্তাও হয় অনেকের।আমরা যারা অলরেডি PHP ইউজ করা শুরু করে দিয়েছি এবং হয়ত ক্যারিয়ারও শুরু করেছি PHP -তে তবে পাশাপাশি বেজ-টা আরো স্ট্রং করার কথা মাথায় আসে সব সময়, তাদের জন্য সময় বের করে প্রতিদিন PHP দিয়ে অনলাইন জাজ গুলোয় প্রব্লেম সল্ভিং প্রাকটিস করা ও রেগুলার কন্টেস্টে পার্টিসিপেট করা অনেক কার্যকরি হতে পারে। PHP এর স্কিল বাড়ানোর উপায় হিসেবেও নেয়া যেতে পারে এটা। পাশাপাশি লজিক-ও। এই প্রাকটিস করা, কন্টেস্ট করা গুলো জব প্রিপারেশনেও কাজে দেবে আমাদের।
    প্রব্লেম সল্ভিং, বা কম্পিটিটিভ প্রোগ্রামিংয়ে আমাদের খুব কম সময়ে, কম রিসোর্স (টাইম, মেমোরি) ব্যাবহার করে একটা প্রব্লেমের সলিউশন বের করতে হয়। এখানে এমনভাবে একটা সলিউশন লিখতে হয় যেখানে সাধারনত কিছু ইনপুটের বিপরীতে আমাদের প্রোগ্রামটা সঠিক এক্সপেক্টেড সলিউশনটি দিচ্ছে কি না তা চেক করা হয়ে থাকে। এদের প্রত্যেকটিকে টেস্ট কেস বলা হয়ে থাকে। প্রতিটি টেস্ট কেসের জন্য সঠিক উত্তর দিলে তবেই ‘জাজ’ আমাদের প্রোগ্রামটিকে ‘সঠিক’ হিসেবে চিহ্নিত করে Accepted (AC) থাকে। উত্তর না মিললে Wrong Answer (WA), বেশি সময় নিয়ে ফেললে Time limit exceeded (TLE) এরকম বিভিন্ন টাইপের মেসেজ (Verdict) দেয়।
    শুরুতে বিভিন্ন ধরনের ইনপুট নেয়া ও সঠিক ভাবে আউটপুট দেখানোটা চ্যালেঞ্জিং মনে হবে আমাদের কাছে। পরে, ইনপুট ও আউটপুটের ব্যাপারে অভ্যস্থ হয়ে গেলে ও বেসিক প্রব্লেম গুলো সল্ভ করতে পারলে পরে ধাপে ধাপে বিভিন্ন থিওরি, ডাটা-স্ট্রাকচার, ও এলগরিদম শিখে ইমপ্লিমেন্ট করে করে প্রব্লেম সলভিং শিখতে হবে।

    আমি এখানে এই শুরুটা কিভাবে করা যায় PHP ব্যাবহার করে, সেটা দেখানোর চেষ্টা করব।
    PHP দিয়ে প্রব্লেম সল্ভিং করার অনেক সাইট আছে যেমনঃ Codeforces, HackerRank, ইত্যাদি । যারা নতুন তারা Codeforces এর লিংকে গিয়ে ফ্রি একাউন্ট ক্রিয়েট করে নিন। এর পর Problem Set -এ গিয়ে Descending Order -এ সলভ করা শুরু করে দিতে পারেন। তাহলে সহজ থেকে কঠিন ক্রমে প্রব্লেম গুলো আসবে (সব চেয়ে বেশি সল্ভ করার ভিত্তিতে সম্ভবত)।
    শুরুতে যে প্রব্লেমটা আসবে সেটা PHP তে ইমপ্লিমেন্ট করা যাক।
    উদাহরন-১ঃ
    প্রব্লেম লিঙ্ক এখানে A. Watermelon (http://codeforces.com/problemset/problem/4/A)
    প্রব্লেম স্টেটমেন্টটি পড়লে বোঝা যাবে যে এখানে আমাদের একটা ইনপুট নিতে হবে (তরমুজের ওজন) এবং সেটা যদি দুই ভাগে ভাগ করা যায় এবং তা জোড় সংখ্যা হয় তাহলে “YES” প্রিন্ট করতে হবে অথবা “NO” প্রিন্ট করতে হবে।
    স্টান্ডার্ড ইনপুট নিতে আমরা বিভিন্ন ফাংশন ইউজ করতে পারি যেমনঃ
    Way-1: Take $n as standard input
    $std = fopen("php://stdin", "r");
    fscanf($std, "%d", $n);

    Way-1: fscanf(STDIN, "%d", $n);
    Way-3: Take $n as standard input and trim, convert to integers
    $n = fgets(STDIN);
    $n = trim(fgets(STDIN));
    $n = (int) fgets(STDIN);
    Etc. Depends on your datatype.
    To get type of the variable $n you can use gettype($n) function.
    আউটপুট দেখাতে বিভিন্ন ফাংশন ইউজ হয়, যেমনঃ
    echo "Hello";
    Or, print("Hello");
    Or, fwrite(STDOUT, "Hello");
    Etc

    তাহলে আমাদের প্রব্লেম অনুযায়ী ইনপুট, লজিক ও আউটপুট সহ পুরো সলিউশনটি লিখে ফেলা যাকঃ
    <?php

    $stdin = fopen("php://stdin", "r");
    fscanf($stdin, "%d", $x);
    if ($x % 2 == 0 && $x != 2) {
    echo "YES\n";
    } else {
    echo "NO\n";
    }
    fclose($stdin);

    এখন, প্রব্লেমের সাবমিট কোড (Submit Code) ট্যাবে গিয়ে প্রব্লেম নাম্বার ও ল্যাঙ্গুয়েজে PHP সিলেক্ট করে এই সলিউশনটি পেস্ট করে বা ফাইলটি আপলোড করে নিচের Submit বাটনে ক্লিক করলেই চেক করা শুরু হয়ে যাবে।



    এর পর স্টাটাস, মাই-সাবমিশন্স ইত্যাদি দেখতে পারেন। আপনার ভার্ডিক্টটি দেখতে পারেন।
    যদি কোন প্রব্লেম হয়, তাহলে প্রব্লেমটা কোন টেস্ট কেসে গিয়ে হচ্ছে সেটা দেখুন এবং এক্সপেক্টেড আউটপুট না আসলে কেন আসলো না সেটা নিয়ে ভাবুন। সে অনুযায়ী ডিবাগ করুন আপনার কোড।



    উদাহরন২ঃ A. Theatre Square (http://codeforces.com/problemset/problem/1/A)
    ইনপুটঃ এক লাইনে ৩ টা ইনপুট থাকবে
    আউটপুটঃ কয়টা ‘ফ্লাগ-স্টোন’ লাগবে সেটা ক্যালকুলেট করে প্রিন্ট করতে হবে।
    সতর্কতাঃ আউটপুটে অনেক বড় ডিজিট চলে আসতে পারে। ইন্টিজার ওভারফ্লো বা ইন্টিজার টাইপের চেয়ে বড় উত্তর আসলে কি হবে সেটা মাথায় রাখতে হবে। এখানে bcmul() ফাংশনটার উদ্দেশ্য বোঝার চেষ্টা করতে হবে। কিভাবে BigInteger হ্যান্ডেল করতে হয় PHP তে সেটা পিএইচপি ডকুমেন্টেশন ও গুগল করে বুঝে নিতে হবে। intval() দিয়ে আমরা ইন্টিজারে কনভার্ট করতে পারি।
    ফাইনাল সলিউশনঃ
    <?php

    $stdin = fopen("php://stdin", "r");
    fscanf($stdin, "%d %d %d", $n, $m, $a);

    $x = $n / $a;
    $x = intval($x);
    if ($n % $a) {
    ++$x;
    }
    $y = $m / $a;
    $y = intval($y);
    if ($m % $a) {
    ++$y;
    }

    echo bcmul($x, $y);

    fclose($stdin);

    উদাহরন৩ঃ
    প্রব্লেম লিংকঃ A. Way Too Long Words (http://codeforces.com/problemset/problem/71/A)
    সতর্কতাঃ PHP তে স্ট্রিং কি, এর বিভিন্ন প্রোপার্টি কিভাবে কাজ করে তা লক্ষ রাখতে হবে ও প্রয়োজনীয় মেথড গুলো সঠিক ভাবে ইউজ করতে জানতে হবে।
    Input
    The first line contains an integer n (1 ≤ n ≤ 100). Each of the following n lines contains one word. All the words consist of lowercase Latin letters and possess the lengths of from 1 to 100 characters.
    Output
    Print n lines. The i-th line should contain the result of replacing of the i-th word from the input data.
    Solution:
    <?php
    $stdin = fopen("php://stdin", "r");
    fscanf($stdin, "%d", $n);
    for ($i = 0; $i < $n; $i++) {
    fscanf($stdin, "%s", $s);
    if (strlen($s) > 10) {
    echo $s[0] . (strlen($s) - 2) . $s[strlen($s) - 1] . "\n";
    } else {
    echo $s . "\n";
    }
    }
    উদাহরন৪ঃ
    প্রব্লেম লিংকঃ Next Round (http://codeforces.com/problemset/problem/158/A)
    Input
    The first line of the input contains two integers n and k (1 ≤ k ≤ n ≤ 50) separated by a single space.
    The second line contains n space-separated integers (এরে) a1, a2, ..., an (0 ≤ ai ≤ 100), where ai is the score earned by the participant who got the i-th place. The given sequence is non-increasing (that is, for all i from 1 to n - 1 the following condition is fulfilled: ai ≥ ai + 1).
    Output
    Output the number of participants who advance to the next round.

    সতর্কতাঃ এখানে কিভাবে এরে ইনপুট নিতে হয় এবং প্রয়োজনে তার সব এলিমেন্টের টাইপ চেঞ্জ করে নিতে হয় সেটা জানা জরুরি।
    সলিউশনঃ
    <?php
    $stdin = fopen("php://stdin", "r");
    fscanf($stdin, "%d %d", $n, $k);
    fscanf($stdin, "%[^\n]", $arr);
    $arr = array_map('intval', preg_split("/ /", $arr, -1, PREG_SPLIT_NO_EMPTY));

    $royal_p = $arr[$k - 1];

    $sum = 0;
    for ($i = 0; $i < $n; $i++) {
    if ($arr[$i] != 0 && $arr[$i] >= $royal_p) {
    $sum += 1;
    }
    }

    echo $sum . "\n";
    উদাহরন ৫ঃ
    প্রব্লেম লিংকঃ Beautiful Matrix (http://codeforces.com/problemset/problem/263/A)
    Input
    The input consists of five lines, each line contains five integers: the j-th integer in the i-th line of the input represents the element of the matrix that is located on the intersection of the i-th row and the j-th column. It is guaranteed that the matrix consists of 24 zeroes and a single number one.
    Output
    Print a single integer — the minimum number of moves needed to make the matrix beautiful.
    সতর্কতাঃ এখানে কিভাবে একটি ৫ x ৫ ম্যাট্রিক্সের ইনপুট নিতে হবে সেটা লক্ষ্য রাখা জরুরী।
    সলিউশনঃ
    <?php

    error_reporting(0);
    $stdin = fopen("php://stdin", "r");
    $arr = array();
    $res = 0;

    for ($i = 0; $i <= 4; $i++) {
    fscanf($stdin, "%[^\n]", $arr_temp);
    $arr[] = array_map('intval', preg_split('/ /', $arr_temp, -1, PREG_SPLIT_NO_EMPTY));
    }

    for ($i = 0; $i <= 4; $i++) {
    for ($j = 0; $j <= 4; $j++) {
    if ($i == 0 && $j == 0) {
    if ($arr[$i][$j] == 1) {
    $res = 4;
    } else {
    $res = 0;
    }
    } else if ($arr[$i][$j] == 1) {
    $res = abs($i - 2) + abs($j - 2);
    }
    }
    }
    echo $res . "\n";
    fclose($stdin);
    কারও বেসিক PHP জানা থাকলে ও এর পর এই পাচটা প্রব্লেম বুঝে বুঝে সলভ করলে কিভাবে PHP তে প্রোব্লেম সল্ভিংয়ের এপ্রোচ করতে হয় তা ক্লিয়ার হওয়ার কথা। প্রব্লেম স্টেটমেন্ট গুলো একাধিকবার বুঝে পড়ে, সঠিক ইনপুট ও আউটপুট স্ট্রাকচার ফলো করে সঠিক লজিক লিখে প্রোগ্রাম ৫ টি প্রাকটিস করলে আর ফিরে তাকাতে হবে না আশা করি। প্রোগ্রামে ব্যাবহার করা কোন ফাংশন কিভাবে কাজ করে তা জানতে PHP ডকুমেন্টেশন/ম্যানুয়ালে গিয়ে বিস্তারিত স্ট্রাকচার ও ব্যাবহার জেনে নিতে হবে। একই ভাবে ভবিষ্যতে পরের প্রব্লেম গুলো সলভ করতে গিয়ে প্রব্লেমে পরলে ডকুমেন্টেশন ফলো করে আগাতে হবে। ও পিএইচপিতে কোড করার বিভিন্ন এপ্রোচ, টেকনিক জানতে নিয়মিত বিভিন্ন বই ও আর্টিকেল পড়তে হবে।

    সব থেকে গুরুত্বপূর্ণ হলঃ ডাটা স্ট্রাকচার ও এলগরিদমের উপর ভালো দখল নিয়ে আসতে হবে আমাদের। ও সেগুলো ইমপ্লিমেন্ট করে প্রব্লেম সল্ভ করার চেষ্টা করতে হবে। ইউজ কেইস খুজতে হবে, ইউজ কেইস বুঝতে হবে সেগুলোর।

    শ্রদ্ধেয় মিজানুর রহমান ভাই পিএইচপি দিয়ে ডাটা স্ট্রাকচার ও এলগরিদম শেখার জন্য একটা সুন্দর বই লিখেছেন PHP 7 Data Structures and Algorithms by Mizanur Rahman (ইংরেজী ভার্সন) নামে। এই বইটা খুবই উপকারী হতে পারে আপনার আমার ক্যারিয়ারের জন্য। স্কিল ইনহ্যান্সমেন্টের জন্য। আজই সংগ্রহ করে কাছে রেখে প্রাকটিস করা শুরু করতে পারেন। এখানে প্রায় সব গুরুত্বপূর্ণ ডাটাস্ট্রাকচার ও এলগরিদম নিয়ে আলোচনা করেছেন ভাইয়া। স্টাক, কিউ, লিংড-লিস্ট, বিভিন্ন টাইপের সর্টিং ও সার্চিং, গ্রাফ, ট্রি, ইত্যাদি ইত্যাদি। শুধু তাই নয় Big O Notation ইউজ করে এলগরিদমের এফিশিয়েন্সি মেজার করাও শিখিয়েছেন। PHP এর এরে যে কত শক্তিশালী আর ইউজফুল একটা জিনিস সেটাও দেখিয়েছেন। ইত্যাদি ।

    এর বাইরে PHP in Action বইটা ও W3Schools এর PHP সেকশনটাও দেখতে পারেন। ওখানে স্ট্রিং, ও এরে রিলেটেড ফাংশন গুলো সুন্দর করে উদাহরন সহ দেয়া আছে বেসিক জিনিস গুলোর পাশাপাশি। আর সব থেকে উপকারি হল ডকুমেন্টেশন, ডকুমেন্টেশন ঘেটে কোন কিছু বের করা শিখতে হবে আমাদের।
    [ বিগিনার লেভেল তাই ব্রুটফোর্স এপ্রোচে সলভিং করা হয়েছে। কোন ভুল হলে ধরিয়ে দিবেন আশা করি। প্রব্লেম গুলো অন্য কোন সহজ উপায়ে করা যেতে পারতো হয়তঃ, অপ্টিমাইজেশনের ব্যাপার সেপারও ছিলো। কিন্তু আমি শুধুমাত্র শুরুটা কিভাবে করবো আমরা সেটা বলার চেষ্টা করেছি। কারও উপকার হয়ে থাকলে ভবিষ্যতে PHP দিয়ে প্রব্লেম সল্ভিং নিয়ে ধারাবাহিক লেখা লিখতে চাই। আপনার মতামত দিয়ে সাহায্য করুন। ধন্যবাদ। বিঃদ্রঃ এখানে বলা বইয়ের নাম, ওয়েবসাইটের নাম গুলো নিজের একান্ত ভালোলাগা থেকে বলা, কেউ আমাকে কোন টাকা পয়সা দেয় নি তাদের ওয়েবসাইট বা বইয়ের নাম বলার জন্য। উপকারি মনে হয়েছে তাই বলা। আবারো ধন্যবাদ। ]
    PHP দিয়ে প্রব্লেম সল্ভিং, কম্পিটিটিভ প্রোগ্রামিং এর শুরু SUNWARUL ISLAM·FRIDAY, MAY 1, 2020· এই লেখায় ‘প্রব্লেম সল্ভিং’, ‘কম্পিটিটিভ প্রোগ্রামিং’ কি এবং কিভাবে PHP ল্যাঙ্গুয়েজ ব্যবহার করে আমরা ‘কম্পিটিটিভ প্রোগ্রামিং’ বা ‘প্রব্লেম সল্ভিং’ -এর যাত্রা শুরু করতে পারি তা নিয়ে একটু আলোচনা করার চেষ্টা করেছি। আমরা অনেকেই আছি যারা বিভিন্ন যায়গা থেকে একটু-আধটু PHP শিখেছি এবং টুকটাক ডেভেলপমেন্ট করি সেই PHP দিয়ে। হয়তঃ অল্প সল্প ফ্রেমওয়ার্কও শিখে গেছি এত দিনে। তবে আমাদের অনেকেরই প্রোগ্রামিংয়ের বেসিকটা তেমন স্ট্রং নয়। সব সময় এটা নিয়ে দুশ্চিন্তাও হয় অনেকের।আমরা যারা অলরেডি PHP ইউজ করা শুরু করে দিয়েছি এবং হয়ত ক্যারিয়ারও শুরু করেছি PHP -তে তবে পাশাপাশি বেজ-টা আরো স্ট্রং করার কথা মাথায় আসে সব সময়, তাদের জন্য সময় বের করে প্রতিদিন PHP দিয়ে অনলাইন জাজ গুলোয় প্রব্লেম সল্ভিং প্রাকটিস করা ও রেগুলার কন্টেস্টে পার্টিসিপেট করা অনেক কার্যকরি হতে পারে। PHP এর স্কিল বাড়ানোর উপায় হিসেবেও নেয়া যেতে পারে এটা। পাশাপাশি লজিক-ও। এই প্রাকটিস করা, কন্টেস্ট করা গুলো জব প্রিপারেশনেও কাজে দেবে আমাদের। প্রব্লেম সল্ভিং, বা কম্পিটিটিভ প্রোগ্রামিংয়ে আমাদের খুব কম সময়ে, কম রিসোর্স (টাইম, মেমোরি) ব্যাবহার করে একটা প্রব্লেমের সলিউশন বের করতে হয়। এখানে এমনভাবে একটা সলিউশন লিখতে হয় যেখানে সাধারনত কিছু ইনপুটের বিপরীতে আমাদের প্রোগ্রামটা সঠিক এক্সপেক্টেড সলিউশনটি দিচ্ছে কি না তা চেক করা হয়ে থাকে। এদের প্রত্যেকটিকে টেস্ট কেস বলা হয়ে থাকে। প্রতিটি টেস্ট কেসের জন্য সঠিক উত্তর দিলে তবেই ‘জাজ’ আমাদের প্রোগ্রামটিকে ‘সঠিক’ হিসেবে চিহ্নিত করে Accepted (AC) থাকে। উত্তর না মিললে Wrong Answer (WA), বেশি সময় নিয়ে ফেললে Time limit exceeded (TLE) এরকম বিভিন্ন টাইপের মেসেজ (Verdict) দেয়। শুরুতে বিভিন্ন ধরনের ইনপুট নেয়া ও সঠিক ভাবে আউটপুট দেখানোটা চ্যালেঞ্জিং মনে হবে আমাদের কাছে। পরে, ইনপুট ও আউটপুটের ব্যাপারে অভ্যস্থ হয়ে গেলে ও বেসিক প্রব্লেম গুলো সল্ভ করতে পারলে পরে ধাপে ধাপে বিভিন্ন থিওরি, ডাটা-স্ট্রাকচার, ও এলগরিদম শিখে ইমপ্লিমেন্ট করে করে প্রব্লেম সলভিং শিখতে হবে। আমি এখানে এই শুরুটা কিভাবে করা যায় PHP ব্যাবহার করে, সেটা দেখানোর চেষ্টা করব। PHP দিয়ে প্রব্লেম সল্ভিং করার অনেক সাইট আছে যেমনঃ Codeforces, HackerRank, ইত্যাদি । যারা নতুন তারা Codeforces এর লিংকে গিয়ে ফ্রি একাউন্ট ক্রিয়েট করে নিন। এর পর Problem Set -এ গিয়ে Descending Order -এ সলভ করা শুরু করে দিতে পারেন। তাহলে সহজ থেকে কঠিন ক্রমে প্রব্লেম গুলো আসবে (সব চেয়ে বেশি সল্ভ করার ভিত্তিতে সম্ভবত)। শুরুতে যে প্রব্লেমটা আসবে সেটা PHP তে ইমপ্লিমেন্ট করা যাক। উদাহরন-১ঃ প্রব্লেম লিঙ্ক এখানে A. Watermelon (http://codeforces.com/problemset/problem/4/A) প্রব্লেম স্টেটমেন্টটি পড়লে বোঝা যাবে যে এখানে আমাদের একটা ইনপুট নিতে হবে (তরমুজের ওজন) এবং সেটা যদি দুই ভাগে ভাগ করা যায় এবং তা জোড় সংখ্যা হয় তাহলে “YES” প্রিন্ট করতে হবে অথবা “NO” প্রিন্ট করতে হবে। স্টান্ডার্ড ইনপুট নিতে আমরা বিভিন্ন ফাংশন ইউজ করতে পারি যেমনঃ Way-1: Take $n as standard input $std = fopen("php://stdin", "r"); fscanf($std, "%d", $n); Way-1: fscanf(STDIN, "%d", $n); Way-3: Take $n as standard input and trim, convert to integers $n = fgets(STDIN); $n = trim(fgets(STDIN)); $n = (int) fgets(STDIN); Etc. Depends on your datatype. To get type of the variable $n you can use gettype($n) function. আউটপুট দেখাতে বিভিন্ন ফাংশন ইউজ হয়, যেমনঃ echo "Hello"; Or, print("Hello"); Or, fwrite(STDOUT, "Hello"); Etc তাহলে আমাদের প্রব্লেম অনুযায়ী ইনপুট, লজিক ও আউটপুট সহ পুরো সলিউশনটি লিখে ফেলা যাকঃ <?php $stdin = fopen("php://stdin", "r"); fscanf($stdin, "%d", $x); if ($x % 2 == 0 && $x != 2) { echo "YES\n"; } else { echo "NO\n"; } fclose($stdin); এখন, প্রব্লেমের সাবমিট কোড (Submit Code) ট্যাবে গিয়ে প্রব্লেম নাম্বার ও ল্যাঙ্গুয়েজে PHP সিলেক্ট করে এই সলিউশনটি পেস্ট করে বা ফাইলটি আপলোড করে নিচের Submit বাটনে ক্লিক করলেই চেক করা শুরু হয়ে যাবে। এর পর স্টাটাস, মাই-সাবমিশন্স ইত্যাদি দেখতে পারেন। আপনার ভার্ডিক্টটি দেখতে পারেন। যদি কোন প্রব্লেম হয়, তাহলে প্রব্লেমটা কোন টেস্ট কেসে গিয়ে হচ্ছে সেটা দেখুন এবং এক্সপেক্টেড আউটপুট না আসলে কেন আসলো না সেটা নিয়ে ভাবুন। সে অনুযায়ী ডিবাগ করুন আপনার কোড। উদাহরন২ঃ A. Theatre Square (http://codeforces.com/problemset/problem/1/A) ইনপুটঃ এক লাইনে ৩ টা ইনপুট থাকবে আউটপুটঃ কয়টা ‘ফ্লাগ-স্টোন’ লাগবে সেটা ক্যালকুলেট করে প্রিন্ট করতে হবে। সতর্কতাঃ আউটপুটে অনেক বড় ডিজিট চলে আসতে পারে। ইন্টিজার ওভারফ্লো বা ইন্টিজার টাইপের চেয়ে বড় উত্তর আসলে কি হবে সেটা মাথায় রাখতে হবে। এখানে bcmul() ফাংশনটার উদ্দেশ্য বোঝার চেষ্টা করতে হবে। কিভাবে BigInteger হ্যান্ডেল করতে হয় PHP তে সেটা পিএইচপি ডকুমেন্টেশন ও গুগল করে বুঝে নিতে হবে। intval() দিয়ে আমরা ইন্টিজারে কনভার্ট করতে পারি। ফাইনাল সলিউশনঃ <?php $stdin = fopen("php://stdin", "r"); fscanf($stdin, "%d %d %d", $n, $m, $a); $x = $n / $a; $x = intval($x); if ($n % $a) { ++$x; } $y = $m / $a; $y = intval($y); if ($m % $a) { ++$y; } echo bcmul($x, $y); fclose($stdin); উদাহরন৩ঃ প্রব্লেম লিংকঃ A. Way Too Long Words (http://codeforces.com/problemset/problem/71/A) সতর্কতাঃ PHP তে স্ট্রিং কি, এর বিভিন্ন প্রোপার্টি কিভাবে কাজ করে তা লক্ষ রাখতে হবে ও প্রয়োজনীয় মেথড গুলো সঠিক ভাবে ইউজ করতে জানতে হবে। Input The first line contains an integer n (1 ≤ n ≤ 100). Each of the following n lines contains one word. All the words consist of lowercase Latin letters and possess the lengths of from 1 to 100 characters. Output Print n lines. The i-th line should contain the result of replacing of the i-th word from the input data. Solution: <?php $stdin = fopen("php://stdin", "r"); fscanf($stdin, "%d", $n); for ($i = 0; $i < $n; $i++) { fscanf($stdin, "%s", $s); if (strlen($s) > 10) { echo $s[0] . (strlen($s) - 2) . $s[strlen($s) - 1] . "\n"; } else { echo $s . "\n"; } } উদাহরন৪ঃ প্রব্লেম লিংকঃ Next Round (http://codeforces.com/problemset/problem/158/A) Input The first line of the input contains two integers n and k (1 ≤ k ≤ n ≤ 50) separated by a single space. The second line contains n space-separated integers (এরে) a1, a2, ..., an (0 ≤ ai ≤ 100), where ai is the score earned by the participant who got the i-th place. The given sequence is non-increasing (that is, for all i from 1 to n - 1 the following condition is fulfilled: ai ≥ ai + 1). Output Output the number of participants who advance to the next round. সতর্কতাঃ এখানে কিভাবে এরে ইনপুট নিতে হয় এবং প্রয়োজনে তার সব এলিমেন্টের টাইপ চেঞ্জ করে নিতে হয় সেটা জানা জরুরি। সলিউশনঃ <?php $stdin = fopen("php://stdin", "r"); fscanf($stdin, "%d %d", $n, $k); fscanf($stdin, "%[^\n]", $arr); $arr = array_map('intval', preg_split("/ /", $arr, -1, PREG_SPLIT_NO_EMPTY)); $royal_p = $arr[$k - 1]; $sum = 0; for ($i = 0; $i < $n; $i++) { if ($arr[$i] != 0 && $arr[$i] >= $royal_p) { $sum += 1; } } echo $sum . "\n"; উদাহরন ৫ঃ প্রব্লেম লিংকঃ Beautiful Matrix (http://codeforces.com/problemset/problem/263/A) Input The input consists of five lines, each line contains five integers: the j-th integer in the i-th line of the input represents the element of the matrix that is located on the intersection of the i-th row and the j-th column. It is guaranteed that the matrix consists of 24 zeroes and a single number one. Output Print a single integer — the minimum number of moves needed to make the matrix beautiful. সতর্কতাঃ এখানে কিভাবে একটি ৫ x ৫ ম্যাট্রিক্সের ইনপুট নিতে হবে সেটা লক্ষ্য রাখা জরুরী। সলিউশনঃ <?php error_reporting(0); $stdin = fopen("php://stdin", "r"); $arr = array(); $res = 0; for ($i = 0; $i <= 4; $i++) { fscanf($stdin, "%[^\n]", $arr_temp); $arr[] = array_map('intval', preg_split('/ /', $arr_temp, -1, PREG_SPLIT_NO_EMPTY)); } for ($i = 0; $i <= 4; $i++) { for ($j = 0; $j <= 4; $j++) { if ($i == 0 && $j == 0) { if ($arr[$i][$j] == 1) { $res = 4; } else { $res = 0; } } else if ($arr[$i][$j] == 1) { $res = abs($i - 2) + abs($j - 2); } } } echo $res . "\n"; fclose($stdin); কারও বেসিক PHP জানা থাকলে ও এর পর এই পাচটা প্রব্লেম বুঝে বুঝে সলভ করলে কিভাবে PHP তে প্রোব্লেম সল্ভিংয়ের এপ্রোচ করতে হয় তা ক্লিয়ার হওয়ার কথা। প্রব্লেম স্টেটমেন্ট গুলো একাধিকবার বুঝে পড়ে, সঠিক ইনপুট ও আউটপুট স্ট্রাকচার ফলো করে সঠিক লজিক লিখে প্রোগ্রাম ৫ টি প্রাকটিস করলে আর ফিরে তাকাতে হবে না আশা করি। প্রোগ্রামে ব্যাবহার করা কোন ফাংশন কিভাবে কাজ করে তা জানতে PHP ডকুমেন্টেশন/ম্যানুয়ালে গিয়ে বিস্তারিত স্ট্রাকচার ও ব্যাবহার জেনে নিতে হবে। একই ভাবে ভবিষ্যতে পরের প্রব্লেম গুলো সলভ করতে গিয়ে প্রব্লেমে পরলে ডকুমেন্টেশন ফলো করে আগাতে হবে। ও পিএইচপিতে কোড করার বিভিন্ন এপ্রোচ, টেকনিক জানতে নিয়মিত বিভিন্ন বই ও আর্টিকেল পড়তে হবে। সব থেকে গুরুত্বপূর্ণ হলঃ ডাটা স্ট্রাকচার ও এলগরিদমের উপর ভালো দখল নিয়ে আসতে হবে আমাদের। ও সেগুলো ইমপ্লিমেন্ট করে প্রব্লেম সল্ভ করার চেষ্টা করতে হবে। ইউজ কেইস খুজতে হবে, ইউজ কেইস বুঝতে হবে সেগুলোর। শ্রদ্ধেয় মিজানুর রহমান ভাই পিএইচপি দিয়ে ডাটা স্ট্রাকচার ও এলগরিদম শেখার জন্য একটা সুন্দর বই লিখেছেন PHP 7 Data Structures and Algorithms by Mizanur Rahman (ইংরেজী ভার্সন) নামে। এই বইটা খুবই উপকারী হতে পারে আপনার আমার ক্যারিয়ারের জন্য। স্কিল ইনহ্যান্সমেন্টের জন্য। আজই সংগ্রহ করে কাছে রেখে প্রাকটিস করা শুরু করতে পারেন। এখানে প্রায় সব গুরুত্বপূর্ণ ডাটাস্ট্রাকচার ও এলগরিদম নিয়ে আলোচনা করেছেন ভাইয়া। স্টাক, কিউ, লিংড-লিস্ট, বিভিন্ন টাইপের সর্টিং ও সার্চিং, গ্রাফ, ট্রি, ইত্যাদি ইত্যাদি। শুধু তাই নয় Big O Notation ইউজ করে এলগরিদমের এফিশিয়েন্সি মেজার করাও শিখিয়েছেন। PHP এর এরে যে কত শক্তিশালী আর ইউজফুল একটা জিনিস সেটাও দেখিয়েছেন। ইত্যাদি । এর বাইরে PHP in Action বইটা ও W3Schools এর PHP সেকশনটাও দেখতে পারেন। ওখানে স্ট্রিং, ও এরে রিলেটেড ফাংশন গুলো সুন্দর করে উদাহরন সহ দেয়া আছে বেসিক জিনিস গুলোর পাশাপাশি। আর সব থেকে উপকারি হল ডকুমেন্টেশন, ডকুমেন্টেশন ঘেটে কোন কিছু বের করা শিখতে হবে আমাদের। [ বিগিনার লেভেল তাই ব্রুটফোর্স এপ্রোচে সলভিং করা হয়েছে। কোন ভুল হলে ধরিয়ে দিবেন আশা করি। প্রব্লেম গুলো অন্য কোন সহজ উপায়ে করা যেতে পারতো হয়তঃ, অপ্টিমাইজেশনের ব্যাপার সেপারও ছিলো। কিন্তু আমি শুধুমাত্র শুরুটা কিভাবে করবো আমরা সেটা বলার চেষ্টা করেছি। কারও উপকার হয়ে থাকলে ভবিষ্যতে PHP দিয়ে প্রব্লেম সল্ভিং নিয়ে ধারাবাহিক লেখা লিখতে চাই। আপনার মতামত দিয়ে সাহায্য করুন। ধন্যবাদ। বিঃদ্রঃ এখানে বলা বইয়ের নাম, ওয়েবসাইটের নাম গুলো নিজের একান্ত ভালোলাগা থেকে বলা, কেউ আমাকে কোন টাকা পয়সা দেয় নি তাদের ওয়েবসাইট বা বইয়ের নাম বলার জন্য। উপকারি মনে হয়েছে তাই বলা। আবারো ধন্যবাদ। ]
    Problem - 4A - Codeforces
    Codeforces. Programming competitions and contests, programming community
    CODEFORCES.COM
    1
    0 Comments 0 Shares
  • PHP দিয়ে প্রব্লেম সল্ভিং, কম্পিটিটিভ প্রোগ্রামিং এর শুরু
    এই লেখায় ‘প্রব্লেম সল্ভিং’, ‘কম্পিটিটিভ প্রোগ্রামিং’ কি এবং কিভাবে PHP ল্যাঙ্গুয়েজ ব্যবহার করে আমরা ‘কম্পিটিটিভ প্রোগ্রামিং’ বা ‘প্রব্লেম সল্ভিং’ -এর যাত্রা শুরু করতে পারি তা নিয়ে একটু আলোচনা করার চেষ্টা করেছি। আমরা অনেকেই আছি যারা বিভিন্ন যায়গা থেকে একটু-আধটু PHP শিখেছি এবং টুকটাক ডেভেলপমেন্ট করি সেই PHP দিয়ে। হয়তঃ অল্প সল্প ফ্রেমওয়ার্কও শিখে...
    1
    0 Comments 0 Shares
  • সিঙ্গুলারিটি, সময় ও রহস্য
      ভর যদি স্থানকালকে দুমড়ে মুচড়ে দিয়ে সময়কে ধীর করতে পারে, তবে ব্ল্যাকহোলের কেন্দ্রে থাকা সিঙ্গুলারিটি, যা স্থানকালকে অসীমভাবে দুমড়ে-মুচড়ে দেয়, সেটি কি আসলে সময়কে থামিয়ে দেয়, বা ফ্রীজ করে দেয়? সিঙ্গুলারিটি হল এমন একটা বিন্দু যেখানে পদার্থবিদ্যার প্রচলিত সমস্ত তত্ত্ব ভেঙে পড়ে। এই বিন্দুটি পাওয়া যায় কৃষ্ণগহ্বরে। বিশাল ভরের একটা নক্ষত্র মৃত্যুর পর তার সমস্ত ভর সংকুচিত হয়ে একটি মাত্র বিন্দুতে...
    1
    0 Comments 0 Shares
  • তো, আপনি সফটওয়ার ইঞ্জিনিয়ার হতে চান?
    বিস্তারিত লেখার আগে টেক ইন্ডাস্ট্রির বর্তমান ট্রেন্ডিং কিছু ভূল ধারনা ও কুসংস্কার নিয়ে কথা বলা প্রয়োজন। ১। আমরা অনেক জনগণ এখনও মনে করি, সিএসই ও শুধুমাত্র সিএসই না পড়লে মনে হয় কেউ সফটওয়ার ইঞ্জিনিয়ার হতে পারবো না। সম্ভব না। আবার কেউ যদি ইইই পড়ি, তাহলে তাকে শুধু রোবটিক্স বা পাওয়ার নিয়েই কাজ করা সাজে, অন্য কিছু নয়। সিএসই নিয়ে পড়লে তারও সফটওয়ার ইঞ্জিনিয়ার হওয়ার ছাড়া আর কোন কিছু করার নাই। কারন সে...
    1
    0 Comments 0 Shares
  • 1
    6 0 Comments 0 Shares
  • 1
    7 0 Comments 0 Shares
  • 3
    13 0 Comments 1 Shares
  • https://www.youtube.com/watch?v=8_OdluA597k&list=RD8_OdluA597k&index=1
    https://www.youtube.com/watch?v=8_OdluA597k&list=RD8_OdluA597k&index=1
    1
    0 Comments 0 Shares
  • 2
    0 Comments 0 Shares
More Stories