Advertisement
eysballie

Untitled

Mar 1st, 2022
1,306
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.04 KB | None | 0 0
  1. package solutions;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7.  
  8. class BankInfo {
  9.     String name;
  10.     int interval;
  11.    
  12.     public BankInfo(String name, int interval) {
  13.         this.name = name;
  14.        
  15.         this.interval = interval;
  16.     }
  17. }
  18.  
  19. class Window {
  20.     int start;
  21.     int end;
  22.    
  23.     public Window(int start, int end) {
  24.         this.start = start;
  25.         this.end = end;
  26.     }
  27. }
  28.  
  29. public class bank1 {
  30.     Map<BankInfo, List<String>> banks;
  31.     Map<String, List<Window>> mantainence;
  32.    
  33.     public bank1() {
  34.         banks = new HashMap<>();
  35.         mantainence = new HashMap<>();
  36.     }
  37.    
  38.     public void add_bank(String bank, List<String> accounts, int interval) {
  39.         BankInfo bankInfo = new BankInfo(bank, interval);
  40.         this.banks.put(bankInfo, accounts);
  41.     }
  42.    
  43.     public Map<String, List<String>> get_accounts_to_update(int interval) {
  44.         Map<String, List<String>> res = new HashMap<>();
  45.         for (Map.Entry<BankInfo, List<String>> entry: banks.entrySet()) {
  46.             if (interval % entry.getKey().interval == 0) {
  47.                 res.put(entry.getKey().name, entry.getValue());
  48.             }
  49.         }
  50.         return res;
  51.     }
  52.    
  53.     // [1,2,3]  interval=3,
  54.     //    i
  55.     // T=6-2=4 4%3=1
  56.     public Map<String, List<String>> get_accounts_to_update_2(int timeStamp) {
  57.         Map<String, List<String>> res = new HashMap<>();
  58.         for (Map.Entry<BankInfo, List<String>> entry: banks.entrySet()) {
  59.             String name = entry.getKey().name;
  60.             int interval = entry.getKey().interval;
  61.             List<String> accounts = entry.getValue();
  62.             List<String> resAccounts = new ArrayList<>();
  63.             // check if timeStamp is in window, if so return empty map
  64.             for (int i = 0; i < accounts.size(); i++) {
  65.                 if (i % interval == timeStamp % interval) {
  66.                     resAccounts.add(accounts.get(i));
  67.                 }
  68.             }
  69.             res.put(name,  resAccounts);
  70.         }
  71.         return res;
  72.     }
  73.    
  74.     public void create_maintenance_window(String bank, int start, int end) {
  75.         Window window = new Window(start, end);
  76.         List<Window> windowList= mantainence.get(bank);
  77.         if (windowList == null) {
  78.             windowList = new ArrayList<>();
  79.         }
  80.         windowList.add(window);
  81.         mantainence.put(bank, windowList);
  82.     }
  83.    
  84.     public Map<String, List<String>> get_accounts_to_update_3(int timeStamp) {
  85.         Map<String, List<String>> res = new HashMap<>();
  86.         for (Map.Entry<BankInfo, List<String>> entry: banks.entrySet()) {
  87.             String name = entry.getKey().name;
  88.             int interval = entry.getKey().interval;
  89.             List<String> accounts = entry.getValue();
  90.             List<String> resAccounts = new ArrayList<>();
  91.            
  92.             List<Window> windowList = mantainence.get(name);
  93.             // sort in ascending order
  94.             boolean shouldStop = false;
  95.             int pastWindowTime = 0;
  96.             for (Window currWindow: windowList) {
  97.                 if (timeStamp >= currWindow.start && timeStamp <= currWindow.end) {
  98.                     shouldStop = true;
  99.                     break;
  100.                 } else if (timeStamp > currWindow.end) {
  101.                     pastWindowTime += currWindow.end - currWindow.start + 1;
  102.                 }
  103.             }
  104.             if (shouldStop) {
  105.                 return new HashMap<>();
  106.             }
  107.  
  108.             for (int i = 0; i < accounts.size(); i++) {
  109.                 if (i % interval == (timeStamp - pastWindowTime) % interval) {
  110.                     resAccounts.add(accounts.get(i));
  111.                 }
  112.             }
  113.             res.put(name,  resAccounts);
  114.         }
  115.         return res;
  116.     }
  117.    
  118.     public static void main(String[] args) {
  119.         bank1 testBank = new bank1();
  120.         List<String> chaseAccounts = new ArrayList<>();
  121.         chaseAccounts.add("username_1");
  122.         chaseAccounts.add("username_2");
  123.         chaseAccounts.add("username_3");
  124. //      chaseAccounts.add("username_4");
  125. //      chaseAccounts.add("username_5");
  126.         testBank.add_bank("Chase", chaseAccounts, 3);
  127. //      List<String> wellsFargoAccounts = new ArrayList<>();
  128. //      wellsFargoAccounts.add("username_3");
  129. //      testBank.add_bank("Wells Fargo", wellsFargoAccounts, 20);
  130.        
  131.         testBank.create_maintenance_window("Chase", 4, 5);
  132.         testBank.create_maintenance_window("Chase", 7, 7);
  133.        
  134.         Map<String, List<String>> res1 = testBank.get_accounts_to_update_3(8);
  135.         for (Map.Entry<String, List<String>> entry: res1.entrySet()) {
  136.             System.out.println(entry.getKey());
  137.             for (String ele: entry.getValue()) {
  138.                 System.out.println(ele);
  139.             }
  140.         }
  141.        
  142.     }
  143. }
  144.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement