কম্পিউটার টিউটোরিয়াল

C++-এ অবৈধ ট্রানজ্যাকশন শনাক্তকরণ


কিছু ট্রানজ্যাকশন দেওয়া আছে। একটি ট্রানজ্যাকশন সম্ভবত অবৈধ হয় যদি:

  • অ্যামাউন্ট $১০০০-এর বেশি হয়, অথবা
  • একই নামে কিন্তু আলাদা শহরে ৬০ মিনিটের মধ্যে (৬০ মিনিট অন্তর্ভুক্ত) অন্য একটি ট্রানজ্যাকশন ঘটে।

প্রতিটি ট্রানজ্যাকশন স্ট্রিং transactions[i] হলো কমা-সেপারেটেড মান: নাম, সময় (মিনিটে), অ্যামাউন্ট, শহর। ট্রানজ্যাকশনগুলো যেকোনো অবৈধ ট্রানজ্যাকশন বের করুন। উদাহরণ: ["alice,20,800,mtv", "bob,50,1200,mtv"] হলে উত্তর ["bob,50,1200,mtv"]।

সমাধানের ধাপগুলো:

  • s নামের একটি সেট, m নামের একটি ম্যাপ সংজ্ঞায়িত করুন।
  • i = 0 থেকে t.size()-1 পর্যন্ত:
    • x := t[i]
    • temp := x স্ট্রিং থেকে নোড বানান।
    • j = 0 থেকে m[temp.name].size()-1 পর্যন্ত:
      • y := m[temp.name][j]
      • যদি y.city != temp.city এবং |y.time - temp.time| <= 60:
        • y-কে স্ট্রিং হিসেবে s-এ ঢোকান, x-কেও s-এ ঢোকান।
    • যদি temp.amount > 1000, x-কে s-এ ঢোকান।
    • temp-কে m[temp.name]-এ ঢোকান।
  • s-এর আইটেমগুলো ফেরত দিন।

উদাহরণ (C++)

#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){    cout << "[";    for(int i = 0; i<v.size(); i++){       cout << v[i] << ", ";    }    cout << "]"<<endl; } class Node{    public:    string name;    string city;    int time;    int amount; }; class Solution {    public:    Node getNode(string s){       string temp = "";       Node ret;       int cnt = 0;       for(int i = 0; i < s.size(); i++){          if(s[i] == ','){             if(cnt == 0){                ret.name = temp;             }             else if(cnt == 1){                ret.time = stoi(temp);             }             else if(cnt == 2){                ret.amount = stoi(temp);             } else {                ret.city = temp;             }             cnt++;             temp = "";             continue;          }          temp += s[i];       }       ret.city = temp;       return ret;    }    vector<string> invalidTransactions(vector<string>& t) {       set <string >s;       map <string ,vector < Node >> m;       for(int i = 0; i < t.size(); i++){          string x = t[i];          Node temp = getNode(x);          for(int j = 0; j < m[temp.name].size(); j++){             Node y = m[temp.name][j];             if(y.city != temp.city && abs(y.time - temp.time) <= 60){                s.insert(y.name + "," + to_string(y.time) + "," + to_string(y.amount) + "," + y.city);                s.insert(x);             }          }          if(temp.amount > 1000){             s.insert(x);          }          m[temp.name].push_back(temp);       }       vector <string> ret(s.begin(), s.end());       return ret;    } }; main(){    vector<string> v1 = {"alice,20,800,mtv","bob,50,1200,mtv"};    Solution ob;    print_vector(ob.invalidTransactions(v1)); }

ইনপুট

["alice,20,800,mtv","bob,50,1200,mtv"]

আউটপুট

[bob,50,1200,mtv, ]

  1. সি++-এ থ্রেডেড বাইনারি ট্রির ইনঅর্ডার ট্রাভার্সাল

  2. C++-এ O(1) স্পেসে গুণফল অ্যারে পাজল সমাধান

  3. সি++-এ regex_error (রেজেক্স এরর)

  4. C++-এ কম্বিনেশন