y2024d9
This commit is contained in:
parent
0dec0bbf82
commit
99430e8e26
598
y2016/resources/6_input.txt
Normal file
598
y2016/resources/6_input.txt
Normal file
@ -0,0 +1,598 @@
|
||||
uzmnhwye
|
||||
jvyyfmhr
|
||||
eiwokyzj
|
||||
rghqvfsx
|
||||
pqjbfqey
|
||||
ceqkjgny
|
||||
kbpuzvof
|
||||
epyeucto
|
||||
bqhqvbef
|
||||
tqduwleg
|
||||
ysadziyj
|
||||
onvxrwcl
|
||||
dwbhjkmx
|
||||
qvgqewkr
|
||||
qazepxhd
|
||||
bqtuexvi
|
||||
vieyforp
|
||||
kizhadeh
|
||||
ofpraxry
|
||||
xamrsokr
|
||||
jrrottpf
|
||||
gweaulph
|
||||
gyctgzpo
|
||||
mkddcnuk
|
||||
llbxmhbt
|
||||
mghoubct
|
||||
arhrpksk
|
||||
hzeshlue
|
||||
loygkukn
|
||||
asakqobo
|
||||
vwvjnarb
|
||||
pmqcgzkj
|
||||
soucxjes
|
||||
szsuqdss
|
||||
hyjyxtyi
|
||||
qjsjwjuf
|
||||
cvkuyeit
|
||||
qvlmnzih
|
||||
distpoga
|
||||
dtlpvlub
|
||||
fszspsdu
|
||||
zkpxuozx
|
||||
yumhqgty
|
||||
wetfiqij
|
||||
ozpmcegi
|
||||
ylpbjbru
|
||||
rqksydxz
|
||||
ifayduog
|
||||
xqlhyrhl
|
||||
wrolqshx
|
||||
cliyrafn
|
||||
jtuerdyy
|
||||
damyknzr
|
||||
olbtisgv
|
||||
sdlvkpjg
|
||||
tvfvrshv
|
||||
ugywkitq
|
||||
idjjqpzc
|
||||
eeowwemi
|
||||
npplofdm
|
||||
ouzjrlph
|
||||
foawnibc
|
||||
xcdcepzd
|
||||
irqsuacz
|
||||
xtnmuzqp
|
||||
sgsxsjoj
|
||||
qhkpbuvq
|
||||
tsvwtvtz
|
||||
lgqaycod
|
||||
adttxkwp
|
||||
kjcyqgoc
|
||||
bfkxbgxq
|
||||
iiszhwbf
|
||||
cgnihihb
|
||||
gsgvjypz
|
||||
lgcgjccw
|
||||
rdkltabk
|
||||
wnymgwbv
|
||||
jdfqdvis
|
||||
yxtuyupx
|
||||
nsvafgfo
|
||||
ztmbgjux
|
||||
axugvumx
|
||||
tstqlnye
|
||||
eeyqirow
|
||||
ovaityku
|
||||
cdqyjdkz
|
||||
vuhkumlu
|
||||
rwebkmlj
|
||||
prncgnbt
|
||||
ftuhvnow
|
||||
lhmnkhmy
|
||||
unyaizoz
|
||||
ezshlifw
|
||||
bllzrnar
|
||||
uxblibez
|
||||
fpkclnns
|
||||
zqocayvl
|
||||
umoistgi
|
||||
skmgbxls
|
||||
jgtlmsux
|
||||
nulmpeow
|
||||
rxeyoiwy
|
||||
xpqouwhq
|
||||
ogepecdf
|
||||
paeqseqk
|
||||
auntemaj
|
||||
kyorwfkl
|
||||
tnvbjicg
|
||||
xazuvzok
|
||||
noiksasa
|
||||
tvgkzpcl
|
||||
jqzwlyvl
|
||||
zcbzkese
|
||||
notfmgol
|
||||
vceqbfbg
|
||||
qfeabvhv
|
||||
hejfluqw
|
||||
yoxvxdes
|
||||
pbgiqytr
|
||||
tntrwezn
|
||||
duadnppa
|
||||
nqnwslev
|
||||
okmdpmyr
|
||||
eljfthrk
|
||||
fymbhtes
|
||||
cdyjpcnd
|
||||
qmaihzyz
|
||||
cifmitdm
|
||||
ksjznrxd
|
||||
jdcmoqpo
|
||||
caicyvmw
|
||||
zhgsnmcv
|
||||
idxndssh
|
||||
ppykgzto
|
||||
hvkjejgz
|
||||
dezkqhas
|
||||
ddfpqxfu
|
||||
zabdhasf
|
||||
qkhgknfl
|
||||
gqrzmfdv
|
||||
lnzrgbwm
|
||||
wrytspbl
|
||||
bsjzukak
|
||||
kfpcoyua
|
||||
zzbpiifh
|
||||
ygrhxtug
|
||||
zedbugkr
|
||||
sienwiyq
|
||||
vpophmnv
|
||||
kvrgegtp
|
||||
azpkkojs
|
||||
jgwlwtjo
|
||||
azwbmxgy
|
||||
wblpgwvu
|
||||
jwkustki
|
||||
fmjixbct
|
||||
ghkclypp
|
||||
erczaojx
|
||||
iqmhmlkf
|
||||
yfqnajza
|
||||
vhpadprc
|
||||
hjicylfh
|
||||
mwbavklg
|
||||
txhtbhbm
|
||||
pufqjjei
|
||||
zazwoxia
|
||||
yhzexooi
|
||||
vuqtvkuv
|
||||
mppianmz
|
||||
tscbvqrg
|
||||
hajzaamg
|
||||
urqizitm
|
||||
ircgrvlo
|
||||
jgzcpbjo
|
||||
erpiqxlw
|
||||
xvnqbjqc
|
||||
xauztetw
|
||||
bcytezdp
|
||||
sqwrbgjb
|
||||
tinldoyz
|
||||
rdkbfbew
|
||||
kkpmcqid
|
||||
fjiztfcy
|
||||
ybdoeafy
|
||||
burdrehw
|
||||
uyredvvm
|
||||
bwvobekv
|
||||
fniozvjr
|
||||
ifaoxink
|
||||
zaoujdun
|
||||
bykdovxw
|
||||
wasdjrzy
|
||||
uxokzwlb
|
||||
votizlio
|
||||
leoxtnlc
|
||||
ymcesetp
|
||||
mibahaht
|
||||
ldgfbbar
|
||||
aaegvpyn
|
||||
etgdecrd
|
||||
cbqerkil
|
||||
myldihga
|
||||
aycsmksz
|
||||
sbdprnva
|
||||
ytlllxsq
|
||||
shxuxktj
|
||||
otxymese
|
||||
hygjpofa
|
||||
lozdcvfn
|
||||
ulrvezsj
|
||||
elflfepx
|
||||
xtyqbbaz
|
||||
wombapna
|
||||
uesqfrfo
|
||||
amagopph
|
||||
tdipmqwo
|
||||
qlfhnwxp
|
||||
qycwncct
|
||||
haofnvsq
|
||||
bwiyooof
|
||||
fdftgidb
|
||||
xzntthfa
|
||||
ouzddcqt
|
||||
fywssrae
|
||||
ywmmvhut
|
||||
gphtugjk
|
||||
qxfymjuh
|
||||
dbnxhxac
|
||||
mvwunqfa
|
||||
tfrrjcnr
|
||||
lycvubak
|
||||
pfxofasn
|
||||
xiacctnn
|
||||
vrlncgrn
|
||||
wjkeqsav
|
||||
vskxlpkf
|
||||
iaknsppj
|
||||
kzexhdzd
|
||||
jesglqmn
|
||||
lkqtzgzd
|
||||
wnwksqbf
|
||||
htqrcgyq
|
||||
jjynwudx
|
||||
lawnwevw
|
||||
cfewlcwu
|
||||
ledcrfvq
|
||||
zlfpilwv
|
||||
jckvhaly
|
||||
xhggozqd
|
||||
hrnuxzwq
|
||||
ajominjf
|
||||
bkoaxnil
|
||||
zcjslwqq
|
||||
vgexcqtl
|
||||
ddfannml
|
||||
ufbfceuh
|
||||
vuibklnx
|
||||
tmrtgqxx
|
||||
izxwfael
|
||||
njtzahxu
|
||||
bzwyyycr
|
||||
ggxoqbvo
|
||||
oysvzvoi
|
||||
ejxxjhjl
|
||||
unwkfzyr
|
||||
nwycafcu
|
||||
lfqieudu
|
||||
natvibge
|
||||
qzrnpxew
|
||||
mqjbtpmh
|
||||
ixdsjywf
|
||||
nmilafsn
|
||||
tfwubeot
|
||||
ccmrtlfs
|
||||
uajfiusi
|
||||
jhinkyxm
|
||||
qwcvvimb
|
||||
wlbhjanf
|
||||
vdcedtkw
|
||||
uiibfsbh
|
||||
hkgxmybs
|
||||
lsqlrxll
|
||||
ihvodcrb
|
||||
ewrfalkm
|
||||
kelnqkcd
|
||||
vroxnjwh
|
||||
jeneowpg
|
||||
ozivuper
|
||||
fxatuncj
|
||||
dchmobvr
|
||||
oyxqiszo
|
||||
uuyxgshp
|
||||
sxcbjmhu
|
||||
dorsqxgt
|
||||
urygoghb
|
||||
lolotlqh
|
||||
ytaalnkv
|
||||
bcspchnq
|
||||
wbdululm
|
||||
vzqwkjix
|
||||
hinyyoag
|
||||
qkyqkdit
|
||||
lolhbfkp
|
||||
zlwjxdoa
|
||||
yudtkctc
|
||||
xcvazkiu
|
||||
ttvfuzxr
|
||||
rqfrdkcm
|
||||
rihwltdh
|
||||
qcpjwsjz
|
||||
bazpmmmx
|
||||
grxiwhag
|
||||
cbljykhx
|
||||
weooldcv
|
||||
lumfsfwj
|
||||
kiunrfgy
|
||||
fafbvyjx
|
||||
acpzgmgh
|
||||
pdyhmtvq
|
||||
ssismufm
|
||||
pdlzydrn
|
||||
sxxbtkqi
|
||||
gnuxwgui
|
||||
wcuguqju
|
||||
jkjkdkph
|
||||
prpmfknq
|
||||
csuabssx
|
||||
khymlrkm
|
||||
muavohgo
|
||||
sqgzadar
|
||||
svzwomsw
|
||||
zfscsyyh
|
||||
rhuwuqij
|
||||
otxcyjya
|
||||
ftecgqvj
|
||||
nbdrbipz
|
||||
sppapkeb
|
||||
xxysrbxg
|
||||
pkvvzfwx
|
||||
mpadytha
|
||||
iqbdgpwm
|
||||
aqisvbnk
|
||||
ipckdhwl
|
||||
rkivzxzk
|
||||
tkiykice
|
||||
jmpfxvqq
|
||||
shrwhvwl
|
||||
uxlgxmgf
|
||||
nhjjylml
|
||||
ujvjqgao
|
||||
yekgzrqv
|
||||
ujbnxfya
|
||||
pmtovthi
|
||||
hsazctam
|
||||
hhmesojw
|
||||
vgxomjtg
|
||||
ucudhxze
|
||||
kzgkdvlj
|
||||
vtjkjgrj
|
||||
fticzjct
|
||||
dwulyubi
|
||||
fyfiwbkt
|
||||
orcuggcq
|
||||
kvxqcwfz
|
||||
vvjeoumv
|
||||
xsyobzop
|
||||
iszghxbl
|
||||
kxxvtiuf
|
||||
klwsferz
|
||||
emzmpfvt
|
||||
gnsxgbib
|
||||
nnrmtcdj
|
||||
qqnfngkm
|
||||
lkdxvyxe
|
||||
vkeaswre
|
||||
kfvpnnpd
|
||||
mozumbpg
|
||||
omwjojxc
|
||||
sjmkijsk
|
||||
fivvusjy
|
||||
esmktnbm
|
||||
mbkizlzq
|
||||
mscagsvf
|
||||
twpwpsbj
|
||||
okwrcirc
|
||||
hcexoyjh
|
||||
tzhxxmkr
|
||||
zfhzgnoe
|
||||
soldpmdf
|
||||
ejikyuba
|
||||
cudjzzmg
|
||||
xfwpcilo
|
||||
vpjqpuyk
|
||||
oprtpooj
|
||||
djzadomw
|
||||
shuqtulp
|
||||
rlspstxi
|
||||
gxbfmsqv
|
||||
qoojsatd
|
||||
rvupwphy
|
||||
zfgqbrwb
|
||||
ninnufxt
|
||||
annvdtct
|
||||
phwyfyjt
|
||||
qxwfsujq
|
||||
bwrbuwxs
|
||||
ihwlqjbr
|
||||
zylvjunv
|
||||
bmmsjzxk
|
||||
rvfidswe
|
||||
fjgovnmk
|
||||
mogllpfx
|
||||
ddsefzqd
|
||||
wrssovrq
|
||||
yaqhesmy
|
||||
cvvcswup
|
||||
kpmipygw
|
||||
xrjtbhze
|
||||
nqucxgea
|
||||
kpbbhdhz
|
||||
fhdsgcdm
|
||||
pmjidvmk
|
||||
szbhczpa
|
||||
tchjtqzu
|
||||
qzorzcpu
|
||||
mfnvijyy
|
||||
wuutyddc
|
||||
ysupoemc
|
||||
dunwqmbn
|
||||
mocewxzi
|
||||
qiwracmo
|
||||
rmbbhvud
|
||||
cltnmdiy
|
||||
ruutdaeo
|
||||
wihpnryn
|
||||
mgajpkys
|
||||
iahfwmuw
|
||||
vuocxwiu
|
||||
mbygminp
|
||||
kmkjaead
|
||||
hxnztxbh
|
||||
flnxmtbj
|
||||
nkbrfcqg
|
||||
blkvlojl
|
||||
ppdielzk
|
||||
ssclzhip
|
||||
qvvymayo
|
||||
cthwrgfx
|
||||
rjqdlnep
|
||||
hccjexgw
|
||||
cbclqcga
|
||||
cxjjdgvu
|
||||
puthjawq
|
||||
gvvzvjac
|
||||
wtxxtwef
|
||||
retdqdpn
|
||||
hifhvrbd
|
||||
jctkaclz
|
||||
bftzisge
|
||||
wofmrtss
|
||||
fvojyyar
|
||||
cbnhtlqp
|
||||
jqozxhny
|
||||
ybgsemfv
|
||||
ooaqxove
|
||||
gqvrbkqy
|
||||
ppdcrmte
|
||||
clfxucnu
|
||||
toenbwtd
|
||||
jzmywsup
|
||||
inqsaqid
|
||||
aehpaztz
|
||||
gragbfrw
|
||||
dlrjyzmu
|
||||
sblqqwsb
|
||||
gzruigwt
|
||||
aplpzlui
|
||||
wmrpyrjm
|
||||
xyxwaeog
|
||||
bhkpwzvo
|
||||
egdpnujd
|
||||
hbbdjlws
|
||||
mbphcthb
|
||||
bykhifcd
|
||||
rrwkidpm
|
||||
iztrhfnf
|
||||
nydlpqze
|
||||
dgulsfzt
|
||||
eludirwj
|
||||
iyvbrttp
|
||||
aerocrzf
|
||||
ejaearsc
|
||||
dxruknqe
|
||||
zmhbnkls
|
||||
qnsykqvu
|
||||
gotmslog
|
||||
nbprjbxc
|
||||
gtlykrzb
|
||||
egethaib
|
||||
flomperi
|
||||
xcamglue
|
||||
zceleqek
|
||||
cnvgfdwf
|
||||
dchfyogi
|
||||
ygtzquvk
|
||||
xxxunqji
|
||||
amqehkhx
|
||||
lsacrdtm
|
||||
ybnapfyu
|
||||
aiukmmqc
|
||||
pepgjpqa
|
||||
uermcxac
|
||||
kapeodph
|
||||
ozdanagr
|
||||
pdjfzxdb
|
||||
ioospvis
|
||||
uhxuoyrd
|
||||
jnnlwvdv
|
||||
gnxaqkly
|
||||
zsiucnpt
|
||||
gtveajfy
|
||||
tudfnxqg
|
||||
pwugrcdu
|
||||
obeeyadl
|
||||
yhybzygs
|
||||
enbwkfwn
|
||||
iiziwmrj
|
||||
rmldlsrp
|
||||
wfqifmcn
|
||||
aehofonk
|
||||
bvxavoez
|
||||
fwelvohr
|
||||
eviaivqh
|
||||
yjwslphn
|
||||
wjdocdoc
|
||||
dqgiuhli
|
||||
geinepsk
|
||||
npaemvap
|
||||
ngnqfbvw
|
||||
pobgwlhb
|
||||
zufxdrkb
|
||||
ggfdeuts
|
||||
defhitoc
|
||||
ndzvtils
|
||||
oysmqhnq
|
||||
tdmsbwqi
|
||||
wwfvshad
|
||||
btkerpuz
|
||||
gwqvhvto
|
||||
nflozwyk
|
||||
tbiexdrg
|
||||
okshetxm
|
||||
mbgrhojh
|
||||
eluzaxsb
|
||||
hwqtiqwr
|
||||
yrsddclj
|
||||
wrsfnbdb
|
||||
klfmnoqq
|
||||
ztmkgmgg
|
||||
xnkrekxs
|
||||
qmdwfeuo
|
||||
jwzfwhkv
|
||||
nxjlnbiy
|
||||
vdhnrrxi
|
||||
smgjcxcp
|
||||
aphleuvc
|
||||
ljbadhdn
|
||||
jkbnkinm
|
||||
mjtovsxa
|
||||
xpjsorxu
|
||||
gicuerdc
|
||||
azrhkarl
|
||||
hpgwlzge
|
||||
bweruitv
|
||||
vnoglwep
|
||||
pjwqtqdb
|
||||
myvyrjye
|
||||
xiqzlwfn
|
||||
zqpnhjnn
|
||||
hkzycpkb
|
||||
fmoryqng
|
||||
dfembrgo
|
||||
dvguwian
|
||||
rwgwffsn
|
||||
ixgfpslt
|
||||
rkxnxyff
|
||||
ljankcms
|
||||
kksozyit
|
||||
cncygufc
|
||||
agsevmlz
|
||||
ectijrxs
|
||||
rhvtaplx
|
||||
hxddxhda
|
||||
mpvfoaim
|
||||
rtxkcevq
|
||||
qythgaev
|
||||
lnhqdrzc
|
20
y2016/src/bin/d6.rs
Normal file
20
y2016/src/bin/d6.rs
Normal file
@ -0,0 +1,20 @@
|
||||
use std::fs;
|
||||
|
||||
use y2016::days::d6;
|
||||
|
||||
fn main() {
|
||||
part1();
|
||||
part2();
|
||||
}
|
||||
|
||||
fn part1() {
|
||||
let root = env!("CARGO_MANIFEST_DIR");
|
||||
let content = fs::read_to_string(format!("{root}/resources/6_input.txt")).unwrap();
|
||||
println!("{}", d6::process_part1(&content));
|
||||
}
|
||||
|
||||
fn part2() {
|
||||
let root = env!("CARGO_MANIFEST_DIR");
|
||||
let content = fs::read_to_string(format!("{root}/resources/6_input.txt")).unwrap();
|
||||
println!("{}", d6::process_part2(&content));
|
||||
}
|
73
y2016/src/days/d6.rs
Normal file
73
y2016/src/days/d6.rs
Normal file
@ -0,0 +1,73 @@
|
||||
use std::collections::HashMap;
|
||||
|
||||
pub fn process_part1(input: &str) -> String {
|
||||
let line_len = input.find("\n").unwrap();
|
||||
let mut rows: Vec<HashMap<char, u32>> = vec![HashMap::new(); line_len];
|
||||
input.lines().for_each(|line| {
|
||||
for (idx, chara) in line.chars().enumerate() {
|
||||
rows[idx]
|
||||
.entry(chara)
|
||||
.and_modify(|count| *count += 1)
|
||||
.or_insert(1);
|
||||
}
|
||||
});
|
||||
let mut res = String::new();
|
||||
for row in rows {
|
||||
let most_common = row.iter().max_by(|a, b| a.1.cmp(b.1)).unwrap().0;
|
||||
res.push(*most_common);
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
pub fn process_part2(input: &str) -> String {
|
||||
let line_len = input.find("\n").unwrap();
|
||||
let mut rows: Vec<HashMap<char, u32>> = vec![HashMap::new(); line_len];
|
||||
input.lines().for_each(|line| {
|
||||
for (idx, chara) in line.chars().enumerate() {
|
||||
rows[idx]
|
||||
.entry(chara)
|
||||
.and_modify(|count| *count += 1)
|
||||
.or_insert(1);
|
||||
}
|
||||
});
|
||||
let mut res = String::new();
|
||||
for row in rows {
|
||||
let most_common = row.iter().max_by(|a, b| b.1.cmp(a.1)).unwrap().0;
|
||||
res.push(*most_common);
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
const INPUT: &str = "eedadn
|
||||
drvtee
|
||||
eandsr
|
||||
raavrd
|
||||
atevrs
|
||||
tsrnev
|
||||
sdttsa
|
||||
rasrtv
|
||||
nssdts
|
||||
ntnada
|
||||
svetve
|
||||
tesnvt
|
||||
vntsnd
|
||||
vrdear
|
||||
dvrsen
|
||||
enarar";
|
||||
|
||||
#[test]
|
||||
fn part1() {
|
||||
let result = process_part1(INPUT);
|
||||
assert_eq!(result, *"easter");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn part2() {
|
||||
let result = process_part2(INPUT);
|
||||
assert_eq!(result, *"advent");
|
||||
}
|
||||
}
|
@ -7,3 +7,5 @@ pub mod d3;
|
||||
pub mod d4;
|
||||
|
||||
pub mod d5;
|
||||
|
||||
pub mod d6;
|
||||
|
1
y2024/resources/9_input.txt
Normal file
1
y2024/resources/9_input.txt
Normal file
File diff suppressed because one or more lines are too long
20
y2024/src/bin/d9.rs
Normal file
20
y2024/src/bin/d9.rs
Normal file
@ -0,0 +1,20 @@
|
||||
use std::fs;
|
||||
|
||||
use y2024::days::d9;
|
||||
|
||||
fn main() {
|
||||
part1();
|
||||
part2();
|
||||
}
|
||||
|
||||
fn part1() {
|
||||
let root = env!("CARGO_MANIFEST_DIR");
|
||||
let content = fs::read_to_string(format!("{root}/resources/9_input.txt")).unwrap();
|
||||
println!("{}", d9::process_part1(&content));
|
||||
}
|
||||
|
||||
fn part2() {
|
||||
let root = env!("CARGO_MANIFEST_DIR");
|
||||
let content = fs::read_to_string(format!("{root}/resources/9_input.txt")).unwrap();
|
||||
println!("{}", d9::process_part2(&content));
|
||||
}
|
129
y2024/src/days/d9.rs
Normal file
129
y2024/src/days/d9.rs
Normal file
@ -0,0 +1,129 @@
|
||||
pub fn process_part1(input: &str) -> u64 {
|
||||
let mut ids = Vec::new();
|
||||
for (file_id, chunk) in input.trim_end().as_bytes().chunks(2).enumerate() {
|
||||
let byte = chunk[0];
|
||||
for _ in 0..(byte - 48) {
|
||||
ids.push(file_id.to_string());
|
||||
}
|
||||
if let Some(&byte) = chunk.get(1) {
|
||||
for _ in 0..(byte - 48) {
|
||||
ids.push(".".into());
|
||||
}
|
||||
}
|
||||
}
|
||||
let mut ordered = Vec::new();
|
||||
while !ids.is_empty() {
|
||||
let id = ids.remove(0);
|
||||
if id == "." {
|
||||
while let Some(id) = ids.pop() {
|
||||
if id != "." {
|
||||
ordered.push(id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ordered.push(id);
|
||||
}
|
||||
}
|
||||
let mut res = 0;
|
||||
for (multiplier, id) in ordered.iter().enumerate() {
|
||||
res += multiplier * id.parse::<usize>().unwrap();
|
||||
}
|
||||
res as u64
|
||||
}
|
||||
|
||||
pub fn process_part2(input: &str) -> u64 {
|
||||
let mut ids = Vec::new();
|
||||
for (file_id, chunk) in input.trim_end().as_bytes().chunks(2).enumerate() {
|
||||
let byte = chunk[0];
|
||||
ids.push((file_id.to_string(), byte - 48));
|
||||
if let Some(&byte) = chunk.get(1) {
|
||||
ids.push((".".into(), byte - 48));
|
||||
}
|
||||
}
|
||||
let mut from_idx = ids.len() - 1;
|
||||
loop {
|
||||
if from_idx == 0 {
|
||||
break;
|
||||
}
|
||||
let (id, size) = ids[from_idx].clone();
|
||||
if id == *"." {
|
||||
from_idx -= 1;
|
||||
continue;
|
||||
}
|
||||
let to_idx = if let Some(idx) = ids.iter().position(|id| id.1 >= size && id.0 == ".") {
|
||||
idx
|
||||
} else {
|
||||
from_idx -= 1;
|
||||
continue;
|
||||
};
|
||||
if from_idx < to_idx {
|
||||
from_idx -= 1;
|
||||
continue;
|
||||
}
|
||||
let free_space = ids[to_idx].1;
|
||||
match size.cmp(&free_space) {
|
||||
std::cmp::Ordering::Less => {
|
||||
let remaining_free_space = free_space - size;
|
||||
ids[to_idx].1 = remaining_free_space;
|
||||
ids[from_idx] = (".".to_string(), size);
|
||||
ids.insert(to_idx, (id.clone(), size));
|
||||
from_idx -= 1;
|
||||
}
|
||||
std::cmp::Ordering::Equal => {
|
||||
ids[to_idx] = (id.clone(), size);
|
||||
ids[from_idx] = (".".to_string(), size);
|
||||
from_idx -= 1;
|
||||
}
|
||||
std::cmp::Ordering::Greater => {
|
||||
from_idx -= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
let mut res = 0;
|
||||
let mut multiplier = 0;
|
||||
for (id, size) in ids.into_iter() {
|
||||
if id == *"." {
|
||||
multiplier += size as usize;
|
||||
continue;
|
||||
}
|
||||
for _idx in 0..size as usize {
|
||||
res += multiplier * id.parse::<usize>().unwrap();
|
||||
multiplier += 1;
|
||||
}
|
||||
}
|
||||
res as u64
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
const INPUT_1: &str = "12345";
|
||||
const INPUT_2: &str = "2333133121414131402";
|
||||
const INPUT_3: &str = "23331331214141314020202";
|
||||
|
||||
#[test]
|
||||
fn part1_simple() {
|
||||
let result = process_part1(INPUT_1);
|
||||
assert_eq!(result, 60);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn part1_complex_1() {
|
||||
let result = process_part1(INPUT_2);
|
||||
assert_eq!(result, 1928);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn part1_complex_2() {
|
||||
let result = process_part1(INPUT_3);
|
||||
assert_eq!(result, 2842);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn part2() {
|
||||
let result = process_part2(INPUT_2);
|
||||
assert_eq!(result, 2858)
|
||||
}
|
||||
}
|
@ -1,15 +1,9 @@
|
||||
pub mod d1;
|
||||
|
||||
pub mod d2;
|
||||
|
||||
pub mod d3;
|
||||
|
||||
pub mod d4;
|
||||
|
||||
pub mod d5;
|
||||
|
||||
pub mod d6;
|
||||
|
||||
pub mod d7;
|
||||
|
||||
pub mod d8;
|
||||
pub mod d9;
|
||||
|
Loading…
Reference in New Issue
Block a user