Guest User

Untitled

a guest
Dec 3rd, 2018
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.90 KB | None | 0 0
  1. package Advent2018;
  2.  
  3. import util.AdventOfCode;
  4.  
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. import java.util.regex.Matcher;
  8. import java.util.regex.Pattern;
  9.  
  10. public class Day3 extends AdventOfCode {
  11.  
  12.     int[][] grid = new int[1000][1000];
  13.     List<Claim> claims;
  14.  
  15.     class Claim {
  16.         int id;
  17.         int left;
  18.         int top;
  19.         int w;
  20.         int h;
  21.  
  22.         Claim(int id, int left, int top, int w, int h) {
  23.             this.id = id;
  24.             this.left = left;
  25.             this.top = top;
  26.             this.w = w;
  27.             this.h = h;
  28.         }
  29.     }
  30.  
  31.  
  32.     public Day3(List<String> input) {
  33.         super(input);
  34.         title = "No Matter How You Slice It";
  35.         part1Description = "Overlapped squares: ";
  36.         part2Description = "Clean claim: ";
  37.     }
  38.  
  39.     @Override
  40.     public Object part1() {
  41.  
  42.         for(Claim claim : claims) {
  43.  
  44.             for (int i = claim.left; i < claim.left + claim.w; i++) {
  45.                 for (int j = claim.top; j < claim.top + claim.h; j++) {
  46.                     if (grid[j][i] > 0) {
  47.                         grid[j][i] = -1;
  48.                     } else {
  49.                         if (grid[j][i] == 0) grid[j][i] = claim.id;
  50.                     }
  51.                 }
  52.             }
  53.  
  54.         }
  55.         return count();
  56.     }
  57.  
  58.     @Override
  59.     public Object part2() {
  60.         for (Claim claim : claims) {
  61.             boolean clear = true;
  62.             for (int i = claim.left; i < claim.left + claim.w; i++) {
  63.                 if (!clear) break;
  64.                 for (int j = claim.top; j < claim.top + claim.h; j++) {
  65.                     if (grid[j][i] == -1) {
  66.                         clear = false;
  67.                         break;
  68.                     }
  69.                 }
  70.             }
  71.             if (clear) return claim.id;
  72.         }
  73.         return null;
  74.     }
  75.  
  76.     int count() {
  77.         int count = 0;
  78.         for (int i = 0; i < grid.length; i++) {
  79.             for (int j = 0; j < grid.length; j++) {
  80.                 //System.out.print(" " + grid[i][j] + " ");
  81.                 if (grid[j][i] == -1) count++;
  82.             }
  83.             //System.out.println();
  84.         }
  85.         return count;
  86.     }
  87.  
  88.     @Override
  89.     public void parse() {
  90.         Pattern p = Pattern.compile("#([0-9]+) @ ([0-9]+),([0-9]+): ([0-9]+)x([0-9]+)");
  91.  
  92.         claims = new ArrayList<>();
  93.         int num;
  94.         int left;
  95.         int top;
  96.         int w;
  97.         int h;
  98.  
  99.         for (String line : input) {
  100.             Matcher m = p.matcher(line);
  101.             if (m.find()) {
  102.                 num = Integer.parseInt(m.group(1));
  103.                 left = Integer.parseInt(m.group(2));
  104.                 top = Integer.parseInt(m.group(3));
  105.                 w = Integer.parseInt(m.group(4));
  106.                 h = Integer.parseInt(m.group(5));
  107.                 claims.add(new Claim(num, left, top, w, h));
  108.             }
  109.         }
  110.     }
  111.  
  112. }
Advertisement
Add Comment
Please, Sign In to add comment