fn main() -> io::Result<()> {
for shape in read_vertices() {
- let has_all_corners =
+ let has_corners =
iter::repeat([0,MAX].into_iter())
.take(DIM)
.multi_cartesian_product()
- .all(|need| shape.iter().any(|got| &got[..]==need));
-
- if !has_all_corners { continue }
+ .filter(|need| shape.iter().any(|got| &got[..]==need))
+ .count();
- if !has_all_corners { continue }
+ print!("{} ", has_corners);
let middle_vertices =
iter::repeat([1,2].into_iter())
let mut fromcnrs =
(0..DIM)
.map(|i| {
- let minc = shape.iter().map(|p| p[i]).min().unwrap();
- dbg!(i, minc);
+ let minc = shape
+ .iter()
+ // point is on the outer edge in direction of index i
+ .filter(|p| {
+ p.iter()
+ .enumerate()
+ .filter(|(j,_)| *j!=i)
+ .all(|(_,c)| *c==0)
+ })
+ .map(|p| p[i]).min().unwrap_or(MAX+1);
minc
})
.collect_vec();