Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package Advent2018;
- import util.AdventOfCode;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- public class Day3 extends AdventOfCode {
- int[][] grid = new int[1000][1000];
- List<Claim> claims;
- class Claim {
- int id;
- int left;
- int top;
- int w;
- int h;
- Claim(int id, int left, int top, int w, int h) {
- this.id = id;
- this.left = left;
- this.top = top;
- this.w = w;
- this.h = h;
- }
- }
- public Day3(List<String> input) {
- super(input);
- title = "No Matter How You Slice It";
- part1Description = "Overlapped squares: ";
- part2Description = "Clean claim: ";
- }
- @Override
- public Object part1() {
- for(Claim claim : claims) {
- for (int i = claim.left; i < claim.left + claim.w; i++) {
- for (int j = claim.top; j < claim.top + claim.h; j++) {
- if (grid[j][i] > 0) {
- grid[j][i] = -1;
- } else {
- if (grid[j][i] == 0) grid[j][i] = claim.id;
- }
- }
- }
- }
- return count();
- }
- @Override
- public Object part2() {
- for (Claim claim : claims) {
- boolean clear = true;
- for (int i = claim.left; i < claim.left + claim.w; i++) {
- if (!clear) break;
- for (int j = claim.top; j < claim.top + claim.h; j++) {
- if (grid[j][i] == -1) {
- clear = false;
- break;
- }
- }
- }
- if (clear) return claim.id;
- }
- return null;
- }
- int count() {
- int count = 0;
- for (int i = 0; i < grid.length; i++) {
- for (int j = 0; j < grid.length; j++) {
- //System.out.print(" " + grid[i][j] + " ");
- if (grid[j][i] == -1) count++;
- }
- //System.out.println();
- }
- return count;
- }
- @Override
- public void parse() {
- Pattern p = Pattern.compile("#([0-9]+) @ ([0-9]+),([0-9]+): ([0-9]+)x([0-9]+)");
- claims = new ArrayList<>();
- int num;
- int left;
- int top;
- int w;
- int h;
- for (String line : input) {
- Matcher m = p.matcher(line);
- if (m.find()) {
- num = Integer.parseInt(m.group(1));
- left = Integer.parseInt(m.group(2));
- top = Integer.parseInt(m.group(3));
- w = Integer.parseInt(m.group(4));
- h = Integer.parseInt(m.group(5));
- claims.add(new Claim(num, left, top, w, h));
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment