Comments (17)
First change this:
498,4 -> 498,6 -> 496,6
503,4 -> 502,4 -> 502,9 -> 494,9
Into a diagram like this:
4 5 5
9 0 0
4 0 3
0 ......+...
1 ..........
2 ..........
3 ..........
4 ....#...##
5 ....#...#.
6 ..###...#.
7 ........#.
8 ........#.
9 #########.
Those lines of input turn into rock formations drawn with #
.
from advent-of-code-2022-in-rust.
The next step is to simulate falling sand starting at point + (500, 0)
from advent-of-code-2022-in-rust.
It would be fun to animate this one on the terminal.
from advent-of-code-2022-in-rust.
Found this via https://blessed.rs - looks good! https://lib.rs/crates/crossterm
from advent-of-code-2022-in-rust.
Run cargo test but show any printed lines
ChatGPT said:
To run
cargo test
and show any printed lines, you can use the--nocapture
flag when running thetest
command, like this:cargo test -- --nocapture
This tells
cargo
to run the tests in the current project, and to not capture the output of the tests. This means that anyprintln!
orprint!
statements in the test code will be printed to the terminal as the tests are running, allowing you to see the output of the tests as they are executed.Note that the
--nocapture
flag must be specified after the--
separator, which is used to indicate that the following arguments should be passed directly to thetest
command, rather than tocargo
.If you only want to show the output of a specific test, you can use the
--nocapture
flag with the--test
option, followed by the name of the test you want to run, like this:cargo test --test my_test -- --nocapture
I like how it also taught me how to use --test x
- I hadn't tried that before.
from advent-of-code-2022-in-rust.
Got to this point:
day_14 % cargo test -- --nocapture
Finished test [unoptimized + debuginfo] target(s) in 0.00s
Running unittests src/main.rs (target/debug/deps/day_14-bfff42a1bd776381)
running 1 test
Drawing line from (498, 4) to (498, 6)
Setting grid[4][0] to #
Setting grid[4][1] to #
Setting grid[4][2] to #
Drawing line from (498, 4) to (496, 6)
Drawing line from (503, 4) to (502, 4)
Drawing line from (503, 4) to (502, 9)
Drawing line from (503, 4) to (494, 9)
....#.....
....#.....
....#.....
..........
..........
..........
test test_parse_grid ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
That's not quite right yet - it's not handling lines that are drawn in reverse order.
from advent-of-code-2022-in-rust.
Got that working:
day_14 % cargo test -- --nocapture
Compiling day_14 v0.1.0 (/Users/simon/Dropbox/Development/advent-of-code-2022-in-rust/day_14)
Finished test [unoptimized + debuginfo] target(s) in 0.48s
Running unittests src/main.rs (target/debug/deps/day_14-bfff42a1bd776381)
running 1 test
Vertical line from 4 to 6
Horizontal line from 496 to 498
Horizontal line from 502 to 503
Vertical line from 4 to 9
Horizontal line from 494 to 502
....#...##
....#...#.
..###...#.
........#.
........#.
#########.
test test_parse_grid ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
from advent-of-code-2022-in-rust.
Next bit:
The sand is pouring into the cave from point 500,0.
Sand is produced one unit at a time, and the next unit of sand is not produced until the previous unit of sand comes to rest
A unit of sand always falls down one step if possible. If the tile immediately below is blocked (by rock or sand), the unit of sand attempts to instead move diagonally one step down and to the left. If that tile is blocked, the unit of sand attempts to instead move diagonally one step down and to the right
[..] If all three possible destinations are blocked, the unit of sand comes to rest and no longer moves, at which point the next unit of sand is created back at the source.
How many units of sand come to rest before sand starts flowing into the abyss below?
Answer is 24 for the example.
from advent-of-code-2022-in-rust.
So algorithm inside the loop is:
- Check square directly below current sand position - is it free?
- If yes, move down
- If no, check diagonal down to left and right and move there
- If neither is available, sand stops
from advent-of-code-2022-in-rust.
Getting this error:
---- test_parse_grid stdout ----
....#...##
....#...#.
..###...#.
........#.
........#.
#########.
char_at: 500 1
translated to: 6 -3
thread 'test_parse_grid' panicked at 'index out of bounds: the len is 6 but the index is 18446744073709551613', src/main.rs:36:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
That's because the grid needs to always have 0 and up on that axis.
from advent-of-code-2022-in-rust.
After first loop I get:
..........
..........
..........
..........
....#...##
....#...#.
..###...#.
........#.
......o.#.
#########.
``
from advent-of-code-2022-in-rust.
Works against example:
After 22 iterations:
..........
..........
......o...
.....ooo..
....#ooo##
....#ooo#.
..###ooo#.
....oooo#.
...ooooo#.
#########.
After 23 iterations:
..........
..........
......o...
.....ooo..
....#ooo##
...o#ooo#.
..###ooo#.
....oooo#.
...ooooo#.
#########.
After 24 iterations:
..........
..........
......o...
.....ooo..
....#ooo##
...o#ooo#.
..###ooo#.
....oooo#.
.o.ooooo#.
#########.
Final i: 24
from advent-of-code-2022-in-rust.
After 30:
After 30 iterations:
..........................................................
..........................................................
..........................................................
..........................................................
..........................................................
..........................................................
..........................................................
..........................................................
..........................................................
..........................................................
..........................oo..............................
.........................oooo.............................
........................oooooo............................
.......................oo#####o...........................
......................oooo...ooo..........................
.....................o#####.#####o........................
....................ooo.........ooo.......................
...................#####.#####.#####......................
..........................................................
................#####.#####.#####.#####...................
..........................................................
..........................................................
............######........................................
..........................................................
..........................................................
.........######.######....................................
..........................................................
..........................................................
......######.######.######................................
..........................................................
..........................................................
...######.######.######.######............................
..........................................................
..........................................................
######.######.######.######.######........................
..........................................................
..........................................................
.....#.#..................................................
.....#.#..................................................
.#####.########...........................................
.#............#...........................................
.#............#...........................................
.#............#...........................................
.##############...........................................
..........................................................
..........................................................
..........................................................
..........................................................
..........................................................
...................................#...#..................
...................................#...#..................
...................................#.#.#..................
...................................#.#.#.#................
...................................#.#.#.#................
...................................#.#.#.#................
...................................#.#.#.#................
...................................#######................
..........................................................
..........................................................
..........................................................
......................................############........
..........................................................
..........................................................
..........................................................
..........................................................
......................................................#...
......................................................#...
......................................................#...
......................................................#...
............................................#.....#.#.#...
............................................#.....#.#.#...
............................................#.#...#.#.#...
............................................#.#.#.#.#.#...
............................................###########...
..........................................................
..........................................................
........................................######............
..........................................................
..........................................................
.....................................######.######........
..........................................................
..........................................................
..................................######.######.######....
..........................................................
..........................................................
...............................######.######.######.######
..........................................................
..........................................................
..................................#.....#.................
..................................#.....#.................
..................................#.....#.................
..............................#####.....#######...........
..............................#...............#...........
..............................#...............#...........
..............................#...............#...........
..............................#...............#...........
..............................#################...........
..........................................................
..........................................................
...........................#####..........................
..........................................................
..........................................................
........................#####.#####.......................
..........................................................
..........................................................
.....................#####.#####.#####....................
..........................................................
..........................................................
..................#####.#####.#####.#####.................
..........................................................
..........................................................
..........................................................
.....................#....................................
...........#.........#....................................
...........#...#.....#....................................
...........#.#.#.....#....................................
...........#.#.#...#.#....................................
...........#.#.#...#.#....................................
...........#.#.#...#.#....................................
...........#.#.#...#.#....................................
.........#.#.#.#.#.#.#.#..................................
.........###############..................................
..........................................................
..........................................................
......................#....#..............................
......................#....#..............................
......................#....#..............................
................#######....####...........................
................#.............#...........................
................#.............#...........................
................#.............#...........................
................###############...........................
..........................................................
.......................................#..................
..............................##########..................
..........................................................
..........................................................
...........................#.#............................
...................#...#...#.#.....#......................
...................#...#...#.#.....#......................
...................#.#.#...#.#.....#......................
...................#.#.#...#.#.....#......................
...................#.#.#...#.#.....#......................
...................#.#.#.#.#.#.....#.#....................
...................#.#.#.#.#.#.....#.#....................
...................#.#.#.#.#.#...#.#.#....................
...................#.#.#.#.#.#.#.#.#.#....................
...................###################....................
..........................................................
..........................................................
...................................##############.........
..........................................................
..........................................................
................................................#...#.....
................................................#...#.....
..............................................###...######
..............................................#..........#
..............................................#..........#
..............................................############
..........................................................
..........................................................
..........................................................
...................................................#......
.....................................###############......
from advent-of-code-2022-in-rust.
Got the right answer for part 1:
After 828 iterations:
..........................................................
..........................................................
..........................................................
..........................................................
..........................................................
..........................................................
..........................................................
..........................................................
..........................oo..............................
.........................oooo.............................
........................oooooo............................
.......................oooooooo...........................
......................oooooooooo..........................
.....................oooo#####ooo.........................
....................oooooo...ooooo........................
...................ooo#####.#####oo.......................
..................ooooo.........oooo......................
.................oo#####.#####.#####o.....................
................oooo...............ooo....................
...............o#####.#####.#####.#####...................
..............ooo.........................................
.............ooooo........................................
............######o.......................................
.................ooo......................................
................ooooo.....................................
.........######o######....................................
..............ooo.........................................
.............ooooo........................................
......######o######.######................................
...........ooo............................................
..........ooooo...........................................
...######o######.######.######............................
........ooo...............................................
.......ooooo..............................................
######o######.######.######.######........................
.....ooo..................................................
....ooooo.................................................
...oo#o#oo................................................
..ooo#o#ooo...............................................
.#####o########...........................................
.#...ooo......#...........................................
.#..ooooo.....#...........................................
.#.ooooooo....#...........................................
.##############...........................................
..........................................................
..........................................................
..........................................................
..........................................................
..........................................................
...................................#..o#..................
...................................#.oo#..................
...................................#o#o#o.................
...................................#o#o#o#................
...................................#o#o#o#o...............
...................................#o#o#o#oo..............
...................................#o#o#o#ooo.............
...................................#######oooo............
.........................................oooooo...........
........................................oooooooo..........
.......................................oooooooooo.........
......................................############........
..........................................................
..........................................................
..................................................o.......
.................................................ooo......
................................................ooooo.#...
...............................................ooooooo#...
..............................................oooooooo#...
.............................................ooooooooo#...
............................................#ooooo#o#o#...
............................................#ooooo#o#o#...
............................................#o#ooo#o#o#...
............................................#o#o#o#o#o#...
...........................................o###########...
..........................................ooo.............
.........................................ooooo............
........................................######o...........
.......................................o.....ooo..........
......................................ooo...ooooo.........
.....................................######o######........
....................................o.....ooo.............
...................................ooo...ooooo............
..................................######o######.######....
.................................o.....ooo................
................................ooo...ooooo...............
...............................######o######.######.######
....................................ooo...................
...................................ooooo..................
..................................#ooooo#.................
..................................#ooooo#.................
..................................#ooooo#.................
..............................#####ooooo#######...........
..............................#...ooooooo.....#...........
..............................#..ooooooooo....#...........
..............................#.ooooooooooo...#...........
..............................#ooooooooooooo..#...........
..............................#################...........
.............................o............................
............................ooo...........................
...........................#####..........................
..........................o...............................
.........................ooo..............................
........................#####.#####.......................
.......................o..................................
......................ooo.................................
.....................#####.#####.#####....................
...................oo.....................................
..................oooo....................................
.................o#####.#####.#####.#####.................
................ooo.......................................
...............ooooo......................................
..............ooooooo.....................................
.............oooooooo#....................................
...........#ooooooooo#....................................
...........#ooo#ooooo#....................................
...........#o#o#ooooo#....................................
...........#o#o#ooo#o#....................................
...........#o#o#ooo#o#oo..................................
...........#o#o#ooo#o#ooo.................................
...........#o#o#ooo#o#oooo................................
.........#.#o#o#o#o#o#o#ooo...............................
.........###############oooo..............................
.......................oooooo.............................
......................oooooooo............................
.....................o#oooo#ooo...........................
....................oo#oooo#oooo..........................
...................ooo#oooo#ooooo.........................
................#######oooo####ooo........................
................#.....oooooo..#oooo.......................
................#....oooooooo.#ooooo......................
................#...oooooooooo#oooooo.....................
................###############ooooooo....................
..............................ooooooooo...................
.............................oooooooooo#..................
............................oo##########..................
...........................oooo...........................
..........................oooooo..........................
.........................oo#o#ooo.........................
...................#...#ooo#o#oooo.#......................
...................#...#ooo#o#ooooo#......................
...................#.#.#ooo#o#ooooo#......................
...................#.#.#ooo#o#ooooo#......................
...................#.#.#ooo#o#ooooo#...oo.................
...................#.#.#o#o#o#ooooo#.#oooo................
...................#.#.#o#o#o#ooooo#.#ooooo...............
...................#.#.#o#o#o#ooo#o#.#oooooo..............
...................#.#.#o#o#o#o#o#o#.#ooooooo.............
...................###################oooooooo............
.....................................oooooooooo...........
....................................oooooooooooo..........
...................................##############.........
.................................................o........
................................................ooo.......
...............................................o#ooo#.....
..............................................oo#ooo#.....
.............................................o###ooo######
............................................oo#.ooooo....#
...........................................ooo#ooooooo...#
..........................................oooo############
.........................................oooooo...........
........................................oooooooo..........
.......................................oooooooooo.........
......................................oooooooooooo.#......
.....................................###############......
Final i: 828
from advent-of-code-2022-in-rust.
Part 2
assume the floor is an infinite horizontal line with a y coordinate equal to two plus the highest y coordinate of any point in your scan.
To find somewhere safe to stand, you'll need to simulate falling sand until a unit of sand comes to rest at 500,0, blocking the source entirely and stopping the flow of sand into the cave.
Using your scan, simulate the falling sand until the source of the sand becomes blocked. How many units of sand come to rest?
from advent-of-code-2022-in-rust.
Tried to get that working by drawing that floor line - didn't really work, I think I'm going to try teaching the sand that it should behave differently if it hits the virtual floor instead.
Here's my diff that didn't work:
diff --git a/day_14/src/main.rs b/day_14/src/main.rs
index 21a3ed8..d9e2f08 100644
--- a/day_14/src/main.rs
+++ b/day_14/src/main.rs
@@ -80,6 +80,10 @@ impl Grid {
} else {
// Sand lives here now
self.set_char_at(sand_pos, 'o');
+ // If this is the 500,0 source, sand is now blocked
+ if sand_pos == (500, 0) {
+ return false;
+ }
break;
}
}
@@ -90,7 +94,7 @@ impl Grid {
fn main() {
let instructions = String::from(include_str!("../input.txt"));
- let mut grid = parse_grid(instructions);
+ let mut grid = parse_grid(instructions, false);
println!("{}", grid);
// Simulate sand until it falls into the void
let mut i = 0;
@@ -100,16 +104,30 @@ fn main() {
println!("{}\n\n", grid);
}
println!("Final i: {}", i);
+
+ println!("\nPart 2\n======\n");
+
+ // Now run simulation again with a floor at two plus the highest y coordinate
+ let mut grid = parse_grid(String::from(include_str!("../input.txt")), true);
+ let mut i = 0;
+ while grid.simulate_sand() {
+ i += 1;
+ }
+ println!("{}\n\n", grid);
+ println!("Final i: {}", i);
}
-fn parse_grid(input: String) -> Grid {
+fn parse_grid(input: String, has_floor: bool) -> Grid {
// Each line describes a shape of rock drawn on the grid
let mut min_x = 100000;
let mut max_x = -100000;
let mut min_y = 0;
let mut max_y = -100000;
let mut grid_lines = Vec::new();
+ if has_floor {
+ max_x = 100000;
+ }
// First loop to find min/max of everything:
for line in input.lines() {
// Line looks like this:
@@ -144,8 +162,16 @@ fn parse_grid(input: String) -> Grid {
}
grid_lines.push(line);
}
+ // If grid has floor, add an instruction drawing it
+ let mut to_process = "".to_string();
+ to_process.push_str(&input);
+ if has_floor {
+ let extra = format!("\n{},{} -> {},{}", min_x, max_y + 2, max_x, max_y + 2);
+ println!("Adding extra line: {}", extra);
+ to_process.push_str(&extra);
+ }
// Second loop to fill in the grid based on instructions
- for line in input.lines() {
+ for line in to_process.lines() {
// 498,4 -> 498,6 -> 496,6
let mut coords = line.split(" -> ");
let mut done_first = false;
@@ -217,7 +243,7 @@ fn parse_grid(input: String) -> Grid {
#[test]
fn test_parse_grid() {
let instructions = String::from("498,4 -> 498,6 -> 496,6\n503,4 -> 502,4 -> 502,9 -> 494,9");
- let mut grid = parse_grid(instructions);
+ let mut grid = parse_grid(instructions, false);
assert_eq!(grid.width, 10);
assert_eq!(grid.height, 10);
assert_eq!(grid.min_x, 494);
from advent-of-code-2022-in-rust.
I didn't get this working. I'm giving up on part 2 - might revisit it some time in the future.
from advent-of-code-2022-in-rust.
Related Issues (17)
- Day 1: Calorie Counting HOT 2
- Day 8: Treetop Tree House HOT 27
- Day 9: Rope Bridge HOT 7
- Day 10: Cathode-Ray Tube HOT 8
- Day 11: Monkey in the Middle HOT 18
- Day 12: Hill Climbing Algorithm HOT 29
- Day 13: Distress Signal HOT 33
- Day 15: Beacon Exclusion Zone HOT 18
- Day 16: Proboscidea Volcanium HOT 3
- Figure out CI HOT 2
- Day 2: Rock Paper Scissors HOT 18
- Day 3: Rucksack Reorganization HOT 28
- Day 4: Camp Cleanup HOT 14
- Day 5: Supply Stacks HOT 17
- Day 6: Tuning Trouble HOT 16
- Day 7: No Space Left On Device HOT 41
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from advent-of-code-2022-in-rust.