Advertisement
Guest User

Untitled

a guest
Dec 12th, 2018
482
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.82 KB | None | 0 0
  1. package Advent2018;
  2.  
  3. import com.sun.activation.registries.MailcapParseException;
  4. import util.AdventOfCode;
  5.  
  6. import java.util.HashSet;
  7. import java.util.List;
  8. import java.util.Map;
  9. import java.util.Set;
  10.  
  11. public class Day12 extends AdventOfCode {
  12.    
  13.     Set<String> grow;
  14.     int zero;
  15.  
  16.     String inp;
  17.  
  18.     public Day12(List<String> input) {
  19.         super(input);
  20.     }
  21.  
  22.     @Override
  23.     public Integer part1() {
  24.  
  25.         for (int i = 0; i < 20; i++) {
  26.             String last = "....." + inp + "...";
  27.             String next = "";
  28.             zero += 3;
  29.             for (int j = 2; j < last.length() - 2; j++) {
  30.                 if (grow.contains(last.substring(j - 2, j + 3))) {
  31.                     next += "#";
  32.                 } else {
  33.                     next += ".";
  34.                 }
  35.  
  36.             }
  37.             inp = next;
  38.         }
  39.         int sum = 0;
  40.         for (int i = 0; i < inp.length(); i++) {
  41.             sum += inp.charAt(i) == '#' ? i - zero : 0;
  42.         }
  43.         return sum;
  44.     }
  45.  
  46.     @Override
  47.     public Object part2() {
  48.         long sum = 0L;
  49.  
  50.         // 100 iterations
  51.         for (int i = 0; i < 4; i++) {
  52.             sum = part1();
  53.         }
  54.  
  55.         // get factor
  56.         int last = 0;
  57.         int diff = 0;
  58.         for (int i = 0; i < 3; i++) {
  59.             int next = part1();
  60.             diff = next - last;
  61.             last = next;
  62.         }
  63.         sum += ((50_000_000_000L - 100) / 20)* diff;
  64.         return sum;
  65.     }
  66.  
  67.     @Override
  68.     public void parse() {
  69.         grow = new HashSet<>();
  70.         inp = input.get(0).substring(15);
  71.         for (int i = 2; i < input.size(); i++) {
  72.             String[] split = input.get(i).split(" ");
  73.             if (split[2].startsWith("#")) {
  74.                 grow.add(split[0]);
  75.             }
  76.         }
  77.     }
  78.  
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement