Advertisement
Guest User

Untitled

a guest
Dec 19th, 2024
28
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.53 KB | None | 0 0
  1. package aoc2024;
  2.  
  3. import ak.Fn;
  4. import ak.List;
  5. import ak.Map;
  6. import ak.Set;
  7.  
  8. public class D19 {
  9.  
  10.   public static long findAll (List<String> patterns, String target, Map<String, Long> seen) {
  11.     if (target.length() == 0) { return 1L; }
  12.     if (seen.containsKey(target)) { return seen.get(target); }
  13.     long oks = 0L;
  14.     for (String pattern : patterns) {
  15.       if (target.startsWith(pattern)) { oks += findAll(patterns, target.substring(pattern.length()), seen); }
  16.     }
  17.     seen.initOrBust(target, oks);
  18.     return oks;
  19.   }
  20.  
  21.   public static boolean findOne (List<String> patterns, String target, Set<String> seen) {
  22.     if (target.length() == 0) { return true; }
  23.     if (seen.contains(target)) { return false; }
  24.     seen.add(target);
  25.     for (String pattern : patterns) {
  26.       if (target.startsWith(pattern)) {
  27.         boolean ok = findOne(patterns, target.substring(pattern.length()), seen);
  28.         if (ok) { return true; }
  29.       }
  30.     }
  31.     return false;
  32.   }
  33.  
  34.   public static void main (String[] args) {
  35.     List<String> targets = Fn.inputLinesTrimmed("d19-targets.txt");
  36.     List<String> patterns = Fn.inputLinesTrimmed("d19-patterns.txt");
  37.     {
  38.       long p1 = targets
  39.         .parallelStream()
  40.         .filter(target -> findOne(patterns, target, new Set<>()))
  41.         .count();
  42.       Fn.println("p1: %d", p1);
  43.     }
  44.     {
  45.       long p2 = targets
  46.         .parallelStream()
  47.         .mapToLong(target -> findAll(patterns, target, new Map<>()))
  48.         .sum();
  49.       Fn.println("p2: %d", p2);
  50.     }
  51.   }
  52.  
  53. }
  54.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement