Compare commits

..

No commits in common. "0f75dd0dff6bfbd004686ba28e94f73af561d0fc" and "b90d770c8aee4ec108345d683f315dcb93b83987" have entirely different histories.

8 changed files with 16 additions and 237 deletions

1
.gitignore vendored
View file

@ -1,2 +1 @@
/target
*/venv/

View file

@ -1,53 +0,0 @@
import networkx as nx
# load file contents from ../res/10/input
with open("../res/10/input") as f:
lines = [[int(c) for c in line.strip()] for line in f]
# create a directed graph
G = nx.DiGraph()
starts = []
ends = []
for i, line in enumerate(lines):
for j, c in enumerate(line):
G.add_node((i, j), pos=(i, j))
# add all edges to the graph
for i, line in enumerate(lines):
for j, c in enumerate(line):
if i > 0 and lines[i-1][j] == c+1:
G.add_edge((i, j), (i-1, j), weight=c)
if j > 0 and lines[i][j-1] == c+1:
G.add_edge((i, j), (i, j-1), weight=c)
if i < len(lines)-1 and lines[i+1][j] == c+1:
G.add_edge((i, j), (i+1, j), weight=c)
if j < len(line)-1 and lines[i][j+1] == c+1:
G.add_edge((i, j), (i, j+1), weight=c)
if c == 0:
starts.append((i, j))
if c == 9:
ends.append((i, j))
#pos = nx.get_node_attributes(G, 'pos')
#nx.draw(G, pos, with_labels=True, node_color='lightblue', node_size=500, font_size=16)
#plt.show()
# check if ends are reachable for starts
result = 0
for start in starts:
for end in ends:
if nx.has_path(G, start, end):
result += 1
print("Result 1:",result)
result = 0
for start in starts:
for end in ends:
result += len(list(nx.all_simple_paths(G, start, end)))
print("Result 2:",result)

View file

@ -1 +0,0 @@
2333133121414131402

File diff suppressed because one or more lines are too long

View file

@ -1,8 +0,0 @@
89010123
78121874
87430965
96549874
45678903
32019012
01329801
10456732

View file

@ -1,60 +0,0 @@
101672126789567871215432345692104565432149876543210210165210
234583005412345960104301876783213078985034987034324321894321
898794112303876450201256969654532123834125870125495696765015
347105678938989321345347238767651054923456678066780787892196
256234569821672105496598123698743267812167569876541256543087
101246541230543236787687034521650167600098452210434347893076
765487430945650123689874501210010458321899321320345898432125
812392121876210154318965678342181309456786870451256567589034
906783032944301269203454369453892211034567965960127655678122
105498893235692378112103223964763789123998234872198543987901
012347710145785489023078114875654621001870198101083234896872
143256601056676521032169005676910538912560187232172105765463
650101542387234982349850321987823447103451276543432156710354
781256730498105673256741410212345656458967345210589054801267
292349821567834984109632565401298765367898721125678963987658
143218762438921015678541078980345101210787430034567672108349
012109687921089210010699012899876012101656526540545689019232
123298796810874391523788743765210023089017017651656567567101
264567345765965487654345651054382104672108978562347458478210
876501210054056506961296652567893965543223489478998749309654
930432011123143215870387743456894876654316554300145632218723
121098723498234010965436892147765989969807621210239841012212
032127854567872127830124321038967857878898210345678012332301
343456965432963236543012430121456546545678149814798763441012
856547876501454345632101569870367630430789034709823454456787
987456989982321056567832678971278921821018125616710569344596
898323678776545963498943267089101012900329870125211678233678
543214549845034872167654154172112307812234568934303234102189
670100234012123521015673013263001478703105567078450145221078
789121124112345677893589234654816589654876432169867276098985
458012043207654986712432102898987678723997654250178780127676
367123856978943105403398701787676789210788023443239693234565
212344987821012312314499652012565478943679117652108012345898
101055678736703432965488343403454567652543208941032101056789
567167899645898501876670912212343089801411012432143322765603
498656018514567610154561801101232156787302347823434410810512
301565323403078921210432765432320165696213456916565567923443
212174321012169872321983656430110234345012387107896988019654
143089102100110165434672106321025693230103896217867899528743
056345243098241234345543567432234787121212344356956187634454
167216356784356768766965498589105676034789651243445010546763
098307458965349889457874321678210987345678760342336729867892
123478969870221232356301230898121236789860987651029838758981
874554878561110321001234454567033345652101456787010745643230
965765467892025412120985213476542101543032321897655678994101
259854326743476501031276302985433297890125670998556767783210
108765012654389416542333421874344387743234987123449854654325
237894121001274327985421510123435674659143498001230123087654
367123432114565878876430678054510523438032567143456732192123
458023449323676969216567869067823410547621052232109865434012
569016558701987854107854952154996564678543121218987774325678
652345667632234543236943343043287643789431030101876789810089
421298796545105652345012894332106452100396545012765012102168
310359687698236701489431765012987367011287236923454324303258
210541056789127892376320012343456218983470147876565465214549
323478145632036767665411289854387609322561228945456778927678
416569230541145678547802398761296543211032310239843899818765
507858121230978789236921234210435234508943001108702016709654
698943034567879601105210123456520123677654112345611025212123
787012347898765432434341038987011038989543233434323134321010

View file

@ -6,115 +6,11 @@ pub fn solve() {
#[allow(unused)]
let contents = fs::read_to_string(path).expect("Something went wrong reading the file");
let orig_filesystem: Vec<isize> = contents
.chars()
.filter(|c| c.is_digit(10))
.enumerate()
.map(|(i, c)| {
if i % 2 == 0 {
vec![(i / 2) as isize; c.to_string().parse::<usize>().unwrap()]
} else {
vec![-1; c.to_string().parse::<usize>().unwrap()]
}
})
.flatten()
.collect();
let mut filesystem = orig_filesystem.clone();
let mut start = 0;
let mut end = filesystem.len() - 1;
loop {
while filesystem[start] != -1 {
start += 1;
}
while filesystem[end] == -1 {
end -= 1;
}
if start >= end {
break;
}
filesystem.swap(start, end);
}
let result: usize = filesystem
.iter()
.enumerate()
.map(|(i, n)| if *n == -1 { 0 } else { i * *n as usize })
.sum();
let result: usize = 0;
println!("Result 1: {}", result);
let mut filesystem = orig_filesystem.clone();
let mut free_space: Vec<(usize, usize)> = Vec::new();
let mut iter = 0;
while iter < filesystem.len() {
if filesystem[iter] == -1 {
let mut count = 0;
while filesystem[iter] == -1 {
count += 1;
iter += 1;
}
free_space.push((iter - count, count));
} else {
iter += 1;
}
}
let mut iter = filesystem.len() - 1;
while iter > 0 {
while filesystem[iter] == -1 {
if iter == 0 {
break;
}
iter -= 1;
}
let typ = filesystem[iter];
let end = iter;
let mut start = iter;
while filesystem[start] == typ {
if start == 0 {
break;
}
start -= 1;
}
start += 1;
let len = end - start + 1;
if len == 0 {
continue;
}
let res = filesystem
.windows(len)
.enumerate()
.find(|(_, win)| win.iter().all(|c| *c == -1));
if res.is_none() {
iter = start - 1;
continue;
}
let (start_i, _) = res.unwrap();
if start_i >= start {
iter = start - 1;
continue;
}
for i in 0..len {
filesystem.swap(start_i + i, start + i);
}
}
let result: usize = filesystem
.iter()
.enumerate()
.map(|(i, n)| if *n == -1 { 0 } else { i * *n as usize })
.sum();
let result: usize = 0;
println!("Result 2: {}", result);
}

View file

@ -1,9 +1,16 @@
pub fn solve() {
println!("Running external Python program...");
use std::fs;
std::process::Command::new("venv/bin/python")
.current_dir("python/")
.arg("10.py")
.status()
.unwrap();
pub fn solve() {
let path = "res/10/input";
#[allow(unused)]
let contents = fs::read_to_string(path).expect("Something went wrong reading the file");
let result: usize = 0;
println!("Result 1: {}", result);
let result: usize = 0;
println!("Result 2: {}", result);
}