Mercurial > hg > aoc
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 |
rev | line source |
---|---|
17
1b739c382980
day 13: first part
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
1 import std.stdio; |
18 | 2 import std.algorithm: map, sum; |
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 | 8 auto getBitMap(string input) { |
9 int[][] bitmap; | |
10 foreach(i; 0..128) { | |
11 bitmap ~= format("%s-%d", input, i).calcHash[].map!( | |
12 function(ubyte x) { | |
13 int[] result; | |
14 for(auto i = 7; i >= 0; i--) { | |
15 result ~= (x & (1 << i)) ? 1 : 0; | |
16 } | |
17 return result; | |
18 } | |
19 ).join; | |
20 } | |
21 return bitmap; | |
22 } | |
23 | |
24 void wipeRegion(ref int[][] bitmap, int i, int j) { | |
25 if (i < 0 || j < 0 || i > 127 || j > 127 || bitmap[i][j] == 0) | |
26 return; | |
27 bitmap[i][j] = 0; | |
28 bitmap.wipeRegion(i+1, j); | |
29 bitmap.wipeRegion(i-1, j); | |
30 bitmap.wipeRegion(i, j+1); | |
31 bitmap.wipeRegion(i, j-1); | |
32 } | |
33 | |
34 auto countRegions(int[][] bitmap) { | |
35 auto numregions = 0; | |
36 foreach(i; 0..128) { | |
37 foreach(j; 0..128) { | |
38 if(bitmap[i][j]) { | |
39 numregions++; | |
40 bitmap.wipeRegion(i, j); | |
41 } | |
42 } | |
43 } | |
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 | 48 auto bitmap = getBitMap(args[1]); |
49 writeln(bitmap.map!(sum).sum); | |
50 writeln(bitmap.countRegions); | |
17
1b739c382980
day 13: first part
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
diff
changeset
|
51 } |