Advertisement
eysballie

interview2

Jan 24th, 2022
927
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. public class transfers {
  9.     public static List<String> transferBalances(List<String> balances) {
  10.         Map<Character, Integer> map = new HashMap<>();
  11.         for (String balance: balances) {
  12.             char sourceBank = balance.charAt(0);
  13.             char destBank = balance.charAt(1);
  14.             int amount = Integer.parseInt(balance.substring(2));
  15.             map.put(sourceBank, map.getOrDefault(sourceBank, 0) - amount);
  16.             map.put(destBank, map.getOrDefault(destBank, 0) + amount);
  17.         }
  18.        
  19.         char initialCentralBank = balances.get(0).charAt(0);
  20.         char centralBank = selectCentralBank(map, initialCentralBank);
  21.         List<String> res = new ArrayList<>();
  22.         for (Map.Entry<Character, Integer> entry: map.entrySet()) {
  23.             if (entry.getKey() == centralBank) {
  24.                 continue;
  25.             }
  26.            
  27.             StringBuilder sb = new StringBuilder();
  28.             if (entry.getValue() < 0) {
  29.                 sb.append(entry.getKey()).append(centralBank).append(-1 * entry.getValue());
  30.             } else if (entry.getValue() > 0) {
  31.                 sb.append(centralBank).append(entry.getKey()).append(entry.getValue());
  32.             }
  33.             res.add(sb.toString());
  34.         }
  35.         return res;
  36.     }
  37.    
  38.     public static char selectCentralBank(Map<Character, Integer> map, char initialCentralBank) {
  39.         char res = initialCentralBank;
  40.         int maxAbsAmount = map.get(initialCentralBank);
  41.         for (Map.Entry<Character, Integer> entry: map.entrySet()) {
  42.             if (Math.abs(entry.getValue()) >  maxAbsAmount) {
  43.                 maxAbsAmount = Math.abs(entry.getValue());
  44.                 res = entry.getKey();
  45.             }
  46.         }
  47.         return res;
  48.     }
  49.    
  50.     public static void main(String[] args) {
  51.         List<String> balances = new ArrayList<>();
  52.         balances.add("AB1");
  53.         balances.add("BC1"); // AC1 XY1
  54.         balances.add("XY1");
  55. //      balances.add("DC1");  // DC1
  56. //      balances.add("BC100"); // A0 B0 C0
  57.         List<String> res = transferBalances(balances);
  58.         for (String val: res) {
  59.             System.out.println(val); // AB10    AC10000
  60.         }
  61.     }
  62. }
  63.  
Advertisement
Advertisement
Advertisement
RAW Paste Data Copied
Advertisement