Retourner au contenu associé (journal : Advent of code 2024)
Posté par syj le 13 décembre 2024 à 15:53. En réponse au journal Advent of code 2024. Évalué à 2.
compter le nombre de cotés revient à compter le nombre de coins.
Je n'y avais pas pensé. J'ai utilisé une méthode différentes
J'identifie les pièces sous forme d'un Set.
Pour identifier les côtés, je détermine la bordure & la direction qui a servi à déterminer cette bordure. Cela me donne un Set
Je regroupe les éléments de ce Set par exploration des adjacents de même directions. Le nombre groupe identifié correspond à mon nombre de côté.
private static int computeSides(Set<Point> pieces) { Set<SidePart> set = new HashSet<>(); int sides = 0; for (Point p : pieces) { for (Point d : Point.DIRECTIONS) { Point i = p.add(d); if (!pieces.contains(i)) { set.add(new SidePart(p, d)); } } } Set<SidePart> counted = new HashSet<>(); for (SidePart sidePart : set) { if (counted.contains(sidePart)) { continue; } Set<SidePart> groups = new HashSet<>(); buildGroup(set, sidePart, groups); counted.addAll(groups); sides++; } return sides; } private static void buildGroup(Set<SidePart> set, SidePart sidePart, Set<SidePart> groups) { if (!set.contains(sidePart)) { return; } if (groups.contains(sidePart)) { return; } groups.add(sidePart); Point direction = sidePart.direction; Point source = sidePart.source; if (direction.x != 0) { buildGroup(set, new SidePart(source.add(new Point(0, 1)), direction), groups); buildGroup(set, new SidePart(source.add(new Point(0, -1)), direction), groups); } else { buildGroup(set, new SidePart(source.add(new Point(1, 0)), direction), groups); buildGroup(set, new SidePart(source.add(new Point(-1, 0)), direction), groups); } } record SidePart(Point source, Point direction) { }
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル
[^] # Re: 12ème jour
Posté par syj . En réponse au journal Advent of code 2024. Évalué à 2.
Je n'y avais pas pensé. J'ai utilisé une méthode différentes
J'identifie les pièces sous forme d'un Set.
Pour identifier les côtés, je détermine la bordure & la direction qui a servi à déterminer cette bordure. Cela me donne un Set
Je regroupe les éléments de ce Set par exploration des adjacents de même directions. Le nombre groupe identifié correspond à mon nombre de côté.