Skip to content

Instantly share code, notes, and snippets.

@dangsonbk
Created December 13, 2018 11:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dangsonbk/f2f39f21c796761d135b675400f514f9 to your computer and use it in GitHub Desktop.
Save dangsonbk/f2f39f21c796761d135b675400f514f9 to your computer and use it in GitHub Desktop.
AdventOfCode 2018 Day 3
import os
import sys
import numpy as np
import re
from PIL import Image
def main(argv):
inputFileContent = []
with open("input03.txt", "r") as inputFile:
for line in inputFile:
regex = re.search("(\d+),(\d+)\: (\d+)x(\d+)", line)
if regex:
inputFileContent.append(list(map(int, (regex.group(1), regex.group(2), regex.group(3), regex.group(4)))))
# make fabric
mat_X = 0
mat_Y = 0
for claim in inputFileContent:
if claim[0] + claim[2] > mat_X:
mat_X = claim[0] + claim[2]
if claim[1] + claim[3] > mat_Y:
mat_Y = claim[1] + claim[3]
fabric = np.zeros((mat_X, mat_Y))
print("Fabric size: {}, {}".format(mat_X, mat_Y))
# Iterate again? Hmm
for claim_size in inputFileContent:
# create claim
claim = np.ones((claim_size[2], claim_size[3]))
# append
fabric[claim_size[0]:claim_size[0] + claim_size[2],
claim_size[1]:claim_size[1] + claim_size[3]] += claim
uniques, counts = np.unique(fabric, return_counts=True)
overlap_count = sum(counts[2:]) # because 0.0 and 1.1 are [0:1]
print(overlap_count) # here the result for part 1
# find claim that doesn't overlap
for claim_size in inputFileContent:
claim = np.ones((claim_size[2], claim_size[3]))
# compare
if np.array_equal(fabric[claim_size[0]:claim_size[0] + claim_size[2], claim_size[1]:claim_size[1] + claim_size[3]], claim):
print(claim_size) # find it yourself with text editor
# for fun, make an image
fabric = 255 // max(uniques) * (max(uniques) - fabric)
img = Image.fromarray(fabric.astype(np.uint8), mode='L')
img.save('Day3.png')
img.show()
if __name__ == "__main__":
main(sys.argv)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment