days 12 through 15

main
Shoofle 10 months ago
parent e4e8e41dfa
commit 1f57dd6464
  1. BIN
      day12/__pycache__/day12.cpython-311.pyc
  2. 86
      day12/day12.py
  3. 7
      day13/Cargo.lock
  4. 8
      day13/Cargo.toml
  5. 140
      day13/src/main.rs
  6. 1
      day13/target/.rustc_info.json
  7. 3
      day13/target/CACHEDIR.TAG
  8. 0
      day13/target/debug/.cargo-lock
  9. 1
      day13/target/debug/.fingerprint/day13-77b2a47bbbbb8c09/bin-day13
  10. 1
      day13/target/debug/.fingerprint/day13-77b2a47bbbbb8c09/bin-day13.json
  11. BIN
      day13/target/debug/.fingerprint/day13-77b2a47bbbbb8c09/dep-bin-day13
  12. 1
      day13/target/debug/.fingerprint/day13-77b2a47bbbbb8c09/invoked.timestamp
  13. BIN
      day13/target/debug/day13
  14. 1
      day13/target/debug/day13.d
  15. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09
  16. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.10phoap8zzkm9k1a.rcgu.o
  17. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.112p5ivzqa8ixqa8.rcgu.o
  18. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.1242ya441q47d9ts.rcgu.o
  19. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.136xl7ivasfupcyi.rcgu.o
  20. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.19z1bkcxyrsrw1zn.rcgu.o
  21. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.1dvm9rpnpih618j.rcgu.o
  22. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.1m2zv9hq52wnhqyz.rcgu.o
  23. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.1n79bo99pplue53b.rcgu.o
  24. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.1sz10uj7lzej3pue.rcgu.o
  25. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.1tbegk4y47mek8h.rcgu.o
  26. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.1vlv1evkfuln1lwk.rcgu.o
  27. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.1xtedkd3gkn47qfo.rcgu.o
  28. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.1zgc8j1t8q7xzwx0.rcgu.o
  29. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.20dl0kw3t9228kj1.rcgu.o
  30. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.20vsozox75pmjlwc.rcgu.o
  31. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.21fo4k4ujzv7wyv6.rcgu.o
  32. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.22byhw2kf8hk5wlg.rcgu.o
  33. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.22uek05t0wb54552.rcgu.o
  34. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.238tgbt57vgsp3kw.rcgu.o
  35. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.24lgur8vvnfwdoxg.rcgu.o
  36. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.26t4f3jd5kd9bb2j.rcgu.o
  37. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.28xzj1euzebpmt48.rcgu.o
  38. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.29kxwuh1lbxqsniw.rcgu.o
  39. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.2ao4r902c34c5ot4.rcgu.o
  40. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.2de57c621weed3yv.rcgu.o
  41. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.2dm6gwwecspwmbcx.rcgu.o
  42. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.2etc9bqbhg21udxu.rcgu.o
  43. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.2f43akz1w45ree1i.rcgu.o
  44. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.2fs6ukx09j4owv4h.rcgu.o
  45. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.2lws5ojicj1csb0d.rcgu.o
  46. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.2oja976gvt8918gy.rcgu.o
  47. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.2p9yyshk3yg7kyr9.rcgu.o
  48. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.2tmpzzx0f2ufdh5k.rcgu.o
  49. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.2zbjlz7adrgo142h.rcgu.o
  50. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.31aj62g28hvfj3oj.rcgu.o
  51. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.32cnjs3uxt5nkv15.rcgu.o
  52. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.35zgshc1acy7wuux.rcgu.o
  53. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.36or5mhzfvdhm5d8.rcgu.o
  54. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.39q2fuo2g14kp9v7.rcgu.o
  55. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.3arvob83u4nibg3k.rcgu.o
  56. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.3bqy6amgbcmckf2p.rcgu.o
  57. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.3c7vzic9l256zq5q.rcgu.o
  58. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.3cefmzshsl7g1qz4.rcgu.o
  59. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.3f1cb8zuhp6rsry4.rcgu.o
  60. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.3gqvi0wlcdbcxuwo.rcgu.o
  61. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.3hujcvir9x1xtvgc.rcgu.o
  62. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.3ju841ddwbycpexx.rcgu.o
  63. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.3o0ni78zu1r9zeia.rcgu.o
  64. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.3r18czbzkn1j5w7e.rcgu.o
  65. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.3r8x93we3sizv4db.rcgu.o
  66. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.3sgzy9rdfubqu47x.rcgu.o
  67. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.3uwqcfyue1470g0j.rcgu.o
  68. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.3yplb0x40ubxqgq9.rcgu.o
  69. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.3yufrotmjht7vq0y.rcgu.o
  70. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.45r7sz9ixudw1jtp.rcgu.o
  71. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.4ac6vpmvm1mke18k.rcgu.o
  72. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.4d05igqwjemsr37u.rcgu.o
  73. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.4eyx7c9lqeh9hsv4.rcgu.o
  74. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.4ie4qdj31npnjgcn.rcgu.o
  75. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.4jlaj4z0ixyfq6sz.rcgu.o
  76. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.4ljxw0mqohi8fkck.rcgu.o
  77. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.4m6op7pdtfjwmzjw.rcgu.o
  78. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.4unzol789ccky4ha.rcgu.o
  79. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.4uttkzvvnkchf7nx.rcgu.o
  80. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.4y9ri485bykfm536.rcgu.o
  81. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.5159p33o1qzmlr5z.rcgu.o
  82. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.545v1mk7gijw2dyy.rcgu.o
  83. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.54dx7muh9ea4u116.rcgu.o
  84. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.55c1gd3dk4m803xw.rcgu.o
  85. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.56h6qrr9udku9g9o.rcgu.o
  86. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.5ur9p0di7pqdtnh.rcgu.o
  87. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.94j8x7vcfinc8tj.rcgu.o
  88. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.9smdb1dcvp8k55.rcgu.o
  89. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.9x7s01ez4vvloo3.rcgu.o
  90. 5
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.d
  91. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.et07s3y3h48tqdi.rcgu.o
  92. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.fvpdk35z5nx8b5q.rcgu.o
  93. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.ilhpoumbeadi3ml.rcgu.o
  94. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.jrmb4p0a72dttl3.rcgu.o
  95. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.ktkudnr2krqx39z.rcgu.o
  96. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.ljqj198492vx0fj.rcgu.o
  97. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.o97zqxvfqsvmzsm.rcgu.o
  98. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.o9r1ufstolya3gc.rcgu.o
  99. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.q9gk34ygj1m0ail.rcgu.o
  100. BIN
      day13/target/debug/deps/day13-77b2a47bbbbb8c09.qdv8yxpsyjy2c81.rcgu.o
  101. Some files were not shown because too many files have changed in this diff Show More

@ -0,0 +1,86 @@
import re
import argparse
def search(line, groups):
#print("searching {} for {}".format(line, groups))
#find the first ?
if not precheck(line, groups):
return
if check(line, groups):
#print("found a solutioN!")
yield line
return
if '?' not in line:
return
#print("delving into subtree {}".format(line.replace('?', '#', 1)))
yield from search(line.replace('?', "#", 1), groups)
yield from search(line.replace('?', ".", 1), groups)
def precheck(line, groups):
expected_hits = sum(groups)
if line.count('#') > expected_hits:
# if there are more hits in our candidate than the expected number, then this is a bad branch.
# return false to skip it.
#print("too many #")
return False
if line.count('.') > len(line) - expected_hits:
# if there are moroe confirmed empties in our candidate than len - expected_hits, then this is a bad branch.
# return false to skip it.
#print("too many .")
return False
return True
def check(line, groups):
if '?' in line:
return False
line_list = list(map(lambda x: len(x), line.replace(".", " ").split()))
if len(line_list) == len(groups):
return all(map(lambda x: x[0] == x[1], zip(line_list, groups)))
return False
return groups == line_list
parser = argparse.ArgumentParser()
parser.add_argument("filename", help="the file from which to take data")
args = parser.parse_args()
with open(args.filename, "r") as f:
line_re = re.compile("([.?#]*) ([0-9,]*)")
s = 0
for l in f.readlines():
m = line_re.match(l)
line = m.group(1)
groups = list(map(int, m.group(2).split(',')))
#print("line is {} and groups are {}".format(line, groups))
#for option in search(line, groups):
# print(option)
x = len(list(search(line,groups)))
#print("there are {} solutinos".format(x))
s += x
print("the total solutionss are {}".format(s))
print("and noow for part b")
with open(args.filename, "r") as f:
line_re = re.compile("([.?#]*) ([0-9,]*)")
s = 0
for l in f.readlines():
m = line_re.match(l)
line = m.group(1)
line = line + "?" + line + "?" + line + "?" + line + "?" + line
groups = list(map(int, m.group(2).split(',')))
groups = groups * 5
print("line is {} and groups are {}".format(line, groups))
#for option in search(line, groups):
# print(option)
x = len(list(search(line,groups)))
print("there are {} solutinos".format(x))
s += x
print("the total solutionss are {}".format(s))

7
day13/Cargo.lock generated

@ -0,0 +1,7 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "day13"
version = "0.1.0"

@ -0,0 +1,8 @@
[package]
name = "day13"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

@ -0,0 +1,140 @@
use std::iter::*;
use std::fs;
use std::env;
use std::collections::HashSet;
fn main() {
println!("Hello, AoC day 11!");
let args: Vec<String> = env::args().collect();
if args.len() != 2 {
println!("wrong number of arguments!");
std::process::exit(1);
}
let file_path = &args[1];
let contents = fs::read_to_string(file_path)
.expect("Should have been able to read the file");
let mut grids: Vec<Vec<String>> = Vec::new();
// let's build that grid
let mut current_grid: Vec<String> = Vec::new();
for line in contents.lines() {
if line.trim().is_empty() {
grids.push(current_grid);
current_grid = Vec::new();
} else {
current_grid.push(line.to_string());
}
}
grids.push(current_grid);
// now that we've got the whole input file sorted, let's process things!
let mut s = 0;
for g in &grids {
println!("starting on a grid");
let mirrors = find_mirrors(g);
let mirrors_vert = find_mirrors(&transpose(g));
print_map(g);
println!("found mirrors at columns {mirrors:?}");
println!("found mirrors at rows {mirrors_vert:?}");
s += mirrors.iter().sum::<usize>();
s += 100*mirrors_vert.iter().sum::<usize>();
}
println!("sum of mirror offsets is {s}");
println!("now for part 2...");
s=0;
for g in &grids {
let original_mirrors = find_mirrors(g);
let original_mirrors_vert = find_mirrors(&transpose(g));
for (y, row) in g.iter().enumerate() {
for x in 0..row.len() {
//println!("smudging at {y}, {x}.");
let new_grid = smudge(g, y, x);
let mut mirrors: HashSet<usize> = find_mirrors(&new_grid);
for x in &original_mirrors {
mirrors.remove(&x);
}
let mut mirrors_vert: HashSet<usize> = find_mirrors(&transpose(&new_grid));
for x in &original_mirrors_vert {
mirrors_vert.remove(&x);
}
let n = mirrors.iter().sum::<usize>();
let m = mirrors_vert.iter().sum::<usize>();
//println!("found {mirrors:?} vertical and {mirrors_vert:?} horizontal mirrors.");
s += n + 100*m;
}
}
}
s = s/2;
println!("the sum was {s}");
}
fn smudge(g: &Vec<String>, i: usize, j: usize) -> Vec<String> {
let mut output = Vec::new();
for (y, row) in g.iter().enumerate() {
if y != i {
output.push(row.clone());
} else {
let mut new = row.clone();
match new.remove(j) {
'.' => new.insert(j, '#'),
'#' => new.insert(j, '.'),
_ => panic!("ahjhhhhfslkjf")
};
output.push(new);
}
}
return output;
}
fn print_map(g: &Vec<String>) {
for row in g {
println!("{}", row);
}
}
fn find_mirrors(mat: &Vec<String>) -> HashSet<usize> {
let mut mirrors: HashSet<usize> = mirror_candidates(&mat[0]);
for row in mat {
let candidates = mirror_candidates(row);
mirrors.retain(|x| candidates.contains(x));
}
return mirrors;
}
fn mirror_candidates(row: &String) -> HashSet<usize> {
let mut output: HashSet<usize> = HashSet::new();
for i in 0..row.len()-1 {
// try after character i
let mut works = true;
for x in 0..(row.len()/2) {
if (i < x) || (i+1+x >= row.len()) {break;}
if row.chars().nth(i-x) != row.chars().nth(i+1+x) {works = false;}
}
if works {output.insert(i+1);}
}
return output;
}
fn transpose(mat: &Vec<String>) -> Vec<String> {
let mut output = Vec::new();
for i in 0..mat[0].len() {
let mut l: String = String::from("");
for row in mat {
l.push_str(&row.chars().nth(i).expect("this had better work").to_string());
}
output.push(l);
}
return output;
}

@ -0,0 +1 @@
{"rustc_fingerprint":11672801278650259402,"outputs":{"4614504638168534921":{"success":true,"status":"","code":0,"stdout":"rustc 1.69.0 (84c898d65 2023-04-16)\nbinary: rustc\ncommit-hash: 84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc\ncommit-date: 2023-04-16\nhost: x86_64-apple-darwin\nrelease: 1.69.0\nLLVM version: 15.0.7\n","stderr":""},"15729799797837862367":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.dylib\nlib___.dylib\nlib___.a\nlib___.dylib\n/Users/shoofle/.rustup/toolchains/stable-x86_64-apple-darwin\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"\"\ntarget_family=\"unix\"\ntarget_feature=\"cmpxchg16b\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_feature=\"sse3\"\ntarget_feature=\"ssse3\"\ntarget_has_atomic=\"128\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"macos\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"apple\"\nunix\n","stderr":""}},"successes":{}}

@ -0,0 +1,3 @@
Signature: 8a477f597d28d172789f06886806bc55
# This file is a cache directory tag created by cargo.
# For information about cache directory tags see https://bford.info/cachedir/

@ -0,0 +1 @@
{"rustc":3659767333214291318,"features":"[]","target":14090744556205886698,"profile":11736316127369858332,"path":1684066648322511884,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/day13-77b2a47bbbbb8c09/dep-bin-day13"}}],"rustflags":[],"metadata":7797948686568424061,"config":2202906307356721367,"compile_kind":0}

@ -0,0 +1 @@
This file has an mtime of when this was started.

Binary file not shown.

@ -0,0 +1 @@
/Users/shoofle/Projects/aoc_2023/day13/target/debug/day13: /Users/shoofle/Projects/aoc_2023/day13/src/main.rs

Binary file not shown.

@ -0,0 +1,5 @@
/Users/shoofle/Projects/aoc_2023/day13/target/debug/deps/day13-77b2a47bbbbb8c09: src/main.rs
/Users/shoofle/Projects/aoc_2023/day13/target/debug/deps/day13-77b2a47bbbbb8c09.d: src/main.rs
src/main.rs:

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save