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<Row> = 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<F>(&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<F>(&self, buf: &mut [bool], window: RangeFrom<usize>, 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