this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: first day

+311
+1
.gitignore
··· 1 + /target
+9
Cargo.toml
··· 1 + [package] 2 + name = "advent-of-code" 3 + version = "0.1.0" 4 + authors = ["Pedro Correa <pedro.correa@dextra-sw.com>"] 5 + edition = "2018" 6 + 7 + # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 8 + 9 + [dependencies]
+200
input/day_01
··· 1 + 1531 2 + 1959 3 + 1344 4 + 1508 5 + 1275 6 + 1729 7 + 1904 8 + 1740 9 + 1977 10 + 1992 11 + 1821 12 + 1647 13 + 1404 14 + 1893 15 + 1576 16 + 1509 17 + 1995 18 + 1637 19 + 1816 20 + 1884 21 + 1608 22 + 1943 23 + 1825 24 + 1902 25 + 1227 26 + 1214 27 + 1675 28 + 1650 29 + 1752 30 + 1818 31 + 862 32 + 2006 33 + 227 34 + 1504 35 + 1724 36 + 1961 37 + 1758 38 + 1803 39 + 1991 40 + 1126 41 + 1909 42 + 1643 43 + 1980 44 + 1889 45 + 811 46 + 1699 47 + 1654 48 + 1734 49 + 1770 50 + 1754 51 + 1828 52 + 1811 53 + 1997 54 + 1767 55 + 1854 56 + 1653 57 + 1800 58 + 1762 59 + 1962 60 + 1797 61 + 877 62 + 1660 63 + 1895 64 + 1939 65 + 1679 66 + 1496 67 + 1606 68 + 1262 69 + 1727 70 + 2005 71 + 1796 72 + 1595 73 + 1846 74 + 1822 75 + 1974 76 + 1829 77 + 1347 78 + 1341 79 + 1875 80 + 1726 81 + 1963 82 + 1659 83 + 337 84 + 1826 85 + 1777 86 + 1523 87 + 1979 88 + 1805 89 + 1987 90 + 2009 91 + 1993 92 + 374 93 + 1546 94 + 1706 95 + 1748 96 + 1743 97 + 1725 98 + 281 99 + 1317 100 + 1839 101 + 1683 102 + 1794 103 + 1898 104 + 1824 105 + 1960 106 + 1292 107 + 1876 108 + 1760 109 + 1956 110 + 1701 111 + 1565 112 + 1680 113 + 1932 114 + 1632 115 + 1494 116 + 1630 117 + 1838 118 + 1863 119 + 1328 120 + 1490 121 + 1751 122 + 1707 123 + 1567 124 + 1917 125 + 1318 126 + 1861 127 + 519 128 + 1716 129 + 1891 130 + 1636 131 + 1684 132 + 1200 133 + 1933 134 + 1911 135 + 1809 136 + 1967 137 + 1731 138 + 1921 139 + 1827 140 + 1663 141 + 1720 142 + 1976 143 + 1236 144 + 1986 145 + 1942 146 + 1656 147 + 1733 148 + 1541 149 + 1640 150 + 1518 151 + 1897 152 + 1676 153 + 1307 154 + 1978 155 + 1998 156 + 1674 157 + 1817 158 + 1845 159 + 1658 160 + 1639 161 + 1842 162 + 1929 163 + 1972 164 + 2010 165 + 1951 166 + 858 167 + 1928 168 + 1562 169 + 1787 170 + 1916 171 + 1561 172 + 1694 173 + 1944 174 + 1922 175 + 1882 176 + 1691 177 + 589 178 + 1940 179 + 1624 180 + 1570 181 + 1557 182 + 1791 183 + 1492 184 + 1919 185 + 1615 186 + 1571 187 + 1657 188 + 1984 189 + 1521 190 + 1766 191 + 1790 192 + 1782 193 + 1874 194 + 1198 195 + 1764 196 + 1278 197 + 1688 198 + 1905 199 + 1786 200 + 1281
+100
src/day_01.rs
··· 1 + pub fn find_two_values_that_sum_to_n(inputs: &Vec<u64>, n: u64) -> (u64, u64) { 2 + let mut initial = 0; 3 + let mut end = inputs.len() - 1; 4 + 5 + let values = loop { 6 + let sum = inputs[initial] + inputs[end]; 7 + if sum > n { 8 + end -= 1; 9 + } else if sum < n { 10 + initial += 1; 11 + } else { 12 + break (inputs[initial], inputs[end]); 13 + } 14 + }; 15 + 16 + values 17 + } 18 + 19 + pub fn find_three_values_that_sum_to_n(inputs: &Vec<u64>, n: u64) -> Option<(u64, u64, u64)> { 20 + for first_item in 0..inputs.len() { 21 + for second_item in (first_item + 1)..inputs.len() { 22 + let sum = inputs[first_item] + inputs[second_item]; 23 + 24 + if sum >= n { 25 + break; 26 + } 27 + 28 + let val3 = n - sum; 29 + 30 + if inputs[second_item + 1..] 31 + .binary_search(&val3) 32 + .is_ok() 33 + { 34 + return Some((inputs[first_item], val3, inputs[second_item])); 35 + } 36 + } 37 + } 38 + 39 + None 40 + } 41 + 42 + #[cfg(test)] 43 + mod tests { 44 + use super::{find_two_values_that_sum_to_n, find_three_values_that_sum_to_n}; 45 + use std::fs::File; 46 + use std::io::{BufReader, BufRead}; 47 + 48 + fn open_test_file() -> Vec<u64> { 49 + let input = File::open("input/day_01").unwrap(); 50 + let buffered = BufReader::new(input); 51 + 52 + let mut content: Vec<u64> = buffered.lines() 53 + .into_iter() 54 + .filter_map(Result::ok) 55 + .map(|number| number.parse::<u64>().unwrap()) 56 + .collect(); 57 + 58 + content.sort(); 59 + 60 + content 61 + } 62 + 63 + #[test] 64 + fn sample_input_first_challenge() { 65 + let sample_input = vec![299, 366, 675, 979, 1456, 1721]; 66 + 67 + let values = find_two_values_that_sum_to_n(&sample_input, 2020); 68 + 69 + assert_eq!((299, 1721), values); 70 + } 71 + 72 + #[test] 73 + fn first_challenge() { 74 + let input = open_test_file(); 75 + 76 + let values = find_two_values_that_sum_to_n(&input, 2020); 77 + 78 + assert_eq!((337, 1683), values); 79 + assert_eq!(567171, values.0 * values.1); 80 + } 81 + 82 + #[test] 83 + fn sample_input_second_challenge() { 84 + let sample_input = vec![299, 366, 675, 979, 1456, 1721]; 85 + 86 + let values = find_three_values_that_sum_to_n(&sample_input, 2020).unwrap(); 87 + 88 + assert_eq!((366, 979, 675), values); 89 + } 90 + 91 + #[test] 92 + fn second_challenge() { 93 + let input = open_test_file(); 94 + 95 + let values = find_three_values_that_sum_to_n(&input, 2020).unwrap(); 96 + 97 + assert_eq!((281, 877, 862), values); 98 + assert_eq!(212428694, values.0 * values.1 * values.2); 99 + } 100 + }
+1
src/lib.rs
··· 1 + pub mod day_01;