Advertisement
desislava_topuzakova

08. Hands Of Cards

Jan 18th, 2022
778
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package SetsAndMapAdvanced_Exercise;
  2.  
  3. import java.util.*;
  4.  
  5. public class HandsOfCards_08 {
  6.     public static void main(String[] args) {
  7.         Scanner scanner = new Scanner(System.in);
  8.         String input = scanner.nextLine();
  9.  
  10.         //име на играча -> списък с карти (картите не трябва да се повтарям)
  11.         Map<String, Set<String>> players = new LinkedHashMap<>();
  12.  
  13.         while (!input.equals("JOKER")) {
  14.             //input = "{personName}: {PT, PT, PT,… PT}".split(": ") -> ["{playerName}", "{cards}"]
  15.             String playerName = input.split(":\\s+")[0]; //"Peter"
  16.             String cards = input.split(":\\s+")[1]; //"2C, 4H, 9H, AS, QS"
  17.             String [] cardsArr = cards.split(", "); //["2C", "4H", "9H", "AS", QS]
  18.             //1. съхраняваме картите в set
  19.             Set<String> cardsSet = new HashSet<>(); //картите на играча
  20.             cardsSet.addAll(Arrays.asList(cardsArr));
  21.  
  22.             //2. добавяне в мап
  23.             //ако не сме го записали
  24.             if (!players.containsKey(playerName)) {
  25.                 players.put(playerName, cardsSet);
  26.             }
  27.             //ако сме го записали
  28.             else {
  29.                 //взимаме до момента картите му и към тях добавяме новите
  30.                 Set<String> currentCards = players.get(playerName);
  31.                 //към текущите карти добавям новите изтеглени
  32.                 currentCards.addAll(cardsSet);
  33.                 players.put(playerName, currentCards);
  34.             }
  35.             input = scanner.nextLine();
  36.         }
  37.  
  38.         //запис: име на играч -> списък с картите
  39.         players.entrySet().forEach(entry -> {
  40.             String name = entry.getKey();
  41.             Set<String> cards = entry.getValue();
  42.             int points = getCardsPoints(cards);
  43.             System.out.printf("%s: %d%n", name, points);
  44.         });
  45.     }
  46.  
  47.     private static int getCardsPoints(Set<String> cards) {
  48.         //всяка един символ -> стойност
  49.         Map<Character, Integer> symbolsValues = getSymbolsValues();
  50.         int sumPoints = 0;
  51.         //списък с карти: "2C", "4H", "9H", "AS", "QS"
  52.         //всяка една карта -> намираме точките за картата -> доабвяме точките на картата към сумата от всички точки
  53.         for (String card : cards) {
  54.             //card = "2C" -> "[сила][тип]"
  55.             //сила: 2 (2), 3(3), 4(4), 5(5), 6 (6), 7 (7), 8 (8), 9(9), 10(10), J(11), D(12), K(13), A(14)
  56.             //тип: S(4), H(3), D(2), C(1)
  57.             //точки = сила * тип
  58.  
  59.             int points = 0;
  60.             if (card.startsWith("10")) {
  61.                 //картата е "10C"
  62.                 //сила = 10
  63.                 char type = card.charAt(2);
  64.                 points = 10 * symbolsValues.get(type);
  65.             } else {
  66.                 //"4H"
  67.                 char power = card.charAt(0); //4
  68.                 char type = card.charAt(1); //H
  69.                 points = symbolsValues.get(power) * symbolsValues.get(type);
  70.             }
  71.  
  72.             sumPoints += points;
  73.         }
  74.         //знаем сумата от точките за всички карти
  75.         return sumPoints;
  76.     }
  77.  
  78.     private static Map<Character, Integer> getSymbolsValues() {
  79.         Map<Character, Integer> characterValues = new HashMap<>();
  80.         characterValues.put('2', 2);
  81.         characterValues.put('3', 3);
  82.         characterValues.put('4', 4);
  83.         characterValues.put('5', 5);
  84.         characterValues.put('6', 6);
  85.         characterValues.put('7', 7);
  86.         characterValues.put('8', 8);
  87.         characterValues.put('9', 9);
  88.         characterValues.put('J', 11);
  89.         characterValues.put('Q', 12);
  90.         characterValues.put('K', 13);
  91.         characterValues.put('A', 14);
  92.         characterValues.put('S', 4);
  93.         characterValues.put('H', 3);
  94.         characterValues.put('D', 2);
  95.         characterValues.put('C', 1);
  96.         return characterValues;
  97.     }
  98. }
  99.  
Advertisement
Advertisement
Advertisement
RAW Paste Data Copied
Advertisement