annotate 2017/day14/app.d @ 33:bc652fa0a645

Move all solutions to per-day subdirs
author Jordi Gutiérrez Hermoso <jordigh@octave.org>
date Tue, 09 Jan 2018 21:50:37 -0500
parents 2017/day14.d@70937ca0e7eb
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17
1b739c382980 day 13: first part
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
1 import std.stdio;
18
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
2 import std.algorithm: map, sum;
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
3 import std.range: join;
17
1b739c382980 day 13: first part
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
4 import std.format: format;
1b739c382980 day 13: first part
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
5
1b739c382980 day 13: first part
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
6 import day10: calcHash, getHash;
1b739c382980 day 13: first part
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
7
18
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
8 auto getBitMap(string input) {
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
9 int[][] bitmap;
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
10 foreach(i; 0..128) {
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
11 bitmap ~= format("%s-%d", input, i).calcHash[].map!(
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
12 function(ubyte x) {
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
13 int[] result;
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
14 for(auto i = 7; i >= 0; i--) {
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
15 result ~= (x & (1 << i)) ? 1 : 0;
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
16 }
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
17 return result;
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
18 }
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
19 ).join;
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
20 }
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
21 return bitmap;
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
22 }
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
23
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
24 void wipeRegion(ref int[][] bitmap, int i, int j) {
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
25 if (i < 0 || j < 0 || i > 127 || j > 127 || bitmap[i][j] == 0)
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
26 return;
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
27 bitmap[i][j] = 0;
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
28 bitmap.wipeRegion(i+1, j);
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
29 bitmap.wipeRegion(i-1, j);
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
30 bitmap.wipeRegion(i, j+1);
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
31 bitmap.wipeRegion(i, j-1);
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
32 }
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
33
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
34 auto countRegions(int[][] bitmap) {
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
35 auto numregions = 0;
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
36 foreach(i; 0..128) {
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
37 foreach(j; 0..128) {
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
38 if(bitmap[i][j]) {
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
39 numregions++;
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
40 bitmap.wipeRegion(i, j);
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
41 }
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
42 }
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
43 }
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
44 return numregions;
17
1b739c382980 day 13: first part
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
45 }
1b739c382980 day 13: first part
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
46
1b739c382980 day 13: first part
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
47 void main(string[] args) {
18
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
48 auto bitmap = getBitMap(args[1]);
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
49 writeln(bitmap.map!(sum).sum);
70937ca0e7eb day 14: part 2
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 17
diff changeset
50 writeln(bitmap.countRegions);
17
1b739c382980 day 13: first part
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff changeset
51 }