Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add submission for Day 1 #2

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions day-1/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Generated by Cargo
# will have compiled files and executables
/target/

# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
Cargo.lock

# These are backup files generated by rustfmt
**/*.rs.bk
200 changes: 200 additions & 0 deletions day-1/day_1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
1833
1949
1745
1863
1422
1980
1695
1233
1407
1971
1486
1922
1802
1689
214
1864
1091
1395
1772
1901
1542
1730
1782
1815
1818
1236
1604
1219
1834
1813
1532
1963
2003
1149
1577
1408
1871
1417
1727
1155
1953
1287
1259
1548
1126
1927
1225
1172
11
1301
1869
1808
1238
1989
1027
321
1564
636
1847
1877
1716
1275
1738
1054
1966
1019
1256
1940
1821
1914
1556
1389
1020
1293
1935
1804
1945
508
1856
1674
1721
1541
1435
1852
1394
2006
1366
1473
1274
623
1701
1842
1954
1999
1195
1246
1967
1153
1851
1294
1152
1812
1732
1030
1956
1132
1948
1865
1835
1231
1975
1759
1843
1379
1657
1267
1062
1850
1817
1543
1805
1252
1974
1161
876
1647
1796
1634
1177
1519
1527
1249
1158
2007
1702
1714
1040
1826
1837
1361
1814
1858
1828
1951
1140
1845
1476
1337
1262
1923
1397
1025
1412
1930
1164
1300
1369
1777
1591
1919
1874
1482
2010
1957
1897
1854
1992
1735
1786
1661
1404
1254
1803
1794
1614
1711
1007
1979
1928
1505
2001
1094
2005
1297
1933
1976
1104
1279
1012
1943
1679
1958
1841
1623
1809
1800
919
1620
1936
1209
56 changes: 55 additions & 1 deletion day-1/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,57 @@
use std::collections::HashSet;
use std::fs::File;
use std::io::prelude::*;
use std::iter::FromIterator;
fn main() {
println!("Hello, world!");
let mut file = File::open("day_1.txt").expect("Unable to open input file");
let mut contents = String::new();
file.read_to_string(&mut contents)
.expect("Unable to read file contents");
let expenses = contents
.lines()
.map(|line| line.parse::<i32>().expect("Unable to parse value to i32"))
.collect();
let expense = find_expenses(&expenses, 2020);
if let Some(val) = expense {
println!("{}", val);
} else {
println!("No 2 expenses found summing to 2020")
}

if let Some(val) = find_expenses_3(&expenses, 2020) {
println!("{}", val)
} else {
println!("No 3 expenses found summing to 2020")
}
}

fn find_expenses(expenses: &Vec<i32>, limit: i32) -> Option<i32> {
let mut part_exps: HashSet<i32> = HashSet::new();
let mut res: Option<i32> = None;
for expense in expenses {
let part_exp = limit - expense;
if part_exps.contains(&part_exp) {
res = Some(part_exp * expense);
break;
} else {
part_exps.insert(*expense);
}
}
res
}

fn find_expenses_3(expenses: &Vec<i32>, limit: i32) -> Option<i32> {
let expenses_set: HashSet<&i32> = HashSet::from_iter(expenses.iter());
let slash_expenses: Vec<i32> = expenses.iter().map(|exp| limit - exp).collect();
let mut res: Option<i32> = None;
for expense in expenses {
for slash_expense in &slash_expenses {
let diff = slash_expense - expense;
if expenses_set.contains(&diff) {
res = Some(diff * expense * (limit - slash_expense));
return res;
}
}
}
res
}