From 89d63210150007a0a17e5f9d3bd81c1cd2b57a22 Mon Sep 17 00:00:00 2001 From: Roman Hergenreder Date: Sun, 9 Dec 2018 10:36:48 +0100 Subject: [PATCH] Day 9 --- Day 8/decode.py | 2 +- Day 9/decode.py | 38 ++++++++++++++++++ Day 9/decoded.png | Bin 0 -> 467 bytes Day 9/medium-64.png | Bin 0 -> 5807 bytes Day 9/medium-64_decompressed.png | Bin 0 -> 5967 bytes Day 9/medium_64_original.png | Bin 0 -> 7881 bytes .../break_santa.py | 1 + 7 files changed, 40 insertions(+), 1 deletion(-) create mode 100755 Day 9/decode.py create mode 100644 Day 9/decoded.png create mode 100644 Day 9/medium-64.png create mode 100644 Day 9/medium-64_decompressed.png create mode 100644 Day 9/medium_64_original.png create mode 100644 Teaser/_ZOoxjUSe1OVB7OPoVrsX.pdf.extracted/break_santa.py diff --git a/Day 8/decode.py b/Day 8/decode.py index aaa8b81..929c47d 100755 --- a/Day 8/decode.py +++ b/Day 8/decode.py @@ -74,7 +74,7 @@ if snail.count("0") != bits.count("0") or snail.count("1") != bits.count("1"): print("Bits do not match") exit() -im = Image.new('RGB', im.size) +im = Image.new('RGB', im.black) pix = im.load() for tileY in range(0, numTiles): diff --git a/Day 9/decode.py b/Day 9/decode.py new file mode 100755 index 0000000..2abfb7b --- /dev/null +++ b/Day 9/decode.py @@ -0,0 +1,38 @@ +#!/usr/bin/python + +from PIL import Image + +imageOriginal = Image.open("medium_64_original.png") +imageFake = Image.open("medium-64_decompressed.png") + +pixOriginal = imageOriginal.load() +pixFake = imageFake.load() + +if imageOriginal.size != imageFake.size: + print("Images differ in Size") + exit() + +diffs = [] + +Size = imageOriginal.size +for y in range(Size[0]): + for x in range(Size[1]): + if pixOriginal[x,y] != pixFake[x,y]: + diffs.append([x,y]) + +x0 = min([diff[0] for diff in diffs]) +x1 = max([diff[0] for diff in diffs]) +y0 = min([diff[1] for diff in diffs]) +y1 = max([diff[1] for diff in diffs]) + +imageNew = Image.new('RGB', Size, "white") +pix = imageNew.load() + +for x in range(x0, x1+1): + for y in range(y0, y1+1): + pix[x,y] = (0,0,0,255) + +for diff in diffs: + pix[diff[0], diff[1]] = (255,255,255,255) + +imageNew.save("decoded.png") diff --git a/Day 9/decoded.png b/Day 9/decoded.png new file mode 100644 index 0000000000000000000000000000000000000000..d38a27ee4dc7aacb1785e44184c8d85281d92909 GIT binary patch literal 467 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLH@YFwXLHaSW-L^LEC?K4wJ@*VN7b z|DS%>%(;_wYxMdlK8Gr^&Q5r!w4mq9z1x$2o-Auv%90Yyv`Lfk=9GpUF9$PKh1o(A zd^t}nV@dgZTB5rn{>|R*j=o!uXKw7U-*a^){}hJ*N$*v6?b~kEEZVT%Jn;MZ1^4g0 z>iHmbp@i#Kov`YH?|Eh}E;B+R3l&>yGLE0>*y}%U>Q%`#4VeKOxlLbq@2V@*)?i$% z;rCcJgeQcTV}bTt(*v*8b=pc9Njq^~=$KV}YWjLZ$LPuV^AEji_~=ty`^rQzSW=KF~R9oZ~m;ycMRT5k}i6#@cBEF&4~|^vF?+%NM*d6WW4r7=Jz`> zbL^V-`eol*<9FxaDzgn=_-l6*t(g%uCv5rk1RuV5*+S1dKi;y-eu`BTo|);M=6q&u zQ;3k!#F_h-ouARAZmyW3lr3=gzedgxz7`&n7f)BY-`zFS%{L|gIm@53Cpc!FV5_T{ zd99>~H|N~NvmaW$JR}vLA26@{v-~J5_|QW2IQI|cmd_atSNx}O03(aR)78&qol`;+ E0BzRReE4rgyZ7Gbao=1{jr*;Zk& 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 literal 0 HcmV?d00001 diff --git a/Day 9/medium-64_decompressed.png b/Day 9/medium-64_decompressed.png new file mode 100644 index 0000000000000000000000000000000000000000..1c4adafdc8324ab5f4810e8c91c490e64a1cb581 GIT binary patch literal 5967 zcmV-V7qIAwP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 xWNBu305UK!I4vN2bZe?^J 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