Advertisement
desislava_topuzakova

07, Hands of cards _ 07

Jan 22nd, 2023
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.23 KB | None | 0 0
  1. package SetasAndMaps;
  2.  
  3. import java.util.*;
  4.  
  5. public class HandsOfCards_07 {
  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
Add Comment
Please, Sign In to add comment
Advertisement