Compiling day12 v0.1.0 (/home/max/aoc2023/day12) warning: unused imports: `Deref`, `Index`, `RangeBounds`, `Range`, `borrow::Borrow` --> src/main.rs:1:50 | 1 | use std::{str::FromStr, slice::SliceIndex, ops::{Index, Deref, RangeBounds, Range, RangeFrom}, borrow::Borrow, io::stdin, collections::Ha... | ^^^^^ ^^^^^ ^^^^^^^^^^^ ^^^^^ ^^^^^^^^^^^^^^ | = note: `#[warn(unused_imports)]` on by default warning: unused import: `slice::SliceIndex` --> src/main.rs:1:25 | 1 | use std::{str::FromStr, slice::SliceIndex, ops::{Index, Deref, RangeBounds, Range, RangeFrom}, borrow::Borrow, io::stdin, collections::Ha... | ^^^^^^^^^^^^^^^^^ warning: variable does not need to be mutable --> src/main.rs:194:9 | 194 | let mut rows: Vec = stdin().lines().map(|l| { | ----^^^^ | | | help: remove this `mut` | = note: `#[warn(unused_mut)]` on by default warning: methods `enumerate`, `optimize`, and `multiply` are never used --> src/main.rs:25:8 | 20 | impl Row { | -------- methods in this implementation ... 25 | fn enumerate(&self, f: &mut F) | ^^^^^^^^^ ... 32 | fn optimize(&mut self) { | ^^^^^^^^ ... 44 | fn multiply(self, n: usize) -> Self { | ^^^^^^^^ | = note: `#[warn(dead_code)]` on by default warning: methods `compatible` and `enumerate` are never used --> src/main.rs:96:8 | 94 | impl <'r> RowView<'r> { | --------------------- methods in this implementation 95 | 96 | fn compatible(&self, buffer: &[bool]) -> bool { | ^^^^^^^^^^ ... 148 | fn enumerate(&self, buf: &mut [bool], window: RangeFrom, f: &mut F) | ^^^^^^^^^ warning: function `pretty` is never used --> src/main.rs:188:4 | 188 | fn pretty(row: &[bool]) -> String { | ^^^^^^ warning: `day12` (bin "day12") generated 6 warnings (run `cargo fix --bin "day12"` to apply 2 suggestions) Finished release [optimized] target(s) in 0.32s Running `target/release/day12` Counting solutions for RowView { bits: [None, None, None, Some(false), Some(true), Some(true), Some(true)], pattern: [1, 1, 3], freedom: 0 } Descending p=0 consumed=0 freedom=0 Trying offset 0 Descending... Descending p=2 consumed=1 freedom=0 Trying offset 0 Descending... Descending p=4 consumed=2 freedom=0 Trying offset 0 Descending... Descending p=8 consumed=3 freedom=0 no blocks remain 1 at position 5 1 at position 3 1 at position 1 Counting solutions for RowView { bits: [Some(false), None, None, Some(false), Some(false), None, None, Some(false), Some(false), Some(false), None, Some(true), Some(true), Some(false)], pattern: [1, 1, 3], freedom: 7 } Descending p=0 consumed=0 freedom=7 Trying offset 0 Bit cleared in range 0..1, continuing Trying offset 1 Descending... Descending p=3 consumed=1 freedom=6 Trying offset 0 Bit cleared in range 3..4, continuing Trying offset 1 Bit cleared in range 4..5, continuing Trying offset 2 Descending... Descending p=7 consumed=2 freedom=4 Trying offset 0 Bit cleared in range 7..10, continuing Trying offset 1 Bit cleared in range 8..11, continuing Trying offset 2 Bit cleared in range 9..12, continuing Trying offset 3 Descending... Descending p=14 consumed=3 freedom=1 no blocks remain 1 at position 11 Trying offset 4 Bit cleared in range 11..14, continuing 1 at position 6 Trying offset 3 Descending... Descending p=8 consumed=2 freedom=3 Trying offset 0 Bit cleared in range 8..11, continuing Trying offset 1 Bit cleared in range 9..12, continuing Trying offset 2 Descending... Cache hit 1 at position 11 Trying offset 3 Bit cleared in range 11..14, continuing 2 at position 7 Trying offset 4 Bit cleared in range 7..8, continuing Trying offset 5 Bit cleared in range 8..9, continuing Trying offset 6 Bit cleared in range 9..10, continuing 2 at position 2 Trying offset 2 Descending... Descending p=4 consumed=1 freedom=5 Trying offset 0 Bit cleared in range 4..5, continuing Trying offset 1 Descending... Cache hit 1 at position 6 Trying offset 2 Descending... Cache hit 2 at position 7 Trying offset 3 Bit cleared in range 7..8, continuing Trying offset 4 Bit cleared in range 8..9, continuing Trying offset 5 Bit cleared in range 9..10, continuing 4 at position 3 Trying offset 3 Bit cleared in range 3..4, continuing Trying offset 4 Bit cleared in range 4..5, continuing Trying offset 5 Descending... Descending p=7 consumed=1 freedom=2 Trying offset 0 Bit cleared in range 7..8, continuing Trying offset 1 Bit cleared in range 8..9, continuing Trying offset 2 Bit cleared in range 9..10, continuing 4 at position 6 Trying offset 6 Descending... Descending p=8 consumed=1 freedom=1 Trying offset 0 Bit cleared in range 8..9, continuing Trying offset 1 Bit cleared in range 9..10, continuing 4 at position 7 Trying offset 7 Bit cleared in range 7..8, continuing Counting solutions for RowView { bits: [None, Some(true), None, Some(true), None, Some(true), None, Some(true), None, Some(true), None, Some(true), None, Some(true), None], pattern: [1, 3, 1, 6], freedom: 1 } Descending p=0 consumed=0 freedom=1 Trying offset 0 found blocker at 1 Trying offset 1 Descending... Descending p=3 consumed=1 freedom=0 Trying offset 0 Descending... Descending p=7 consumed=2 freedom=0 Trying offset 0 Descending... Descending p=9 consumed=3 freedom=0 Trying offset 0 Descending... Descending p=16 consumed=4 freedom=0 no blocks remain 1 at position 10 1 at position 8 1 at position 4 1 at position 2 Counting solutions for RowView { bits: [None, None, None, None, Some(false), Some(true), Some(false), Some(false), Some(false), Some(true), Some(false), Some(false), Some(false)], pattern: [4, 1, 1], freedom: 5 } Descending p=0 consumed=0 freedom=5 Trying offset 0 Descending... Descending p=5 consumed=1 freedom=5 Trying offset 0 Descending... Descending p=7 consumed=2 freedom=5 Trying offset 0 Bit cleared in range 7..8, continuing Trying offset 1 Bit cleared in range 8..9, continuing Trying offset 2 Descending... Descending p=11 consumed=3 freedom=3 no blocks remain 1 at position 10 Trying offset 3 Bit 9 set, giving up 1 at position 6 Trying offset 1 Bit 5 set, giving up 1 at position 1 Trying offset 1 Bit cleared in range 1..5, continuing Trying offset 2 Bit cleared in range 2..6, continuing Trying offset 3 Bit cleared in range 3..7, continuing Trying offset 4 Bit cleared in range 4..8, continuing Trying offset 5 Bit cleared in range 5..9, continuing Counting solutions for RowView { bits: [None, None, None, None, Some(false), Some(true), Some(true), Some(true), Some(true), Some(true), Some(true), Some(false), Some(false), Some(true), Some(true), Some(true), Some(true), Some(true), Some(false)], pattern: [1, 6, 5], freedom: 5 } Descending p=0 consumed=0 freedom=5 Trying offset 0 Descending... Descending p=2 consumed=1 freedom=5 Trying offset 0 Bit cleared in range 2..8, continuing Trying offset 1 Bit cleared in range 3..9, continuing Trying offset 2 Bit cleared in range 4..10, continuing Trying offset 3 Descending... Descending p=12 consumed=2 freedom=2 Trying offset 0 Bit cleared in range 12..17, continuing Trying offset 1 Descending... Descending p=19 consumed=3 freedom=1 no blocks remain 1 at position 14 Trying offset 2 Bit 13 set, giving up 1 at position 6 Trying offset 4 Bit 5 set, giving up 1 at position 1 Trying offset 1 Descending... Descending p=3 consumed=1 freedom=4 Trying offset 0 Bit cleared in range 3..9, continuing Trying offset 1 Bit cleared in range 4..10, continuing Trying offset 2 Descending... Cache hit 1 at position 6 Trying offset 3 Bit 5 set, giving up 2 at position 2 Trying offset 2 Descending... Descending p=4 consumed=1 freedom=3 Trying offset 0 Bit cleared in range 4..10, continuing Trying offset 1 Descending... Cache hit 1 at position 6 Trying offset 2 Bit 5 set, giving up 3 at position 3 Trying offset 3 Descending... Descending p=5 consumed=1 freedom=2 Trying offset 0 Descending... Cache hit 1 at position 6 Trying offset 1 Bit 5 set, giving up 4 at position 4 Trying offset 4 Bit cleared in range 4..5, continuing Trying offset 5 found blocker at 6 Counting solutions for RowView { bits: [None, Some(true), Some(true), Some(true), None, None, None, None, None, None, None, None], pattern: [3, 2, 1], freedom: 4 } Descending p=0 consumed=0 freedom=4 Trying offset 0 found blocker at 3 Trying offset 1 Descending... Descending p=5 consumed=1 freedom=3 Trying offset 0 Descending... Descending p=8 consumed=2 freedom=3 Trying offset 0 Descending... Descending p=10 consumed=3 freedom=3 no blocks remain 1 at position 9 Trying offset 1 Descending... Descending p=11 consumed=3 freedom=2 no blocks remain 2 at position 10 Trying offset 2 Descending... Descending p=12 consumed=3 freedom=1 no blocks remain 3 at position 11 Trying offset 3 Descending... Descending p=13 consumed=3 freedom=0 no blocks remain 4 at position 12 4 at position 6 Trying offset 1 Descending... Descending p=9 consumed=2 freedom=2 Trying offset 0 Descending... Cache hit 1 at position 10 Trying offset 1 Descending... Cache hit 2 at position 11 Trying offset 2 Descending... Cache hit 3 at position 12 7 at position 7 Trying offset 2 Descending... Descending p=10 consumed=2 freedom=1 Trying offset 0 Descending... Cache hit 1 at position 11 Trying offset 1 Descending... Cache hit 2 at position 12 9 at position 8 Trying offset 3 Descending... Descending p=11 consumed=2 freedom=0 Trying offset 0 Descending... Cache hit 1 at position 12 10 at position 9 10 at position 2 Trying offset 2 Bit 1 set, giving up Part 1: Total: 21