diff --git a/src/exercises/day_9.ts b/src/exercises/day_9.ts index 820e512..18c69b4 100644 --- a/src/exercises/day_9.ts +++ b/src/exercises/day_9.ts @@ -96,39 +96,92 @@ function is_area_red_green( // - Every surround must form a line // old: Every corner needs to be surrounded // Error 1: 4560365591 + // Error 2: 248032161 + // Error 3: 4638219675 + // NOTE: I do not need to verify every wall, just the opposite corners // Verify left wall - // floor.red_tiles.some((tile) => { - // // point and side or point and point and the inverse - // }); - const l_cover = - floor.red_tiles.some((tile) => - tile.x <= tl_corner.x && tile.y <= tl_corner.y - ) && floor.red_tiles.some((tile) => - tile.x <= bl_corner.x && tile.y >= bl_corner.y - ); - // r - const r_cover = - floor.red_tiles.some((tile) => - tile.x >= tr_corner.x && tile.y <= tr_corner.y - ) && floor.red_tiles.some((tile) => - tile.x >= br_corner.x && tile.y >= br_corner.y - ); - // b - const b_cover = - floor.red_tiles.some((tile) => - tile.x <= bl_corner.x && tile.y >= bl_corner.y - ) && floor.red_tiles.some((tile) => - tile.x >= br_corner.x && tile.y >= br_corner.y - ); - // t - const t_cover = - floor.red_tiles.some((tile) => - tile.x >= tr_corner.x && tile.y <= tr_corner.y - ) && floor.red_tiles.some((tile) => - tile.x <= tl_corner.x && tile.y <= tl_corner.y - ); + const ls_cover = floor.red_tiles.some((tile) => { + return (tile.x === tl_corner.x && tile.y <= tl_corner.y && + ((floor.red_tiles.some((tile_2) => + tile_2.x === tile.x && tile_2.y >= bl_corner.y + )) || (floor.red_tiles.some((tile_3) => + tile_3.x <= tile.x && tile_3.y >= bl_corner.y && + floor.red_tiles.some((tile_4) => + tile_3.x <= tile_4.x && tile_3.y === tile_4.y + ) + )))) || + (tile.x === bl_corner.x && tile.y <= bl_corner.y && + ((floor.red_tiles.some((tile_2) => + tile_2.x === tile.x && tile_2.y <= tl_corner.y + )) || (floor.red_tiles.some((tile_3) => + tile_3.x <= tile.x && tile_3.y <= tl_corner.y && + floor.red_tiles.some((tile_4) => + tile_3.x <= tile_4.x && tile_3.y === tile_4.y + ) + )))); // NOTE: should also compare with opposite situation (first side and then point or 2 sides) + }); + const rs_cover = floor.red_tiles.some((tile) => { + return (tile.x === tr_corner.x && tile.y <= tr_corner.y && + ((floor.red_tiles.some((tile_2) => + tile_2.x === tile.x && tile_2.y >= br_corner.y + )) || (floor.red_tiles.some((tile_3) => + tile_3.x <= tile.x && tile_3.y >= br_corner.y && + floor.red_tiles.some((tile_4) => + tile_3.x <= tile_4.x && tile_3.y === tile_4.y + ) + )))) || + (tile.x === br_corner.x && tile.y >= br_corner.y && + ((floor.red_tiles.some((tile_2) => + tile_2.x === tile.x && tile_2.y <= tr_corner.y + )) || (floor.red_tiles.some((tile_3) => + tile_3.x <= tile.x && tile_3.y <= tr_corner.y && + floor.red_tiles.some((tile_4) => + tile_3.x <= tile_4.x && tile_3.y === tile_4.y + ) + )))); // NOTE: should also compare with opposite situation (first side and then point) + }); + const ts_cover = floor.red_tiles.some((tile) => { + return (tile.x <= tl_corner.x && tile.y === tr_corner.y && + ((floor.red_tiles.some((tile_2) => + tile_2.x >= tr_corner.x && tile_2.y === tile.y + )) || (floor.red_tiles.some((tile_3) => + tile_3.x >= tile.x && tile_3.y <= tr_corner.y && + floor.red_tiles.some((tile_4) => + tile_3.x === tile_4.x && tile_3.y >= tile_4.y + ) + )))) || + (tile.x >= bl_corner.x && tile.y === br_corner.y && + ((floor.red_tiles.some((tile_2) => + tile_2.x <= br_corner.x && tile_2.y === tile.y + )) || (floor.red_tiles.some((tile_3) => + tile_3.x >= tile.x && tile_3.y >= br_corner.y && + floor.red_tiles.some((tile_4) => + tile_3.x === tile_4.x && tile_3.y >= tile_4.y + ) + )))); // NOTE: should also compare with opposite situation (first side and then point) + }); + const bs_cover = floor.red_tiles.some((tile) => { + return (tile.x <= bl_corner.x && tile.y === bl_corner.y && + ((floor.red_tiles.some((tile_2) => + tile_2.x >= tr_corner.x && tile_2.y === tile.y + )) || (floor.red_tiles.some((tile_3) => + tile_3.x >= tile.x && tile_3.y >= br_corner.y && + floor.red_tiles.some((tile_4) => + tile_3.x === tile_4.x && tile_3.y <= tile_4.y + ) + )))) || + (tile.x >= tr_corner.x && tile.y === tr_corner.y && + ((floor.red_tiles.some((tile_2) => + tile_2.x <= tl_corner.x && tile_2.y === tile.y + )) || (floor.red_tiles.some((tile_3) => + tile_3.x >= tile.x && tile_3.y <= tr_corner.y && + floor.red_tiles.some((tile_4) => + tile_3.x === tile_4.x && tile_3.y <= tile_4.y + ) + )))); // NOTE: should also compare with opposite situation (first side and then point) + }); - return l_cover && r_cover && b_cover && t_cover; + return ls_cover && rs_cover && ts_cover && bs_cover; } function calc_distance(a: Coordinate, b: Coordinate): number {