Ce n'est vraiment pas terrible comme performance :)
En gros à la lecture, je charge mes map & mes liens.
Puis, je regroupe mes éléments.
A la fin, je filtre pour trouver le plus gros groupe.
publicstaticMap<String,Node>nodesByCode=newHashMap<>();publicstaticMap<Node,List<Link>>linksByNodes=newHashMap<>();publicrecordNode(Stringname)implementsComparable<Node>{//...}publicrecordLink(Nodeleft,Noderight){// ...}publicrecordGroup(TreeSet<Node>members){// ...}publicvoidmain(){//...Set<Group>groups=newHashSet<>();for(Map.Entry<Node,List<Link>>entry:linksByNodes.entrySet()){Nodea=entry.getKey();TreeSet<Node>members=newTreeSet<>();recurseGroup(members,a);if(members.size()>3){groups.add(newGroup(members));}}/* Chercher le plus grand groups */}privatestaticvoidrecurseGroup(TreeSet<Node>members,Nodea){for(Noden:members){if(linksByNodes.get(a).stream().filter(l->l.match(n)).count()==0){return;}}members.add(a);for(Linklink:linksByNodes.get(a)){Nodeb=link.getOther(a);if(members.contains(b)){continue;}recurseGroup(members,b);}}
Je fais 215ms
et si je répète l'opération plusieurs fois , je descends à 15ms pour le même traitement.
[^] # Re: jour 23 - cracra
Posté par syj . En réponse au journal Advent of code 2024. Évalué à 1.
Ce n'est vraiment pas terrible comme performance :)
En gros à la lecture, je charge mes map & mes liens.
Puis, je regroupe mes éléments.
A la fin, je filtre pour trouver le plus gros groupe.
Je fais 215ms
et si je répète l'opération plusieurs fois , je descends à 15ms pour le même traitement.