Created
December 9, 2017 21:26
-
-
Save r2p2/3915a18c3e250b3b21fcacbba909f9f1 to your computer and use it in GitHub Desktop.
Advent Of Code Day 5
This file contains hidden or 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
| struct Cpu { | |
| mem : Vec<i32>, | |
| pc : i32, | |
| cycles : u32, | |
| ext : bool, | |
| } | |
| impl Cpu { | |
| pub fn new(mem : &Vec<i32>, extention : bool) -> Cpu { | |
| Cpu { | |
| mem : mem.clone(), | |
| pc : 0, | |
| cycles : 0, | |
| ext : extention, | |
| } | |
| } | |
| pub fn step(&mut self) { | |
| if self.is_oom() { | |
| return | |
| } | |
| let rel_dst = self.mem[self.pc as usize]; | |
| if ! self.ext || rel_dst < 3 { | |
| self.mem[self.pc as usize] = self.mem[self.pc as usize] + 1; | |
| } | |
| else { | |
| self.mem[self.pc as usize] = self.mem[self.pc as usize] - 1; | |
| } | |
| self.pc += rel_dst; | |
| self.cycles += 1; | |
| } | |
| pub fn is_oom(&self) -> bool { | |
| self.pc < 0 || self.pc as usize >= self.mem.len() | |
| } | |
| pub fn cycles(&self) -> u32 { | |
| self.cycles | |
| } | |
| pub fn show(&self) { | |
| println!("cpu: {:?}", self.mem); | |
| } | |
| } | |
| fn main() { | |
| let test_data = vec![0, 3, 0, 1, -3]; | |
| let prod_data = vec![ | |
| 0, | |
| 2, | |
| 0, | |
| 0, | |
| -2, | |
| -2, | |
| -1, | |
| -4, | |
| -5, | |
| -6, | |
| 0, | |
| 1, | |
| -5, | |
| -3, | |
| -10, | |
| -8, | |
| -2, | |
| -13, | |
| -14, | |
| -15, | |
| -8, | |
| -5, | |
| -13, | |
| -16, | |
| -21, | |
| -3, | |
| -14, | |
| -23, | |
| -9, | |
| -11, | |
| -19, | |
| -29, | |
| -2, | |
| -20, | |
| -28, | |
| 1, | |
| -3, | |
| -35, | |
| 1, | |
| -20, | |
| -4, | |
| -37, | |
| -11, | |
| -27, | |
| -33, | |
| -43, | |
| -20, | |
| -5, | |
| -9, | |
| -22, | |
| -47, | |
| -5, | |
| -49, | |
| -13, | |
| -22, | |
| -2, | |
| -2, | |
| -51, | |
| -53, | |
| -22, | |
| -38, | |
| -16, | |
| -37, | |
| -30, | |
| -49, | |
| -48, | |
| -35, | |
| -5, | |
| -42, | |
| -21, | |
| -31, | |
| -61, | |
| -43, | |
| -31, | |
| -72, | |
| -35, | |
| -3, | |
| -31, | |
| -65, | |
| -78, | |
| 2, | |
| -17, | |
| -80, | |
| -10, | |
| -6, | |
| -68, | |
| -69, | |
| -44, | |
| -71, | |
| -78, | |
| -89, | |
| -19, | |
| -22, | |
| -28, | |
| -21, | |
| -7, | |
| -54, | |
| -63, | |
| -48, | |
| -70, | |
| -73, | |
| -52, | |
| -47, | |
| -49, | |
| -2, | |
| -91, | |
| -65, | |
| -76, | |
| -58, | |
| -47, | |
| -45, | |
| -21, | |
| -11, | |
| -112, | |
| -80, | |
| -93, | |
| -98, | |
| -41, | |
| -54, | |
| -105, | |
| -36, | |
| -102, | |
| -75, | |
| -102, | |
| -67, | |
| -100, | |
| -41, | |
| -56, | |
| -19, | |
| -90, | |
| -5, | |
| -66, | |
| -41, | |
| -3, | |
| -32, | |
| -95, | |
| -65, | |
| -44, | |
| -1, | |
| 1, | |
| -62, | |
| -7, | |
| -29, | |
| -61, | |
| -7, | |
| 1, | |
| -63, | |
| 0, | |
| -20, | |
| -58, | |
| -58, | |
| -7, | |
| -54, | |
| -80, | |
| -48, | |
| -51, | |
| -151, | |
| -141, | |
| -37, | |
| -122, | |
| -130, | |
| -132, | |
| -158, | |
| -117, | |
| -63, | |
| -103, | |
| -130, | |
| -116, | |
| -130, | |
| -63, | |
| -134, | |
| -131, | |
| -59, | |
| -30, | |
| -33, | |
| -38, | |
| -127, | |
| -31, | |
| -76, | |
| -35, | |
| -162, | |
| -132, | |
| -121, | |
| -31, | |
| -28, | |
| -2, | |
| -29, | |
| -148, | |
| -156, | |
| -168, | |
| 2, | |
| -33, | |
| -85, | |
| -25, | |
| -18, | |
| -167, | |
| -152, | |
| -22, | |
| -38, | |
| -136, | |
| -83, | |
| -46, | |
| -73, | |
| -139, | |
| -15, | |
| -185, | |
| -197, | |
| -125, | |
| -159, | |
| -80, | |
| -161, | |
| -158, | |
| -82, | |
| -36, | |
| -52, | |
| -210, | |
| -200, | |
| -90, | |
| -199, | |
| -70, | |
| -135, | |
| -195, | |
| -54, | |
| -156, | |
| -46, | |
| -74, | |
| -73, | |
| -221, | |
| -96, | |
| -37, | |
| -189, | |
| -27, | |
| -209, | |
| -30, | |
| -50, | |
| -4, | |
| -74, | |
| -15, | |
| -184, | |
| 2, | |
| -78, | |
| -33, | |
| -37, | |
| -99, | |
| -65, | |
| -196, | |
| -32, | |
| -36, | |
| -188, | |
| -62, | |
| -5, | |
| -244, | |
| -116, | |
| -150, | |
| -118, | |
| -124, | |
| -54, | |
| -28, | |
| -43, | |
| -208, | |
| -205, | |
| -95, | |
| -90, | |
| -129, | |
| -242, | |
| -70, | |
| -144, | |
| -64, | |
| -247, | |
| -170, | |
| -213, | |
| -40, | |
| -173, | |
| -90, | |
| -77, | |
| -139, | |
| -56, | |
| -70, | |
| -120, | |
| -9, | |
| -68, | |
| -78, | |
| -7, | |
| -123, | |
| -103, | |
| -173, | |
| -254, | |
| -249, | |
| -246, | |
| -139, | |
| -192, | |
| -92, | |
| -204, | |
| -71, | |
| -199, | |
| -56, | |
| -63, | |
| -231, | |
| -23, | |
| -115, | |
| -240, | |
| -51, | |
| -200, | |
| -184, | |
| -287, | |
| -98, | |
| -7, | |
| -81, | |
| -275, | |
| -262, | |
| -260, | |
| -32, | |
| -99, | |
| -28, | |
| -199, | |
| -160, | |
| -176, | |
| -210, | |
| -244, | |
| -162, | |
| -82, | |
| -35, | |
| -276, | |
| -71, | |
| -114, | |
| -222, | |
| -294, | |
| -28, | |
| -122, | |
| -110, | |
| -178, | |
| -264, | |
| -239, | |
| -104, | |
| -85, | |
| -11, | |
| -117, | |
| -15, | |
| -69, | |
| -275, | |
| -289, | |
| -212, | |
| 1, | |
| -296, | |
| -285, | |
| -9, | |
| -95, | |
| -149, | |
| -197, | |
| -152, | |
| -141, | |
| -148, | |
| -138, | |
| -173, | |
| -224, | |
| -297, | |
| -299, | |
| -53, | |
| -335, | |
| -36, | |
| -17, | |
| -291, | |
| -25, | |
| -211, | |
| -175, | |
| -104, | |
| -328, | |
| -58, | |
| -15, | |
| -198, | |
| -102, | |
| -122, | |
| -211, | |
| -74, | |
| -117, | |
| -205, | |
| -143, | |
| -353, | |
| -187, | |
| -323, | |
| -172, | |
| -133, | |
| -170, | |
| -41, | |
| -92, | |
| -84, | |
| -72, | |
| -352, | |
| -278, | |
| -164, | |
| -124, | |
| -175, | |
| -113, | |
| -175, | |
| -152, | |
| -160, | |
| -33, | |
| -126, | |
| -226, | |
| -237, | |
| -135, | |
| -156, | |
| -190, | |
| -378, | |
| -168, | |
| -271, | |
| -240, | |
| -111, | |
| -398, | |
| -91, | |
| -243, | |
| -336, | |
| -311, | |
| -368, | |
| -396, | |
| -202, | |
| -262, | |
| -18, | |
| -303, | |
| -363, | |
| -67, | |
| -36, | |
| -284, | |
| -404, | |
| -120, | |
| -97, | |
| -387, | |
| -26, | |
| -135, | |
| -112, | |
| -325, | |
| -82, | |
| -53, | |
| -307, | |
| -410, | |
| -276, | |
| -384, | |
| -64, | |
| -60, | |
| -412, | |
| -335, | |
| -356, | |
| -82, | |
| -134, | |
| -251, | |
| -408, | |
| -342, | |
| -9, | |
| -73, | |
| -27, | |
| -388, | |
| -434, | |
| -80, | |
| -231, | |
| -114, | |
| 0, | |
| -64, | |
| -325, | |
| -251, | |
| -153, | |
| -109, | |
| 1, | |
| -92, | |
| -167, | |
| -89, | |
| -454, | |
| -154, | |
| -13, | |
| -283, | |
| -231, | |
| -357, | |
| -244, | |
| -324, | |
| -134, | |
| -41, | |
| -380, | |
| -169, | |
| -247, | |
| -301, | |
| -297, | |
| -388, | |
| -304, | |
| -135, | |
| -403, | |
| -168, | |
| -314, | |
| -117, | |
| -281, | |
| -76, | |
| -473, | |
| -281, | |
| -322, | |
| -79, | |
| -39, | |
| -129, | |
| -432, | |
| -452, | |
| -183, | |
| -164, | |
| -76, | |
| -382, | |
| -306, | |
| -58, | |
| -126, | |
| -141, | |
| -4, | |
| -3, | |
| -201, | |
| -480, | |
| -443, | |
| -313, | |
| -361, | |
| -279, | |
| -250, | |
| -38, | |
| -1, | |
| -340, | |
| -138, | |
| -69, | |
| -462, | |
| -32, | |
| -68, | |
| -19, | |
| -31, | |
| -271, | |
| -86, | |
| -141, | |
| -331, | |
| -412, | |
| -29, | |
| -369, | |
| -518, | |
| -103, | |
| -502, | |
| -24, | |
| -67, | |
| -130, | |
| -247, | |
| -331, | |
| -535, | |
| -77, | |
| -305, | |
| -153, | |
| -44, | |
| -382, | |
| -309, | |
| -162, | |
| -430, | |
| -480, | |
| -25, | |
| -431, | |
| -78, | |
| -442, | |
| -549, | |
| -184, | |
| -523, | |
| -94, | |
| -380, | |
| -227, | |
| -526, | |
| -209, | |
| -508, | |
| -129, | |
| -36, | |
| -510, | |
| -310, | |
| -133, | |
| -145, | |
| -146, | |
| -244, | |
| -245, | |
| -541, | |
| -362, | |
| -7, | |
| -103, | |
| -565, | |
| -209, | |
| 2, | |
| -140, | |
| -51, | |
| -572, | |
| -28, | |
| -354, | |
| -525, | |
| -148, | |
| -79, | |
| -176, | |
| -34, | |
| -396, | |
| -162, | |
| -374, | |
| -448, | |
| -76, | |
| -87, | |
| -136, | |
| -584, | |
| -179, | |
| -230, | |
| -490, | |
| -361, | |
| -333, | |
| -328, | |
| -34, | |
| -524, | |
| -273, | |
| -195, | |
| -32, | |
| -520, | |
| -260, | |
| -506, | |
| -576, | |
| -422, | |
| -115, | |
| -65, | |
| -285, | |
| -314, | |
| -322, | |
| -146, | |
| -287, | |
| -251, | |
| -585, | |
| -326, | |
| -77, | |
| -250, | |
| -321, | |
| -334, | |
| -560, | |
| -455, | |
| -523, | |
| -90, | |
| -234, | |
| -343, | |
| -457, | |
| -395, | |
| -173, | |
| -560, | |
| -474, | |
| -118, | |
| -244, | |
| -263, | |
| -493, | |
| -597, | |
| -232, | |
| -237, | |
| -619, | |
| -372, | |
| -416, | |
| -142, | |
| -93, | |
| -546, | |
| -538, | |
| -198, | |
| -574, | |
| -250, | |
| -491, | |
| -168, | |
| -47, | |
| -247, | |
| -127, | |
| -641, | |
| -228, | |
| -192, | |
| -545, | |
| -543, | |
| -172, | |
| -220, | |
| -277, | |
| -647, | |
| -87, | |
| -198, | |
| -450, | |
| -247, | |
| -15, | |
| -406, | |
| -562, | |
| -335, | |
| -436, | |
| -665, | |
| -362, | |
| -211, | |
| -582, | |
| -178, | |
| -523, | |
| -232, | |
| -287, | |
| -635, | |
| -33, | |
| -666, | |
| -577, | |
| -54, | |
| -509, | |
| -271, | |
| -561, | |
| -491, | |
| -512, | |
| -212, | |
| -269, | |
| -473, | |
| -460, | |
| -587, | |
| -209, | |
| -538, | |
| -14, | |
| -303, | |
| -360, | |
| -275, | |
| -125, | |
| -373, | |
| -108, | |
| -31, | |
| -314, | |
| -639, | |
| -220, | |
| -52, | |
| -378, | |
| -398, | |
| -369, | |
| -594, | |
| -204, | |
| -423, | |
| -441, | |
| -447, | |
| -27, | |
| -495, | |
| -595, | |
| -352, | |
| -388, | |
| -127, | |
| -424, | |
| -609, | |
| -435, | |
| -626, | |
| -191, | |
| -46, | |
| -363, | |
| -15, | |
| -557, | |
| -433, | |
| -53, | |
| -680, | |
| -129, | |
| -462, | |
| -40, | |
| -598, | |
| -246, | |
| -468, | |
| -600, | |
| -351, | |
| -409, | |
| -89, | |
| -732, | |
| -178, | |
| -472, | |
| -335, | |
| -622, | |
| -563, | |
| -322, | |
| -261, | |
| -63, | |
| -671, | |
| -291, | |
| -591, | |
| -518, | |
| -373, | |
| -615, | |
| -727, | |
| -553, | |
| -166, | |
| -108, | |
| -723, | |
| -77, | |
| -736, | |
| -364, | |
| -765, | |
| -49, | |
| -41, | |
| -99, | |
| -134, | |
| -684, | |
| -281, | |
| -530, | |
| -545, | |
| -372, | |
| -570, | |
| -48, | |
| -288, | |
| -583, | |
| -421, | |
| -601, | |
| -162, | |
| -176, | |
| -414, | |
| -735, | |
| -195, | |
| -786, | |
| -656, | |
| -488, | |
| -744, | |
| -256, | |
| -345, | |
| -152, | |
| -44, | |
| -29, | |
| 1, | |
| -582, | |
| -30, | |
| -351, | |
| -379, | |
| -23, | |
| -48, | |
| -737, | |
| -293, | |
| -525, | |
| -73, | |
| -79, | |
| -531, | |
| -775, | |
| -706, | |
| -59, | |
| -74, | |
| -805, | |
| -311, | |
| -544, | |
| -33, | |
| -603, | |
| -454, | |
| -700, | |
| -506, | |
| -489, | |
| -617, | |
| -485, | |
| -267, | |
| -794, | |
| -13, | |
| -707, | |
| -557, | |
| -368, | |
| -730, | |
| -696, | |
| -728, | |
| -167, | |
| -413, | |
| -639, | |
| -705, | |
| -391, | |
| -11, | |
| -195, | |
| -416, | |
| -788, | |
| -295, | |
| -768, | |
| -192, | |
| -2, | |
| -771, | |
| -675, | |
| -687, | |
| -198, | |
| -568, | |
| -663, | |
| -302, | |
| -732, | |
| -265, | |
| -796, | |
| -370, | |
| -18, | |
| -579, | |
| -771, | |
| -349, | |
| -365, | |
| -214, | |
| -598, | |
| -314, | |
| -752, | |
| -315, | |
| -815, | |
| -487, | |
| -511, | |
| -126, | |
| -6, | |
| -146, | |
| -353, | |
| -787, | |
| -204, | |
| -330, | |
| -517, | |
| -456, | |
| -805, | |
| -4, | |
| -500, | |
| -150, | |
| -242, | |
| -833, | |
| -804, | |
| -663, | |
| -554, | |
| -41, | |
| -607, | |
| -121, | |
| -762, | |
| -892, | |
| -249, | |
| -405, | |
| -403, | |
| -255, | |
| -457, | |
| -613, | |
| -91, | |
| -157, | |
| -890, | |
| -631, | |
| -908, | |
| -544, | |
| -487, | |
| -813, | |
| -541, | |
| -108, | |
| -147, | |
| -702, | |
| -301, | |
| -430, | |
| -66, | |
| -492, | |
| -902, | |
| -284, | |
| -464, | |
| -784, | |
| -312, | |
| -762, | |
| -588, | |
| -17, | |
| -809, | |
| -436, | |
| -483, | |
| -16, | |
| -410, | |
| -180, | |
| -568, | |
| -37, | |
| -687, | |
| -444, | |
| -619, | |
| -211, | |
| -386, | |
| -673, | |
| -600, | |
| -155, | |
| -558, | |
| -849, | |
| -37, | |
| -717, | |
| -867, | |
| -236, | |
| -98, | |
| -165, | |
| -579, | |
| -677, | |
| -691, | |
| -602, | |
| -878, | |
| -555, | |
| -893, | |
| -773, | |
| -395, | |
| -942, | |
| -661, | |
| -850, | |
| -881, | |
| -485, | |
| -312, | |
| -689, | |
| -258, | |
| -899, | |
| -120, | |
| -227, | |
| -349, | |
| -467, | |
| -404, | |
| -45, | |
| -919, | |
| -329, | |
| -365, | |
| -22, | |
| -462, | |
| -632, | |
| -498, | |
| -873, | |
| -288, | |
| -901, | |
| -655, | |
| -321, | |
| -922, | |
| -882, | |
| -416, | |
| -946, | |
| -320, | |
| -5, | |
| -57, | |
| -352, | |
| -711, | |
| -197, | |
| -705, | |
| -737, | |
| -439, | |
| -39, | |
| -252, | |
| -1002, | |
| -617, | |
| -373, | |
| -605, | |
| -887, | |
| -451, | |
| -824, | |
| -455, | |
| -66, | |
| -619, | |
| -18, | |
| -404, | |
| -64, | |
| -736, | |
| -44, | |
| -381, | |
| -447, | |
| -567, | |
| -877, | |
| -411, | |
| -216, | |
| -635, | |
| -598, | |
| -419, | |
| -577, | |
| -142, | |
| -189, | |
| -917, | |
| -692, | |
| -153, | |
| -2, | |
| -116, | |
| -172, | |
| -423, | |
| -886, | |
| -454, | |
| -492, | |
| -491, | |
| -656, | |
| -832, | |
| -1036, | |
| -468, | |
| -23, | |
| -709, | |
| -292, | |
| -668, | |
| -454, | |
| -478, | |
| -302, | |
| -182, | |
| -677, | |
| -904, | |
| -648, | |
| -513, | |
| -901, | |
| -331, | |
| -750, | |
| -445, | |
| -758, | |
| -842, | |
| -372, | |
| -471, | |
| -109, | |
| -239, | |
| -704, | |
| -817, | |
| -340, | |
| -591, | |
| -40 | |
| ]; | |
| let mut cpu = Cpu::new(&prod_data, true); | |
| while ! cpu.is_oom() { | |
| cpu.step(); | |
| } | |
| println!("cycles: {}", cpu.cycles()); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment