Compare commits
6 Commits
6b02bdfb80
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 0cb627b873 | |||
| d7ee7bdf6c | |||
| 6f37408485 | |||
| 5704c6bd8d | |||
| d9ae111b2c | |||
| 16c6f4bcc3 |
8
december_15/Cargo.toml
Normal file
8
december_15/Cargo.toml
Normal file
@@ -0,0 +1,8 @@
|
||||
[package]
|
||||
name = "december_15"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
10
december_15/example.txt
Normal file
10
december_15/example.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
1163751742
|
||||
1381373672
|
||||
2136511328
|
||||
3694931569
|
||||
7463417111
|
||||
1319128137
|
||||
1359912421
|
||||
3125421639
|
||||
1293138521
|
||||
2311944581
|
||||
3
december_15/example2.txt
Normal file
3
december_15/example2.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
19999
|
||||
19111
|
||||
11191
|
||||
100
december_15/input.txt
Normal file
100
december_15/input.txt
Normal file
@@ -0,0 +1,100 @@
|
||||
1964778752979887222739789777935919929996793679617497991954953881381939846468999159686925929898196249
|
||||
8759189989991999115121999113211788158983883981916933973182798769168715496674423979199573198873854989
|
||||
2916817799179797949192724497956464139512861918986689421481689714471669982489852996119597949888649993
|
||||
3429492714828168979771398891678818935485694839763399796988678112189583269768679792191755489996819818
|
||||
7956995159237939293319975584779958986526992814763894821138352743589946198365389719619992176545838879
|
||||
6894733223797749829183642911499532916859775927195417482554567729418599872969862136349799419994687895
|
||||
2759239975966982742446721118515649658718899983621767679758422696981391642329892996989459995669798697
|
||||
4871846878568885679911989919675587272979337779997878941142835988221478131873935963978729297886139169
|
||||
7999959169281333751174889518989895572896163199221368686388799926519794699799923174194941238928589796
|
||||
9673899872976699541997289776451458192595451289851921695168998599956996287274974589993895999911968979
|
||||
2189799897986439761837888853324829341216529742299672852941871997559375864789386122271746495896794791
|
||||
9938386946518957531699878681584584964918976817297812956462471969177758385919189982296399838923928939
|
||||
4275189819452758426829188964681958425813889249999799196398898929428939818471881449812315725979925948
|
||||
7839191997723839711989597539332999799698291856397972249727787849495896789269554411391811373488912969
|
||||
9991932961553536898969691427116875526215696896938613596999539698956698498155643927131628839711918729
|
||||
9689481119559879668959932516469834984764657446183977948691462949415366788398622963991783197189499749
|
||||
7893891719779792989279958991976795699181589597959138897764521861982247998328792718743913147198513966
|
||||
9229398293621962999951889798191298941966911561894718699997528891728499799769299594844878826379212229
|
||||
8114755891869969978798891934912769591996819776399989765797896128921791896759288599146617996799938892
|
||||
5972439691937789543995348496582934955419378443786946743176772134892759981289214999252492789994912519
|
||||
9999878284296198978291425928754817436271169898969986169389621659848796896718349699944959841976887979
|
||||
8995172699256977369819859998243969598411799887371899978965729218569995255335578989297761711979697279
|
||||
5964929613931779238784627758412212181166181675691169528311979637962893954537763982917915779197598919
|
||||
9329999971496358947166338919899899416981161169866529652865685792919877767118176597496599597196924899
|
||||
7271975999674778999171971959191993946848163989989997969948924863192929224488787991896699281749827981
|
||||
7699689989198719837571649869869997239499861716884656858395517769988394779311619459491989383499197268
|
||||
8138528939235689938575248913721989783488836178269759533138953836592979449873625149573891997212479889
|
||||
1194186961217198193988498992355788419825494192989525159689798712975319599971827597742959843955911979
|
||||
9991363768629695336799575699999721989989917969232982174499837972549921599924797598996111985425191495
|
||||
6224199895942439267375819799214473982598281689668323916911879197967989217151818849734921868839889953
|
||||
2797891953385665166198975159893818966216198377578712873269784989492119916357987941796591437988938957
|
||||
9779821394499494593989986959996998692998298791629567995816849947192476378699325431774652164876319399
|
||||
8279883158919549641581758481988868892673899854755757655799879479727992921235786698877699587719557817
|
||||
8994986299499779981878149737914546992923788331973355557931912813487414849169586776188929999316996999
|
||||
3499941923877958919184968172278689699896918797161441492525291995817947177988899429956927999874117615
|
||||
9518735698739793988999949283669535854518279898395156698682921779151989183918899376431178719847211917
|
||||
8959569562449992579869539699738394615824477992978595158952999831143599733757959319878895488818466994
|
||||
4771221597963589993951489919897987919972847979856478899532499699995165221761395991179429879943877199
|
||||
9358396988965649992967998569567913995272198899939966249136998289878785998148692727934781927566617716
|
||||
9695897663786123274922829519725449941162197499897582997999837678932164486457189978772888188949785949
|
||||
2229629789279799955899167476898994839159369899619998578354226667829287299556269181995691312568798773
|
||||
8986191398899845547849998899881493546398886844887168962985891999929956754259992377999937693899755175
|
||||
7175873171397179677593515237961898681148199598839711877778496983153317579398682998411683978987881997
|
||||
1298538869811849383999117371323559984927944988899199699928999419957218968156974484868752469129262989
|
||||
9731561977991246175968959799134367415782961298978241777998529577773489176786529999298276919819282278
|
||||
5139485996594989893145888798563499416819996991199156853594539997297977872962913739949965145219399965
|
||||
8983481898839581176999892935177977798924747335789486142969991819778229398776888781189418591899219928
|
||||
5991279788897976346748147414862695456951589321587991882347718411894488859198898259759815513119791569
|
||||
8227945959958298837959782585999896633581225814664916697479824997438358779792895774979843752914453972
|
||||
4969151368678265681558739735791991537887198957112191497717769345618978852795923288497297897895929999
|
||||
1519799684949231934618481659618992524489812446699528583999896615941151949985499999993886929639497791
|
||||
1919828829886491381185477846954179789637515617553898959167959989111765297739994219233999883196929166
|
||||
9998739993999963799842299399178749796575293889914288923995766963218597719191435991789849824475293761
|
||||
6292981699893999814978995879985986732598297996514589923713342895999879593853119193717396792997847699
|
||||
9995978699659218782765696299479144716993781213851813753413888998887766896164659855572836992467197889
|
||||
9217712236953916773136797729855561896118885989789931276897245797585829719971197298416959471465967299
|
||||
8749983199162381588749185138547797187291312282935858898773319299528189947814491298821948298698917998
|
||||
8869537419399779797931123692837166294495799967721996873988844831152966589773118129996872129174245734
|
||||
6999949888788198499769769893119838727389879594985996264338836189769745171919499431598495487598996829
|
||||
2643438319977946618997882718739614961945999488979133494999859875958989978289978891995578284983191769
|
||||
9711343348446947989897455526854391996559785892751279911869879891927989217818761659468859389913918159
|
||||
4684878627919284791377127887978412232228626693294949676597441174499789199371869999845955919776487925
|
||||
7336328939319927281586293939269992937969668286319998679381249791842789823962288582686236183876186189
|
||||
8498199998653599954199689592971461496115597192381769198382378211678161716941995196615974678163278978
|
||||
2998646498892845989822928114511999895167278839959595169842949959999918557832795946119311714389383991
|
||||
9984244818187938587919721975981668841119986975695637997888658465896898817589749499729979598979727197
|
||||
3863786997161389931987278761687458498299597892974921921998696597634973915194429518998588919819992157
|
||||
3119918226997269698895866728999573113997218692982671793292949996198899525937453993612931127922615284
|
||||
6379719955643911286241981859839442769958499849676976399619189989256898582949928891859195489926593225
|
||||
9466177592439495219155699988857895114899757931376891988791861639981429819498859829699953915984557119
|
||||
5374978935117993911513985778249971394799996215739819192271757989986194819377829685788878384186668579
|
||||
5996948596188399596276916591738868899415917585689991911459474597973519819254199897579188972591385492
|
||||
9322616873977891567797785992628933998998689889969238979881992269985738953791967118985999822789973433
|
||||
9199392396987912599354118198522389299456969987319191279618989499499887993924599797794177285631979167
|
||||
8855183914541833731439967697497418572879596386674694298959932189933841866512369842921637392699374912
|
||||
8988284461979263735382265499953696978939495465937911934474937417988811279816877822138921898948376181
|
||||
5437381949531929775936998169527199196578734594998292179919393485374186397999598711914297897676779586
|
||||
2396881448499782771276998937887566187891818989841832748994742788697928591911992786489698526461694989
|
||||
4246912291936687945949431175795992778687971357323979793399128579749866596897749827138281972961559158
|
||||
8647699922398842951889916948999698459962477299829918411933795388631159575199881299857589572777687999
|
||||
1311988719839948383899391321597894992589538493239179737996223383196197788192688789936916569885746193
|
||||
7954826979959947682969468987879991533849653569579969694792898697776848612986289349116791369579963519
|
||||
6593461421187759143952361892951669186319499192899168818751698499375889498194687225996979991984182191
|
||||
9335328245597991499897759977969229696591989282589998699129519144748578917798947994995199792918282991
|
||||
9398849415997381994698899787899727198999987399289971848636857987925948679582957479378858514993191181
|
||||
4149987331746768149745999853585139629671813691691596384395667999149381812199968928229665789284992374
|
||||
7427922988292997779559894894993998973997839317916919959899499493579911986477729836979789677259549118
|
||||
2642977979999586628631219897898878639971585969663183921898877933957895824999784889149738669989189789
|
||||
9762493593855472517917523499451984451888889977182975177177631967968932881279659956186784398919998985
|
||||
6432918193479269929129386389769916441769189759989721934769679259263889887181527989833327889848697941
|
||||
1393231159891181194862992269761747833947956873525561418387821863318689879524877738438288899299953799
|
||||
3842851494837961961556887296519919879914829134229941988917932644519999778998783391698499139917994989
|
||||
6459949159299986724199928878695399917976578879189193215239688557999671187992222149868714176139783787
|
||||
8463293782889894999994957687196286799689666437669478542975956699912379182795887258767997618178425918
|
||||
1953199634739829152796952926222792594239959671973846419654368418698936881329847929915911741616629164
|
||||
7845537283597249729992171128489499424199835337125999796988893187159337984973899291199499518477759357
|
||||
8997952978886957899187992878357919738776489938875699819693849929789872998684248986998859178999693399
|
||||
1138799983929178584919823996794446498474269912579351992888547384896372519992979599519718742166879882
|
||||
7298971978993365997919769838756115168896812437881278598927724918958597279567156161156299352891298849
|
||||
9179979719419789581891969361814895646898199782835916681989892966646599953969992849273537533978176119
|
||||
112
december_15/src/main.rs
Normal file
112
december_15/src/main.rs
Normal file
@@ -0,0 +1,112 @@
|
||||
use std::collections::HashMap;
|
||||
use std::fs::File;
|
||||
use std::io::{BufReader};
|
||||
use std::io::prelude::*;
|
||||
|
||||
const RADIX: u32 = 10;
|
||||
|
||||
struct Node {
|
||||
distance: u32,
|
||||
previous: Option<(usize, usize)>,
|
||||
neigbours: Vec<(usize, usize)>,
|
||||
visited: bool
|
||||
}
|
||||
|
||||
fn main(){
|
||||
let file = File::open("./input.txt").expect("Read failed");
|
||||
let reader = BufReader::new(file);
|
||||
|
||||
let mut weight_vec = Vec::new();
|
||||
|
||||
for line in reader.lines() {
|
||||
let mut temp_vec = Vec::new();
|
||||
for symbol in line.unwrap().chars() {
|
||||
let symbol_as_int = symbol.to_digit(RADIX).unwrap();
|
||||
temp_vec.push(symbol_as_int)
|
||||
}
|
||||
weight_vec.push(temp_vec);
|
||||
}
|
||||
|
||||
let mut weight_vec_big_temp = Vec::new();
|
||||
for line in 0..weight_vec.len() {
|
||||
let mut new_line_vec = Vec::new();
|
||||
for i in 0..weight_vec.len() * 5 {
|
||||
let coordinate_from = i % weight_vec[line].len();
|
||||
let add_val = i / weight_vec[line].len();
|
||||
let mut new_value = weight_vec[line][coordinate_from] + add_val as u32;
|
||||
if new_value > 9 {
|
||||
new_value -= 9;
|
||||
}
|
||||
new_line_vec.push(new_value);
|
||||
}
|
||||
weight_vec_big_temp.push(new_line_vec);
|
||||
}
|
||||
|
||||
let mut final_vector = Vec::new();
|
||||
|
||||
for line in 0..weight_vec_big_temp.len() * 5 {
|
||||
let add_val = line / weight_vec_big_temp.len();
|
||||
let mut temp_vec = Vec::new();
|
||||
for i in 0..weight_vec_big_temp[0].len() {
|
||||
let mut new_value = weight_vec_big_temp[line % weight_vec_big_temp.len()][i] + add_val as u32;
|
||||
if new_value > 9 {
|
||||
new_value -= 9;
|
||||
}
|
||||
temp_vec.push(new_value)
|
||||
}
|
||||
final_vector.push(temp_vec);
|
||||
}
|
||||
|
||||
println!("Finished generating Vec");
|
||||
weight_vec = final_vector;
|
||||
|
||||
let height = weight_vec.len();
|
||||
let width = weight_vec[0].len();
|
||||
|
||||
let mut graph = HashMap::new();
|
||||
|
||||
for x in 0..width {
|
||||
for y in 0..height {
|
||||
let mut neighbours = Vec::new();
|
||||
if x > 0 { neighbours.push((x-1,y)) }
|
||||
if x < width - 1 { neighbours.push((x+1,y)) }
|
||||
if y > 0 { neighbours.push((x,y-1)) }
|
||||
if y < height - 1 { neighbours.push((x,y+1)) }
|
||||
graph.insert((x,y) , Node{distance: u32::MAX, previous: None, neigbours: neighbours, visited: false});
|
||||
}
|
||||
}
|
||||
|
||||
let default_node = Node { distance: 0, previous: None, neigbours: Vec::new(), visited: false };
|
||||
|
||||
let start_node = (0,0);
|
||||
let end_node = (width-1, height-1);
|
||||
|
||||
graph.entry(start_node).or_insert(default_node).distance = 0;
|
||||
|
||||
loop {
|
||||
let active_node = &graph.iter().filter(|x| x.1.visited == false).min_by_key(|x| x.1.distance).expect("").0.to_owned();
|
||||
|
||||
if active_node == &end_node {
|
||||
break;
|
||||
}
|
||||
let distance = graph.get(active_node).expect("PANIK").distance;
|
||||
//graph.entry(active_node.to_owned()).or_insert(Node { distance: 0, previous: None, neigbours: Vec::new(), visited: false }).visited = true;
|
||||
graph.get_mut(active_node).unwrap().visited = true;
|
||||
|
||||
for neighbour in graph.get(active_node).expect("PANIK").neigbours.clone() {
|
||||
|
||||
let old_distance = graph.get(&neighbour).expect("PANIK").distance;
|
||||
let new_distance = distance + weight_vec[neighbour.1][neighbour.0];
|
||||
if new_distance < old_distance.to_owned() {
|
||||
graph.get_mut(&neighbour).unwrap().distance = new_distance;
|
||||
graph.get_mut(&neighbour).unwrap().previous = Some(active_node.to_owned());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
let distance = graph.get(&end_node).unwrap().distance;
|
||||
|
||||
println!("{}", distance);
|
||||
}
|
||||
9
december_16/Cargo.toml
Normal file
9
december_16/Cargo.toml
Normal file
@@ -0,0 +1,9 @@
|
||||
[package]
|
||||
name = "december_16"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
hex = "0.4.3"
|
||||
1
december_16/example.txt
Normal file
1
december_16/example.txt
Normal file
@@ -0,0 +1 @@
|
||||
A0016C880162017C3686B18A3D4780
|
||||
1
december_16/input.txt
Normal file
1
december_16/input.txt
Normal file
@@ -0,0 +1 @@
|
||||
C20D42002ED333E7774EAAC3C2009670015692C61B65892239803536C53E2D307A600ACF324928380133D18361005B336D3600B4BF96E4A59FED94C029981C96409C4A964F995D2015DE6BD1C6E7256B004C0010A86B06A1F0002151AE0CC79866600ACC5CABC0151006238C46858200E4178F90F663FBA4FDEC0610096F8019B8803F19A1641C100722E4368C3351D0E9802D60084DC752739B8EA4ED377DE454C0119BBAFE80213F68CDC66A349B0B0053B23DDD61FF22CB874AD1C4C0139CA29580230A216C9FF54AD25A193002A2FA002AB3A63377C124205008A05CB4B66B24F33E06E014CF9CCDC3A2F22B72548E842721A573005E6E5F76D0042676BB33B5F8C46008F8023301B3F59E1464FB88DCBE6680F34C8C0115CDAA48F5EE45E278380019F9EC6395F6BE404016849E39DE2EF002013C873C8A401544EB2E002FF3D51B9CAF03C0010793E0344D00104E7611C284F5B2A10626776F785E6BD672200D3A801A798964E6671A3E9AF42A38400EF4C88CC32C24933B1006E7AC2F3E8728C8E008C759B45400B4A0B4A6CD23C4AF09646786B70028C00C002E6D00AEC1003440080024658086A401EE98070B50029400C0014FD00489000F7D400E000A60001E870038800AB9AB871005B12B37DB004266FC28988E52080462973DD0050401A8351DA0B00021D1B220C1E0013A0C0198410BE1C180370C21CC552004222FC1983A0018FCE2ACBDF109F76393751D965E3004E763DB4E169E436C0151007A10C20884000874698630708050C00043E24C188CC0008744A8311E4401D8B109A3290060BE00ACEA449214CD7B084B04F1A48025F8BD800AB4D64426B22CA00FC9BE4EA2C9EA6DC40181E802B39E009CB5B87539DD864A537DA7858C011B005E633E9F6EA133FA78EE53B7DE80
|
||||
96
december_16/src/main.rs
Normal file
96
december_16/src/main.rs
Normal file
@@ -0,0 +1,96 @@
|
||||
use std::{fs::read_to_string, env::current_exe};
|
||||
|
||||
extern crate hex;
|
||||
|
||||
static mut version_sum: u32 = 0;
|
||||
|
||||
fn main() {
|
||||
let input_char_vec = read_to_string("./input.txt").expect("ERROR reading file");
|
||||
//let split_input: Vec<char> = input_char_vec.chars().collect();
|
||||
let test = hex::decode(input_char_vec).expect("Decoding failed");
|
||||
|
||||
let mut bit_vec: Vec<bool> = Vec::new();
|
||||
|
||||
for t in test{
|
||||
for n in 0..8 {
|
||||
bit_vec.push( (t >> 7-n & 1) == 1);
|
||||
}
|
||||
}
|
||||
process_packet(bit_vec);
|
||||
unsafe {println!("Package Version Sum: {}", version_sum);}
|
||||
}
|
||||
|
||||
fn process_packet(bit_vec: Vec<bool>) -> usize {
|
||||
let version = (bit_vec[0] as u32 * 4) + (bit_vec[1] as u32 * 2) + (bit_vec[2] as u32);
|
||||
let packet_type = (bit_vec[3] as u32 * 4) + (bit_vec[4] as u32 * 2) + (bit_vec[5] as u32);
|
||||
println!("Packet Version: {}, Packet type: {}", version, packet_type);
|
||||
unsafe { version_sum += version}
|
||||
let mut end_bit = 0;
|
||||
if packet_type == 4 {
|
||||
// This is a decimal value, print for now return later
|
||||
let mut last_bit = false;
|
||||
let mut current_byte = 0;
|
||||
let mut out_vec = Vec::new();
|
||||
while !last_bit {
|
||||
let last_bit_identifier = bit_vec[6 + (5*current_byte)];
|
||||
let bit1 = bit_vec[7 + (5*current_byte)];
|
||||
let bit2 = bit_vec[8 + (5*current_byte)];
|
||||
let bit3 = bit_vec[9 + (5*current_byte)];
|
||||
let bit4 = bit_vec[10 + (5*current_byte)];
|
||||
if last_bit_identifier == false { last_bit = true }
|
||||
end_bit = 10 + (5*current_byte) + 1;
|
||||
current_byte += 1;
|
||||
out_vec.push(bit1);
|
||||
out_vec.push(bit2);
|
||||
out_vec.push(bit3);
|
||||
out_vec.push(bit4);
|
||||
}
|
||||
|
||||
println!("{}", to_dec(out_vec));
|
||||
} else {
|
||||
let mut lenght_length = 0;
|
||||
let mut length = 0;
|
||||
let base: i32 = 2;
|
||||
if bit_vec[6] {
|
||||
lenght_length = 11;
|
||||
} else {
|
||||
lenght_length = 15;
|
||||
}
|
||||
for i in 1..=lenght_length {
|
||||
length += bit_vec[ (7 + lenght_length) - i ] as i32 * base.pow((i - 1) as u32);
|
||||
}
|
||||
|
||||
println!("length {}", length);
|
||||
let mut data_end_bit = 0;
|
||||
let mut end = false;
|
||||
|
||||
if lenght_length == 15 {
|
||||
while !end {
|
||||
let vec_start = 7+lenght_length + data_end_bit;
|
||||
let vec_end = 7+lenght_length+length as usize;
|
||||
let vec_slice: Vec<bool> = bit_vec[vec_start..vec_end].to_vec();
|
||||
data_end_bit = process_packet(vec_slice);
|
||||
end_bit = vec_start + data_end_bit;
|
||||
if data_end_bit + vec_start >= vec_end { end = true}
|
||||
}
|
||||
} else {
|
||||
for subblock in 0..length {
|
||||
let vec_start = 7+lenght_length + data_end_bit;
|
||||
let vec_end = bit_vec.len();
|
||||
let vec_slice: Vec<bool> = bit_vec[vec_start..vec_end].to_vec();
|
||||
data_end_bit += process_packet(vec_slice);
|
||||
end_bit = vec_start + data_end_bit;
|
||||
}
|
||||
}
|
||||
}
|
||||
return end_bit;
|
||||
}
|
||||
|
||||
fn to_dec(bit_vec: Vec<bool>) -> u128 {
|
||||
let mut out_val = 0;
|
||||
let base: i128 = 2;
|
||||
for i in 1..=bit_vec.len() {
|
||||
out_val += bit_vec[bit_vec.len() - i] as i128 * base.pow((i - 1) as u32);
|
||||
}
|
||||
return out_val as u128;
|
||||
}
|
||||
Reference in New Issue
Block a user