Професионална програма
Loading...
AsenRangelov avatar AsenRangelov 0 Точки

#JAVA Fundamentals Пролбем със задача Judge oт Maps, Lambda and Stream API - More Exercise.

Здравейте това ми е кода : https://pastebin.com/ajzVKVem?fbclid=IwAR06B_lyv8-A0uPKB3HDVrdeNe_LyPI5e-BSDEHFUXgBlRPl6o3QxI7N62E

Задачата  минава на 0 тестове ,но ми дава 8 точки.Пробвах да я дебъгна опитах се да направя някакви, допулнителни тестове ,но всичко си върви...
Някакви идеи ?

https://judge.softuni.bg/Contests/Practice/Index/1313?fbclid=IwAR1sMTzuyYNapr7BjhoYlXFUyjuKcakCoqcrLqI4rq_yeEOxBN6_Kzl_rVE#1

Тагове:
0
Programming Fundamentals
MartinBG avatar MartinBG 3152 Точки

Сортираш изпитите по брой на участниците/име на изпита, а в условието е казано, че изпитите се извеждат според реда на въвеждането им. Премахни този код от решението си (редове 29-37 вкл.) и ще вземеш 100/100:

                .sorted((a1, a2) -> {
                    int sec = a2.getValue().size();
                    int first = a1.getValue().size();
                    if (first == sec) {
                        return a1.getKey().compareTo(a2.getKey());
                    } else {
                        return Integer.compare(sec, first);
                    }
                })

Ще ти е по-лесно да забязваш подобни грешки, ако подреждаш/форматираш кода правилно и използваш смислени имена за променливите - дори и за тези, с много кратък живот.

 Ето още едно работещо решение от мен:

import java.util.*;
import java.util.stream.Collectors;

public class Demo {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        Map<String, Map<String, Integer>> contestsParticipants = new LinkedHashMap<>();

        String input;
        while (!"no more time".equals(input = scan.nextLine())) {
            String[] tokens = input.split(" -> ");
            String userName = tokens[0];
            String course = tokens[1];
            int userPoints = Integer.parseInt(tokens[2]);

            contestsParticipants.putIfAbsent(course, new HashMap<>());
            contestsParticipants.get(course)
                    .compute(userName, (user, oldPoints) ->
                            (oldPoints == null || oldPoints < userPoints) ? userPoints : oldPoints);
        }

        Comparator<Map.Entry<String, Integer>> participantsComparator = Map.Entry.<String, Integer>
                comparingByValue(Comparator.reverseOrder())
                .thenComparing(Map.Entry.comparingByKey());

        contestsParticipants.forEach((contest, participants) -> {
            System.out.printf("%s: %d participants\n", contest, participants.size());
            final int[] index = {0};
            participants.entrySet()
                    .stream()
                    .sorted(participantsComparator)
                    .forEach(participant -> {
                        System.out.printf("%d. %s <::> %d%n", ++index[0], participant.getKey(), participant.getValue());
                    });
        });

        System.out.println("Individual standings:");
        final int[] index = {0};
        contestsParticipants.values()
                .stream()
                .flatMap(m -> m.entrySet().stream())
                .collect(Collectors.groupingBy(Map.Entry::getKey, Collectors.summingInt(Map.Entry::getValue)))
                .entrySet()
                .stream()
                .sorted(participantsComparator)
                .forEach(participant -> {
                    System.out.printf("%d. %s -> %d%n", ++index[0], participant.getKey(), participant.getValue());
                });
    }
}

 

0
03/04/2020 19:09:31
AsenRangelov avatar AsenRangelov 0 Точки

Благодаря аз разбрах че всичко се реди по големина, после азбучен ред и в случай, че тези неща отпаднат чак тогава по вход.
Нещо съм се замотал като съм чел условието.

0
03/04/2020 19:44:50