Last active
December 20, 2018 04:59
-
-
Save 0e4ef622/46051265facc5ccad0d311c345b60e1a to your computer and use it in GitHub Desktop.
aoc day 16 2018
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const OPERATIONS: [fn(usize, usize, usize, usize) -> usize; 16] = [ | |
|a, ra, b, rb| ra+rb, // addr | |
|a, ra, b, rb| ra+b, // addi | |
|a, ra, b, rb| ra*rb, // mulr | |
|a, ra, b, rb| ra*b, // muli | |
|a, ra, b, rb| ra & rb, // banr | |
|a, ra, b, rb| ra & b, // bani | |
|a, ra, b, rb| ra | rb, // borr | |
|a, ra, b, rb| ra | b, // bori | |
|a, ra, _, rb| ra, // setr | |
|a, ra, _, rb| a, // seti | |
|a, ra, b, rb| (a > rb) as usize, // gtir | |
|a, ra, b, rb| (ra > b) as usize, // gtri | |
|a, ra, b, rb| (ra > rb) as usize, // gtrr | |
|a, ra, b, rb| (a == rb) as usize, // eqir | |
|a, ra, b, rb| (ra == b) as usize, // eqri | |
|a, ra, b, rb| (ra == rb) as usize, // eqrr | |
]; | |
pub fn main() { | |
for i in 0..64 { | |
println!("{}", { | |
let mut n: u64 = 0; | |
for j in 0..64 { | |
let a = (i >> 4) & 3; | |
let b = (i >> 2) & 3; | |
let ra = i & 3; | |
let rb = j & 3; | |
let o = (j >> 2) & 15; | |
let mut c = 0; | |
for op in &OPERATIONS { | |
if op(a, ra, b, rb) == o { | |
c += 1; | |
if c >= 3 { | |
n |= 1 << j; | |
break; | |
} | |
} | |
} | |
} | |
n | |
}); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const OPERATIONS: [fn(usize, usize, usize, usize) -> usize; 16] = [ | |
|a, ra, b, rb| ra+rb, // addr | |
|a, ra, b, rb| ra+b, // addi | |
|a, ra, b, rb| ra*rb, // mulr | |
|a, ra, b, rb| ra*b, // muli | |
|a, ra, b, rb| ra & rb, // banr | |
|a, ra, b, rb| ra & b, // bani | |
|a, ra, b, rb| ra | rb, // borr | |
|a, ra, b, rb| ra | b, // bori | |
|a, ra, _, rb| ra, // setr | |
|a, ra, _, rb| a, // seti | |
|a, ra, b, rb| (a > rb) as usize, // gtir | |
|a, ra, b, rb| (ra > b) as usize, // gtri | |
|a, ra, b, rb| (ra > rb) as usize, // gtrr | |
|a, ra, b, rb| (a == rb) as usize, // eqir | |
|a, ra, b, rb| (ra == b) as usize, // eqri | |
|a, ra, b, rb| (ra == rb) as usize, // eqrr | |
]; | |
pub fn main() { | |
for i in 0..4096 { | |
println!("{}", { | |
let a = (i >> 6) & 3; | |
let b = (i >> 4) & 3; | |
let ra = (i >> 2) & 3; | |
let rb = i & 3; | |
let o = (i >> 8) & 15; | |
let mut possible_ops: u16 = 0; | |
for (j, op) in OPERATIONS.iter().enumerate() { | |
if op(a, ra, b, rb) == o { | |
possible_ops |= 1 << j; | |
} | |
} | |
possible_ops | |
}); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const OPERATIONS: [fn(&mut [usize; 4], usize, usize, usize); 16] = [ | |
|r: &mut [usize; 4], a, b, o| r[o] = r[a]+r[b], // addr | |
|r: &mut [usize; 4], a, b, o| r[o] = r[a]+b, // addi | |
|r: &mut [usize; 4], a, b, o| r[o] = r[a]*r[b], // mulr | |
|r: &mut [usize; 4], a, b, o| r[o] = r[a]*b, // muli | |
|r: &mut [usize; 4], a, b, o| r[o] = r[a] & r[b], // banr | |
|r: &mut [usize; 4], a, b, o| r[o] = r[a] & b, // bani | |
|r: &mut [usize; 4], a, b, o| r[o] = r[a] | r[b], // borr | |
|r: &mut [usize; 4], a, b, o| r[o] = r[a] | b, // bori | |
|r: &mut [usize; 4], a, _, o| r[o] = r[a], // setr | |
|r: &mut [usize; 4], a, _, o| r[o] = a, // seti | |
|r: &mut [usize; 4], a, b, o| r[o] = (a > r[b]) as usize, // gtir | |
|r: &mut [usize; 4], a, b, o| r[o] = (r[a] > b) as usize, // gtri | |
|r: &mut [usize; 4], a, b, o| r[o] = (r[a] > r[b]) as usize, // gtrr | |
|r: &mut [usize; 4], a, b, o| r[o] = (a == r[b]) as usize, // eqir | |
|r: &mut [usize; 4], a, b, o| r[o] = (r[a] == b) as usize, // eqri | |
|r: &mut [usize; 4], a, b, o| r[o] = (r[a] == r[b]) as usize, // eqrr | |
]; | |
const LOOKUP: [u64; 64] = [ | |
63, 255, 3871, 61503, | |
63, 255, 44831, 61695, | |
1039, 49215, 266015, 61503, | |
32783, 49343, 12047, 61503, | |
63, 255, 3967, 61695, | |
255, 255, 44927, 61695, | |
1087, 49343, 266111, 61695, | |
32831, 49407, 12095, 61695, | |
1087, 255, 3967, 61567, | |
1151, 1791, 44927, 61695, | |
3887, 50751, 266111, 62591, | |
33839, 49407, 12047, 61567, | |
32831, 49407, 12159, 61695, | |
33023, 49407, 65407, 61695, | |
33839, 61631, 274303, 61695, | |
61487, 61695, 44815, 61695, | |
]; | |
pub fn fryguy_part1_modified(input: &str) -> usize { | |
let mut input = input.as_bytes(); | |
let mut ret = 0; | |
while input[0] == b'B' { | |
let re = &input[9..19]; | |
input = &input[23 + (input[22] != b' ') as usize..]; | |
let a = (input[0] & 3) as usize; | |
let b = (input[2] & 3) as usize; | |
let o = (input[4] & 3) as usize; | |
let rea = (re[3*a] & 3) as usize; | |
let reb = (re[3*b] & 3) as usize; | |
let afo = (input[15 + 3*o] & 15) as usize; | |
ret += ((LOOKUP[(a<<4) | (b<<2) | rea] >> ((afo << 2) | reb)) & 0x01) as usize; | |
input = &input[28..]; | |
} | |
ret | |
} | |
#[inline(never)] | |
fn execute(mut input: &[u8], map: [usize; 16]) -> [usize; 4] { | |
let mut r = [0, 0, 0, 0]; | |
while input.len() > 0 { | |
let mut ii: usize = (input[0] & 15) as usize; | |
if input[1] == b' ' { | |
input = &input[2..]; | |
} else { | |
ii = ii*10 + (input[1] & 15) as usize; | |
input = &input[3..]; | |
} | |
let a = (input[0] & 15) as usize; | |
let b = (input[2] & 15) as usize; | |
let o = (input[4] & 15) as usize; | |
OPERATIONS[map[ii]](&mut r, a, b, o); | |
input = &input[6..]; | |
} | |
r | |
} | |
pub fn part2(input: &str) -> usize { | |
let mut input = input.as_bytes(); | |
// index by opcode, returns set of possible indices into operations as a bitmask | |
let mut map = [65535u16; 16]; | |
let mut newmap = [16usize; 16]; | |
while input[0] == b'B' { | |
let re = &input[9..19]; | |
let ii; | |
if input[22] == b' ' { | |
ii = (input[21] & 15) as usize; | |
input = &input[23..]; | |
} else { | |
ii = 10*(input[21] & 15) as usize + (input[22] & 15) as usize; | |
input = &input[24..]; | |
}; | |
if map[ii] == 0 { | |
input = &input[28..]; | |
continue; | |
} | |
let a = (input[0] & 3) as usize; | |
let b = (input[2] & 3) as usize; | |
let o = (input[4] & 3) as usize; | |
let rea = (re[3*a] & 3) as usize; | |
let reb = (re[3*b] & 3) as usize; | |
let afo = (input[15 + 3*o] & 15) as usize; | |
let possible_ops = PART2_LOOKUP[(afo << 8) | (a<<6) | (b<<4) | (rea<<2) | reb]; | |
map[ii] &= possible_ops; | |
if map[ii].count_ones() == 1 { | |
let n = map[ii].trailing_zeros(); | |
newmap[ii] = n as usize; | |
for v in &mut map { | |
*v &= !(1 << n); | |
} | |
} | |
input = &input[28..]; | |
} | |
input = &input[2..]; // skip the 2 extra lines | |
let mut ct = true; | |
while ct { // just in case | |
ct = false; | |
for (n, m) in newmap.iter_mut().zip(map.clone().iter()) { | |
if *n != 16 { | |
if m.count_ones() == 1 { | |
let op = m.trailing_zeros(); | |
for m in &mut map { | |
*m &= !(1 << op); | |
} | |
*n = op as usize; | |
ct = true; | |
} | |
} | |
} | |
} | |
execute(input, newmap)[0] | |
} | |
const PART2_LOOKUP: [u16; 2560] = [ | |
8191, 49086, 49086, 49086, 50748, 30248, 63032, 63016, 50748, 58936, 30248, 63016, 50748, 58920, 58920, 30248, | |
24445, 65340, 65340, 65340, 36372, 15872, 48656, 48640, 50740, 58928, 30240, 63008, 50708, 58880, 58880, 30208, | |
24445, 65340, 65340, 65340, 52788, 32288, 65072, 65056, 36372, 44560, 15872, 48640, 50708, 58880, 58880, 30208, | |
24445, 65340, 65340, 65340, 52756, 32256, 65040, 65024, 52756, 60944, 32256, 65024, 36372, 44544, 44544, 15872, | |
14847, 40382, 48574, 48574, 57404, 21544, 62520, 62504, 57404, 50232, 29736, 62504, 57404, 50216, 58408, 29736, | |
31101, 56636, 64828, 64828, 43028, 7168, 48144, 48128, 57396, 50224, 29728, 62496, 57364, 50176, 58368, 29696, | |
31101, 56636, 64828, 64828, 59444, 23584, 64560, 64544, 43028, 35856, 15360, 48128, 57364, 50176, 58368, 29696, | |
31101, 56636, 64828, 64828, 59412, 23552, 64528, 64512, 59412, 52240, 31744, 64512, 43028, 35840, 44032, 15360, | |
14847, 47550, 40382, 48574, 57404, 28712, 54328, 62504, 57404, 57400, 21544, 62504, 57404, 57384, 50216, 29736, | |
31101, 63804, 56636, 64828, 43028, 14336, 39952, 48128, 57396, 57392, 21536, 62496, 57364, 57344, 50176, 29696, | |
31101, 63804, 56636, 64828, 59444, 30752, 56368, 64544, 43028, 43024, 7168, 48128, 57364, 57344, 50176, 29696, | |
31101, 63804, 56636, 64828, 59412, 30720, 56336, 64512, 59412, 59408, 23552, 64512, 43028, 43008, 35840, 15360, | |
14847, 47550, 47550, 40382, 57404, 28712, 61496, 54312, 57404, 57400, 28712, 54312, 57404, 57384, 57384, 21544, | |
31101, 63804, 63804, 56636, 43028, 14336, 47120, 39936, 57396, 57392, 28704, 54304, 57364, 57344, 57344, 21504, | |
31101, 63804, 63804, 56636, 59444, 30752, 63536, 56352, 43028, 43024, 14336, 39936, 57364, 57344, 57344, 21504, | |
31101, 63804, 63804, 56636, 59412, 30720, 63504, 56320, 59412, 59408, 30720, 56320, 43028, 43008, 43008, 7168, | |
57344, 16449, 16384, 16384, 14787, 35286, 2434, 2450, 14336, 6144, 34816, 2048, 14336, 6160, 6144, 34816, | |
41090, 195, 130, 130, 29161, 49660, 16808, 16824, 14336, 6144, 34816, 2048, 14368, 6192, 6176, 34848, | |
40960, 65, 0, 0, 12609, 33108, 256, 272, 28672, 20480, 49152, 16384, 14336, 6160, 6144, 34816, | |
40960, 65, 0, 0, 12641, 33140, 288, 304, 12288, 4096, 32768, 0, 28672, 20496, 20480, 49152, | |
50688, 25153, 16896, 16896, 8131, 43990, 2946, 2962, 7680, 14848, 35328, 2560, 7680, 14864, 6656, 35328, | |
34434, 8899, 642, 642, 22505, 58364, 17320, 17336, 7680, 14848, 35328, 2560, 7712, 14896, 6688, 35360, | |
34304, 8769, 512, 512, 5953, 41812, 768, 784, 22016, 29184, 49664, 16896, 7680, 14864, 6656, 35328, | |
34304, 8769, 512, 512, 5985, 41844, 800, 816, 5632, 12800, 33280, 512, 22016, 29200, 20992, 49664, | |
50176, 17473, 24576, 16384, 7619, 36310, 10626, 2450, 7168, 7168, 43008, 2048, 7168, 7184, 14336, 34816, | |
33922, 1219, 8322, 130, 21993, 50684, 25000, 16824, 7168, 7168, 43008, 2048, 7200, 7216, 14368, 34848, | |
33792, 1089, 8192, 0, 5441, 34132, 8448, 272, 21504, 21504, 57344, 16384, 7168, 7184, 14336, 34816, | |
33792, 1089, 8192, 0, 5473, 34164, 8480, 304, 5120, 5120, 40960, 0, 21504, 21520, 28672, 49152, | |
50176, 17473, 17408, 24576, 7619, 36310, 3458, 10642, 7168, 7168, 35840, 10240, 7168, 7184, 7168, 43008, | |
33922, 1219, 1154, 8322, 21993, 50684, 17832, 25016, 7168, 7168, 35840, 10240, 7200, 7216, 7200, 43040, | |
33792, 1089, 1024, 8192, 5441, 34132, 1280, 8464, 21504, 21504, 50176, 24576, 7168, 7184, 7168, 43008, | |
33792, 1089, 1024, 8192, 5473, 34164, 1312, 8496, 5120, 5120, 33792, 8192, 21504, 21520, 21504, 57344, | |
0, 0, 65, 0, 0, 1, 4, 0, 451, 390, 466, 402, 0, 0, 16, 0, | |
0, 0, 65, 0, 2, 3, 6, 2, 329, 268, 344, 280, 0, 0, 16, 0, | |
130, 130, 195, 130, 8, 9, 12, 8, 481, 420, 496, 432, 32, 32, 48, 32, | |
0, 0, 65, 0, 0, 1, 4, 0, 353, 292, 368, 304, 0, 0, 16, 0, | |
0, 0, 65, 0, 0, 1, 4, 0, 451, 390, 466, 402, 0, 0, 16, 0, | |
0, 0, 65, 0, 2, 3, 6, 2, 329, 268, 344, 280, 0, 0, 16, 0, | |
130, 130, 195, 130, 8, 9, 12, 8, 481, 420, 496, 432, 32, 32, 48, 32, | |
0, 0, 65, 0, 0, 1, 4, 0, 353, 292, 368, 304, 0, 0, 16, 0, | |
512, 512, 577, 512, 512, 513, 516, 512, 963, 902, 978, 914, 512, 512, 528, 512, | |
512, 512, 577, 512, 514, 515, 518, 514, 841, 780, 856, 792, 512, 512, 528, 512, | |
642, 642, 707, 642, 520, 521, 524, 520, 993, 932, 1008, 944, 544, 544, 560, 544, | |
512, 512, 577, 512, 512, 513, 516, 512, 865, 804, 880, 816, 512, 512, 528, 512, | |
0, 0, 65, 0, 0, 1, 4, 0, 451, 390, 466, 402, 0, 0, 16, 0, | |
0, 0, 65, 0, 2, 3, 6, 2, 329, 268, 344, 280, 0, 0, 16, 0, | |
130, 130, 195, 130, 8, 9, 12, 8, 481, 420, 496, 432, 32, 32, 48, 32, | |
0, 0, 65, 0, 0, 1, 4, 0, 353, 292, 368, 304, 0, 0, 16, 0, | |
0, 0, 0, 65, 0, 0, 65, 68, 0, 65, 0, 64, 451, 454, 450, 466, | |
0, 0, 0, 65, 0, 0, 65, 68, 130, 195, 130, 194, 457, 460, 456, 472, | |
0, 0, 0, 65, 130, 130, 195, 198, 0, 65, 0, 64, 449, 452, 448, 464, | |
130, 130, 130, 195, 136, 136, 201, 204, 128, 193, 128, 192, 481, 484, 480, 496, | |
0, 0, 0, 65, 0, 0, 65, 68, 0, 65, 0, 64, 451, 454, 450, 466, | |
0, 0, 0, 65, 0, 0, 65, 68, 130, 195, 130, 194, 457, 460, 456, 472, | |
0, 0, 0, 65, 130, 130, 195, 198, 0, 65, 0, 64, 449, 452, 448, 464, | |
130, 130, 130, 195, 136, 136, 201, 204, 128, 193, 128, 192, 481, 484, 480, 496, | |
0, 0, 0, 65, 0, 0, 65, 68, 0, 65, 0, 64, 451, 454, 450, 466, | |
0, 0, 0, 65, 0, 0, 65, 68, 130, 195, 130, 194, 457, 460, 456, 472, | |
0, 0, 0, 65, 130, 130, 195, 198, 0, 65, 0, 64, 449, 452, 448, 464, | |
130, 130, 130, 195, 136, 136, 201, 204, 128, 193, 128, 192, 481, 484, 480, 496, | |
512, 512, 512, 577, 512, 512, 577, 580, 512, 577, 512, 576, 963, 966, 962, 978, | |
512, 512, 512, 577, 512, 512, 577, 580, 642, 707, 642, 706, 969, 972, 968, 984, | |
512, 512, 512, 577, 642, 642, 707, 710, 512, 577, 512, 576, 961, 964, 960, 976, | |
642, 642, 642, 707, 648, 648, 713, 716, 640, 705, 640, 704, 993, 996, 992, 1008, | |
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 5, 0, 0, 1, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 5, 0, 2, 3, 2, 2, | |
0, 0, 0, 0, 0, 0, 0, 1, 10, 10, 15, 10, 0, 1, 0, 0, | |
0, 0, 0, 0, 2, 2, 2, 3, 0, 0, 5, 0, 0, 1, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 5, 0, 0, 1, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 5, 0, 2, 3, 2, 2, | |
0, 0, 0, 0, 0, 0, 0, 1, 10, 10, 15, 10, 0, 1, 0, 0, | |
0, 0, 0, 0, 2, 2, 2, 3, 0, 0, 5, 0, 0, 1, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 5, 0, 0, 1, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 5, 0, 2, 3, 2, 2, | |
0, 0, 0, 0, 0, 0, 0, 1, 10, 10, 15, 10, 0, 1, 0, 0, | |
0, 0, 0, 0, 2, 2, 2, 3, 0, 0, 5, 0, 0, 1, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 5, 0, 0, 1, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 5, 0, 2, 3, 2, 2, | |
0, 0, 0, 0, 0, 0, 0, 1, 10, 10, 15, 10, 0, 1, 0, 0, | |
0, 0, 0, 0, 2, 2, 2, 3, 0, 0, 5, 0, 0, 1, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 2, | |
0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 3, 0, 0, 1, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 2, | |
0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 3, 0, 0, 1, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 2, | |
0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 3, 0, 0, 1, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 2, | |
0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 3, 0, 0, 1, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 1, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 1, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 8, 12, 9, | |
0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 12, 2, 2, 6, 3, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 1, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 1, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 8, 12, 9, | |
0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 12, 2, 2, 6, 3, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 1, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 1, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 8, 12, 9, | |
0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 12, 2, 2, 6, 3, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 1, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 1, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 8, 12, 9, | |
0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 12, 2, 2, 6, 3, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 12, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 12, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 12, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 12, | |
]; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment