View difference between Paste ID: jXTXjfyP and 4YT7ryPa
SHOW: | | - or go back to the newest paste.
1
import java.util.*;
2
import java.util.regex.Matcher;
3
import java.util.regex.Pattern;
4
import java.util.stream.Collectors;
5
6
public class Race_02 {
7
    public static void main(String[] args) {
8
        Scanner scanner = new Scanner(System.in);
9
        //"George, Peter, Bill, Tom" -> ", " -> [George, Peter, Bill, Tom]
10
        List<String> racers = Arrays.stream(scanner.nextLine().split(",\\s+")).collect(Collectors.toList());
11
        Map<String, Integer> racersDistances = new LinkedHashMap<>();
12
        //име на състезател -> дистанция (0)
13
        racers.forEach(racer -> racersDistances.put(racer, 0));
14
15
        //Регекси
16
        String regexLetter = "[A-Za-z]+";
17
        Pattern patternName = Pattern.compile(regexLetter);
18
19
        String regexNumber = "[0-9]";
20
        Pattern patternDistance = Pattern.compile(regexNumber);
21
22
        String input = scanner.nextLine();
23
        while (!input.equals("end of race")) {
24
            //"G4e@55or%6g6!68e!!@"
25
            //всички букви -> име на състезателя
26
            StringBuilder nameBuilder = new StringBuilder();
27
            Matcher matcherName = patternName.matcher(input);
28
            while(matcherName.find()) {
29
                nameBuilder.append(matcherName.group());
30
            }
31
            //всичи цифри -> сумираме = дистанция на състезателя
32
            int distance = 0;
33
            Matcher matcherDistance = patternDistance.matcher(input);
34
            while(matcherDistance.find()) {
35
                distance += Integer.parseInt(matcherDistance.group());
36
            }
37
38
            String racerName = nameBuilder.toString();
39
            if(racersDistances.containsKey(racerName)) {
40
                int currentDistance = racersDistances.get(racerName);
41
                racersDistances.put(racerName, currentDistance + distance);
42
            }
43
44
            input = scanner.nextLine();
45
        }
46
47
        //sorting map по descending distance (value)
48
        /*List<String> firstThreeNames = racersDistances.entrySet().stream()
49
                .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())) //sorted map by value
50
                .limit(3)
51
                .map(entry -> entry.getKey())
52
                .collect(Collectors.toList());*/
53
54
        Map<String, Integer> sortedMap = racersDistances.entrySet().stream()
55
                .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())) //sorted map by value
56
                .limit(3)
57
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a1, a2) -> a1, LinkedHashMap::new));
58
59
        List<String> firstThreeNames = new ArrayList<>();
60
        sortedMap.entrySet().forEach(entry -> firstThreeNames.add(entry.getKey()));
61
62
63
        //["George", "Peter", "Pesho"]
64
        System.out.println("1st place: " + firstThreeNames.get(0));
65
        System.out.println("2nd place: " + firstThreeNames.get(1));
66
        System.out.println("3rd place: " + firstThreeNames.get(2));
67
68
    }
69
}