Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package solutions;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- class BankInfo {
- String name;
- int interval;
- public BankInfo(String name, int interval) {
- this.name = name;
- this.interval = interval;
- }
- }
- class Window {
- int start;
- int end;
- public Window(int start, int end) {
- this.start = start;
- this.end = end;
- }
- }
- public class bank1 {
- Map<BankInfo, List<String>> banks;
- Map<String, List<Window>> mantainence;
- public bank1() {
- banks = new HashMap<>();
- mantainence = new HashMap<>();
- }
- public void add_bank(String bank, List<String> accounts, int interval) {
- BankInfo bankInfo = new BankInfo(bank, interval);
- this.banks.put(bankInfo, accounts);
- }
- public Map<String, List<String>> get_accounts_to_update(int interval) {
- Map<String, List<String>> res = new HashMap<>();
- for (Map.Entry<BankInfo, List<String>> entry: banks.entrySet()) {
- if (interval % entry.getKey().interval == 0) {
- res.put(entry.getKey().name, entry.getValue());
- }
- }
- return res;
- }
- // [1,2,3] interval=3,
- // i
- // T=6-2=4 4%3=1
- public Map<String, List<String>> get_accounts_to_update_2(int timeStamp) {
- Map<String, List<String>> res = new HashMap<>();
- for (Map.Entry<BankInfo, List<String>> entry: banks.entrySet()) {
- String name = entry.getKey().name;
- int interval = entry.getKey().interval;
- List<String> accounts = entry.getValue();
- List<String> resAccounts = new ArrayList<>();
- // check if timeStamp is in window, if so return empty map
- for (int i = 0; i < accounts.size(); i++) {
- if (i % interval == timeStamp % interval) {
- resAccounts.add(accounts.get(i));
- }
- }
- res.put(name, resAccounts);
- }
- return res;
- }
- public void create_maintenance_window(String bank, int start, int end) {
- Window window = new Window(start, end);
- List<Window> windowList= mantainence.get(bank);
- if (windowList == null) {
- windowList = new ArrayList<>();
- }
- windowList.add(window);
- mantainence.put(bank, windowList);
- }
- public Map<String, List<String>> get_accounts_to_update_3(int timeStamp) {
- Map<String, List<String>> res = new HashMap<>();
- for (Map.Entry<BankInfo, List<String>> entry: banks.entrySet()) {
- String name = entry.getKey().name;
- int interval = entry.getKey().interval;
- List<String> accounts = entry.getValue();
- List<String> resAccounts = new ArrayList<>();
- List<Window> windowList = mantainence.get(name);
- // sort in ascending order
- boolean shouldStop = false;
- int pastWindowTime = 0;
- for (Window currWindow: windowList) {
- if (timeStamp >= currWindow.start && timeStamp <= currWindow.end) {
- shouldStop = true;
- break;
- } else if (timeStamp > currWindow.end) {
- pastWindowTime += currWindow.end - currWindow.start + 1;
- }
- }
- if (shouldStop) {
- return new HashMap<>();
- }
- for (int i = 0; i < accounts.size(); i++) {
- if (i % interval == (timeStamp - pastWindowTime) % interval) {
- resAccounts.add(accounts.get(i));
- }
- }
- res.put(name, resAccounts);
- }
- return res;
- }
- public static void main(String[] args) {
- bank1 testBank = new bank1();
- List<String> chaseAccounts = new ArrayList<>();
- chaseAccounts.add("username_1");
- chaseAccounts.add("username_2");
- chaseAccounts.add("username_3");
- // chaseAccounts.add("username_4");
- // chaseAccounts.add("username_5");
- testBank.add_bank("Chase", chaseAccounts, 3);
- // List<String> wellsFargoAccounts = new ArrayList<>();
- // wellsFargoAccounts.add("username_3");
- // testBank.add_bank("Wells Fargo", wellsFargoAccounts, 20);
- testBank.create_maintenance_window("Chase", 4, 5);
- testBank.create_maintenance_window("Chase", 7, 7);
- Map<String, List<String>> res1 = testBank.get_accounts_to_update_3(8);
- for (Map.Entry<String, List<String>> entry: res1.entrySet()) {
- System.out.println(entry.getKey());
- for (String ele: entry.getValue()) {
- System.out.println(ele);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement