2IKHKAD4YBM4AREIQ3KS6R5MT26FO6NV6K2YI4TDRXLGDHUI3B4AC 106044804126658
576480117807724
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();const lines = data.split(/\n/).map(Number);const min = Math.min(...lines);const max = Math.max(...lines);let i, j, val;for (val = 7, i = 1; val !== min; i++) {val = (val * 7) % 20201227;}let key = max;for (j = 1; j < i; j++) {key = (key * max) % 20201227;}console.log(key);
swsenenwneswnewseswwseswnwsweeswnwesweeeeneeeneeeweeeeneneneeewewsewswnewnwnewwwwsewnwnwnwnwnenwwnwsenwnwnwnwnwnwnwnwswseswneswseswswneswswseneseswswsenwswseswswswneswswswswwneseswwswswnewnwwnwnenenenenwsweenenwnenwnenesesenwsewseneneseneenenwwneneeswnewsweeeeneweeeseeeeeenewneswewnwswwewwwsewnwnwwnwnwwwnwnwnwwnenwnwnwnesenwwnwnwwneswnwnenesweneenwnwnwwnwwwwenwwswnwwwwwewsesewswnwswwswswewswseswnwnewswnewswnwwwwenewsewwwwneswenwnwnenenewneneneneneenenesenwneswneswsenwewsenwnwneseswwwwwwswwswwwwenesenwseneswseswnwneseseseseseswnwsewnesweseswenwnenwnweseeseseeswnwseswswnenenenenewneneeeneneeneneeneneneseseseseeweseeeseewwwwwwwwwnewnwwwswwwsesenwesenwseeseseseewswneseseeseswwnewwwsewnwwnwnwewnwswnwwwwnwenwnwnenwnwneneenewswnwnenwswnwnesenwsweeswwneeneneeneeneeeeeswseneenesewneeneswwnenenweeenenewweseswseswsenwswswseswswswswenwswseseswnwnwnenwnenwnenwnwnwnenwswnenwwwnwesewnwwwwwnwwwnwwnwnwseneenwnwnwwewnwnwnwnwnwnenwnwnwnenenwsenenwnwneneneneweeeeneeneesweseswswneseswseseswseeneswswswseseewsewnwswswwnwneswwneneneweseswnenwneeneneeeeeeeeswwwwwwwwwwwwswswwswswneseweewenwseeeeeweeeeneeeseneneneneneeneswneeeneesewnwnwwswnwseenwwnenenwwnwswsweswswswswsewseneseswswsesweswnwswnenewewwwwwwwwwnewwswsesewwwenwsweneseseeeseseswneseseseneeseesenwwseneswseseseseewnwswswneeeewneseenwnwnesewwswnweswnenenwneenwneneneneneneneneneswenewnenwneneseeenwnwnwneneneswneswwnenwnwnenwneseenenwneeneneneeeeneenesesesewseseseswneseesesesesenewseswsesesenwnewseneneeeneeeeeenesenwneneeeweneneeenweeeseesweeeeeesesenwswnwseewseswseeeseswenenwseneeneeeseswseeesweneeseeesweeeswweswnwneswswwswswneswswswswswswwwswwwnwnwnenewnwenwswnwsesenwnweneseneenwneeeeeneneeeewneeeneswsenwsesesweswsewswswswsenwneseswseswwewwwwwnwwwwwnwwwnwswseweeenwswneseseesenesesenwsesesesesesesewseesewesewnwnwnweswnwnwsenwnwnwnwsenwnwnwnwnwswswswswswswswswswseswswswswswswwswneswwswnwnwsewwnwewwewwnesewwneenenenwnewnenwnenenwwneswneseswnenwsenwnwseseseswswseswsewnwsewswswseeseeswsenwseswnweswnwneseweswsesweseseswneseseswwnwswneneseneneseeseesenwswnwwwwswswwwwswwneswseswnwswswsewsenwnwwnwnwesewswnewswwsenwwnwnwwnwswsewneswswswswwswswwswswswsweneseeeswneswneeseesenwewsenwewnwnwneneneeeneweneneesweneeeseeenwnweewswnewneseneeneneesenewesesenweseseeesewseseseseseseeeseeeseseseenwseeneseseeewsenwnwseseenwenwnenwwswnwnwnwwnwnwnwnwnwsenewweseeenwsesesenesewseseseseeenenenwswnenewswenwnwneenwwnwswneneneeswseseneswsenwswseseseswsesesewsenwseseewnwneswneseneneneneeneneswenenenenewneseswneewsenesesewnwwswnesewswesenwneeswwesenwwenwnwnweseseeeeeeseneeneswneeswnenesenwnwneswnenwneneswseneswswneseseswswswswwewnwsenwesweneswnwenwenwwwnwnwnenwnenwnwnwnwnwswenesweseseneneeseseeeeswsenwwwesesenwesweswseswwnwsesesewseseseseswseneswneneseswseseseseseswwseswsenesesesesesesesesesesenwswswseswswswsenwseeeeseseeseseseenwewsweseewwsenwewwnewwswwwwwswwwwwnenwnwnwneswnwnwnwsenwwwnwwnwnwnwenwseswwwswswswwwsewnenwswwswwswsewwenweenesesesenewnwnwwswswswseseeseswnenenenenenenenwnenesenewnenwnenenwneneenenesweeeeseneeneeeneeneeewwnweseeswnwwenwnenwnwnwwenwnwsenwwnwneswswswseswswswwswneswneswseeneseswsewseseswseseswswwswswseseeneswsesenweeeseeseswseweneseewewewwnenesewsenwwnenwnwseswswwnwnwsesewnwseeeswnwnwseewseenwnwwwwwnwwnwnwwwwnwsenwwwwseweenwneseeeneeneenenwseeeeeeenwenwnwnenwswnwneesenwwwnwnwnwsenwnwswswswswseswswswswwseswswswswswswswswneswwwwwwwwwwnwwewwwnwwwwesweeeeeeneeenwnwenesweeenweeeseesewwwnewwsewewwwwwwwwwwseseseeseseesesenwesewseeseseseswnesesesenwnwwneswwswwnenwwwewnwnwwnwwswnwsesewneenwenwseenwneeseeseewsweneeneneneneneneswsewswsenenenwnenenenwwneesweseswswwsewswnweswswewswswseneseneneeewneneenewnenenenenenenenenewswnesewwsenewswswswswneswswswsweeswswswsesenwseswsewseswneseseseswseswseswwswwwseswswswswswweswneswswnewswwneneesenewewnenwneneneswnwweswswneseswswswwwswswswswswwneswswwwswsewwneenenenenenenenenenwsewneneneneswneneneeneeeeseenenwwesenesweeseeeswswswswswswswwswnwswswwswseswswswsweneseseseswsesesewsesesesesenwseseswenesenenesweenenenewneneeeneswnweeneneeneswsenwseenwenweneswsewnenwenwwwwseseseswnwwneseeseseseseseseswsewsesesenwseseseewseswenewswnenwswsweswneswswswsewnwwnwwwswwwwnwsenenwnwwwnwwwweswswwswswnwswswwwswswsewsweeswwwnwwnwenwnwnwwnwsewnwwwnwnenwnwnwnwnwseswwseeswswseenwneseswnewwswseswswenewwwswesewwnenwseswseweenwnwnewswseswseesenwseseseseseseseswseswwseeneneneneneneneneneneneenwnewneswewnwswswnewnwnwwwsenewweeswnwnenwwswenweenweeneswneeeeneneeenesweswswseeswswsenwswsewwseneneswsenwneswewnwnenwnwnenesenenenwnwnwneswnenewenwswnwnwnwnwnenwnwnwenenwnwnwnwnwnwnwneseseneesewnwnwneenwseeswswsesewneseswnewswnwswnwnwnwwenwnwseewnwnenenwwseesesewenwneeeenwnesenenwsweseswnwswswnenenwnwnwnenenwnwnwnwswnenenenenwnwseewewnwwswesewsweswnweswswnwnwwneswneseneewwswwwwnwwwewwwwwswwenwnwnwwswnesewwnwnwsewswnwsewwwwwsweswnwswswnwwwwewseswneneneseweneenenwesewneneneneneneseeeeenweeeeswseewnweewneswnewwnwnenwnweneneswnenwenenenwnesenwneeseseseseswsenwseseswseseseseseseseseseeseeseeseeesesenwwseenenenwnwnwnewnwnesenwnwsenwnwneneseeswewwnwnewnwwnwnwnwnwnwswswswwwnwenwsenwwneeneeeneneneenewneswenwnenenwnenwnenwewenwnenewseeeenwswswwswewwewwwwnwwnwwwnweeeeeeseseeeeeeeeeewwnwneeeseeneeneeneeneweseeeneswnwwnwsweswwwsewwswswwswneswseswswswseswswseswsesweswwswnewneneeneseenenenenenenenenenenewwnenesewwwwswwnwwwnwwwneewwwseeenwseseseseeseseseeeseeseseseeseseseseseeseseswneseswseseesesesenwsenwseeseeesesewswseswwsenwseswneseeswwneseenwnenwenwneeneneneneneeseeseenwneesenwsweeneneneeseeneesenwwwnenenwswnwswnwnwnwnwnwnenwnenenwnenwnwnwnwnwnwnwenwnwnwnwnwnwnwnwnewnenwnwswnwnwwwwwnwwnwwnwewnwnwnwwnwwwswnwneewneenewseneneeneneneneneneneeneneneneneneneneneneneswnenwnenenwnesenwneneeeeeeeeseeeeeeeneeweeeewwsweswsweseswswswswnwnwewnwneswweswswseseenweneesenenwnwnwneswswsenwswswseswwswswswswwwswswwseswseswwseseswswswneseswseswswswneseswswsweneeneewnenwneeseeneneeneneneseeeeeenwnweswenwenenwswswneeeewesenenenenesweneswneswnenwneenweseeseeneesweswnwseeswnesesenenwwswnwsesenweneenenweswwewnenwnwnwnwnwnwnwnwnwwnwnesenwswnwenwnwnwwnenwnwnwswnwswsenwnwenwnwswnwenwnweswweeenwneswnwnwwswsewwswswseneewesewnwseenwseseenweseseseesesesenwseenweseeeeseseeneeseeeseweeeeeseeeeseseseeeewneeeseeesweswswwwnewswwswwswwswwswsweewseeenwsweenweneesewnweewwswswsenweswnwsenwnwswswwnesewenewwnenewswnenesenenenenenwnwnenewneenenenenwnwnwnwnwenenwnwnwwnwnwnwsweweesweseeeswnweenwseneeenweeewesesenweseenwseseseeseneseeesweeneenenewneneneneneseneneneeeeesesweeewseseeeneesewenesewwswwwswswswwswswnwsweswswwswnewseswswswswswseswswswswswswswswswseseseswswenwneenenwenenweseweneenesenwswneswnwswneseswwwwwwwwwwwwwwwwnesenewneswswswswswsweswswseswswswswswswseenwnwswsweneeeseeseseeseeseewseseseseeeswneswswwnewewswswsewwswwswnewsewnwnwwwswwnwwewwwwwseewnewswsenweeneeseeewenwsewnwnwnwnwseswnwnwnwnwenwnwenwnwnwnwwwwsweeseneeeswewenwneeseeeeeeewnwenwwnwnwnwnwewswwswswwwwwwsewswwneswswswswwnwnwnwnwnenwnwneneneswnenewwnwnwswnwesenwneseneenenwneewnenwneneswnwnenenwnwwsenwnenwnenenwnenenwswwwwswswnenwsweswenwswseneswwswneseeeeeewneweeeeswsewesweenweneseswsewnwwnenwwsesenesewnwweeswswnwsesenweeseseswnewseseswsenesesenwsenwnwnwnwnwnwenwnwnwnwwnwwwnwwwwseseseseseswswswswneswsenwneneswnenenenenwnenwneesenwseeswseseseseseseswsesenesenwswseseswswswswnenwswenewenwneswseswwswswswsesweswwwnwswwswwnweswwwswwswsewswwswwswwswswwnewnewwswseneswwnwweswswseswseeswwneswswsweweseseseesesesenweeseseseweesesweseswswnwnwnweswswswswswswsweeswseneswsesenesweewwseneswseswswnwnwsewseeseseseeeseseeseseseneseseswnesesesesesesewseseseswseseseseseseseseseseswseswseseseseswsesewseswseneseenwnenwenwnenwnwswsenwnwswneenenewnenwneneneneneneneewnenenenenenwwsweneswwswwsewswwswwswwenwswswswsewseseneswswswseseswseeswseswseseseneneseewneseneneneeneneenwnenewewwnwwwewswewwwwwwwswwswwweeswneneneneneneneeneneneswswnenenwnwnwnwnenenwnwsenwnwnenenwnenweeseseseesenwseseeesesesewseseseseeswwewwwswwwswwwwwwswnwsewwnwnwwnwnwwwnwnwewnwnwwnwswswnwwnwenenwnenwnwnenwnwnwswnwnwwnwnesenwnweswnenwwwneweenenwswnesesewnewswswwwseseswswsesesesewswseseseseseseneseswseseswswseswseseswseswseneeswswseswsesewseeneneenweeewnwesenenwseswseewweswenenweeeneeeneewseeswenweeenesenewwwswseseswseseeswneseweneneeneneeenweneneeeeeseseeseseeweswswenwneeeeneewnewnwwneenwwwwsenwwwwnwwwwwwnwnweseenweewneswesweeeeeneewswswswwnewswwswseneswwwswwwswswwnenwswnwnwnwenwnwnwnenenwnwnenwnwnwnenenwnwwwwnwnwwnwnewnwnwnwnwsenwwwwwswnwwseswwswwswwnwwewswsewswewwneeweneneneseneswnewnenesesenenwneesesesesenwseswseswsesesesenwsewseneeseseswseswsenwsweseswsewswsweswsenesesesweewwsweswseseswnwnwnwswseenenwnenwnwnenenwneswseseenwsesenwswsenenwseswnewsewseseseseeseseseseseesesesesenwseseswsesewwenwnwnwwnenwnewswnwwwwnwwwnwwnwnenesewnwnwnwnwnwnenwsenwnwnwnwnwnwnwnwnenwseneswnweseseswneweswnesenweewnesesenwseseseewseseewseneseeseseseswwwnwwnwnwwseswwnwenwnwwwnwnwewwwseseswsenwseswswseswwneseswsesesweeswnenenenwneneenweeeneeeeeneseseseseswneswseswseswsenwseseseswseseenenenenenenwnwnwnwnenesenenwnwneswnwneneswwsweswwswwwswswswswwwswwnwsewswwnenwwwwwnwenwnwweenwnwseseseseeeeeeeeeweeswswenwsenwnwnwnwnwnwnwnwnenwnwnenwwneswwswswsweswswswswwesweseswswswswswwseseesenwseweseeeseseewseseswsesenwseeeesweeeeeseeweeenweeeeseeswneseseseseseswsesesesesesesesenweswenewsenwwneeeneeneeneeneneewswenwnwenwwnenwwswesewseneweewswsweswenwswnwswswnwnwwnweenenwnwenwenweeswswwwwnwneneneswnwnenenenwnwneneswnwnwneseneneneswseeesweeewsesenwweseenweeneenenwneswneswneneenesenesewnwnesenewnenenesewsesesesesesesenwseseeseneseewwseseseswswswswwswwneswwswswswswwswwwnweeesenweeewseweeeswweneswnenweeeeeneeeweseeweeeeeeeeseswnesesewwseseeenesenewseswwnesweeeeeeseeewseeeeeneseeeenwwwnwenwwswwnwenwwsenesenwwnwwwwwwwwwwsenwwnwwnwwnwwwsewseswswswseswseseswswswseswnwesenwseswsesweneeneeneneeeeweneneneseweneeeswwwwewswnwswewnwswwswwswwwswsweswneseeneneewneswseeweeeneenwnenwswswnwwwseswnwnesewseswwnwswsenwsweswswswwsewnwwwewswwneswsewwwnwnwnwwnwnwwnwnwsenwnwnwnwnwnwseenwnwnwnwseseseewsesesesesesenenewsesesesesesesesenesenenenenenwnwwnwnenwnenenewneneneenewesesesenweseseseswseseswsenwswsesewseeseeswseeeswenweeseseeeneeeeneswwnwwwwnwwwewwnwswwenwwwnwswnwnenwnwnwnwnwnwnweswnenwwwsenwnwnwwnwsenenwswnenwwnwnewwseseenwseeenwweseeeweesweeeeseswswsweswswswneswswseswswwwswswswswneswneewwwswwwwswwwwnwwwwwswwwseswsenwseseseswseseseseneneeswewnenwswneneseswenwseeweneneswnwnwenenenwnwnwnwseenwnwsenenwnwwnwnwneswneneneneneneseneneswnenenwnenwnwnwnwnwnwnwsewnwnwseenwnwnwnenwnwswnwwseswseseswseseswneswneswswseswswseswswsesewnwnwnwnwnwnwnwnenwnwnwnwnwnwsesenwnwnwnwseseseeesesewsenenwseweeseeseseenwnenwwweseswnwwwnewwswsenesewwswnwseseseesesesesesewseneseseseseswseswseseseseesewneseseseneseeeseseeswsesenwnwwnwnenwewwnwneseswwwwnwwwesesesesewseseseseseeseesenwseseseseeswswnwswswneswswswseweseseswswswswneswneenenenenenwnenenenenenwnenwnesenenenwwswnwswswnwnenweeenenesenwwsenesweeeeeeeeeenweeeeenwswsweenwnenenenwswnenenwnenenenwnwwwnwnwenwnwnwsenwwwnwwnwwnwnwnwnwewneweseeseseseseesenwnenwnwnwnewsesenwnwnenenwnewnwnwnenwsenwswneenesewnwwwwwnwwwwnewsewwwnwwswwnenwenweseeeeseseeeeewesweseneswsewnewwneewenenenwnwseeseeswseeseeseseseseeseenweeeewnwnweweswsesenweseseseseseswewseseeeeneeseeenwseeeneenwseweeeeesenwseswseswswseswseseseswseseseswswsewwseswnewwwswewwwswnewwweweeeneeeeeeenweeseenweesweesesenwneewswweneswnewsenenwenwswnwnwnwneseenenewewnenewswneeseneneneswweswswwswswwnwwwswswwwswnwweswwswnenenenwneneenwnwnwnenesweswnwnenenwnwnenwnwwewwnwnwnwsewswneenwswswnwnwnwwwsewwnwnewnesewwwwnwnwnwnwwwswwnwsenwswnweswweswswwwwenenwneswswswneseswwswwwsewswwswnwnwneeswnewewwswwswwewwwwwwwwseswneneenenweesweneneeneneneneneneneeneseeseseseeswseweenweseseeeseseseseeswseswseswswswseswseswswswnwswnenenenenenesewneewseneneneneneneneneneeeswneseenweseeeeeeseewsewseeenwewswswwswswwswswwswswswswswswnwsenwnwnwnwnwnenwnwnwnenwswnwnwnweeeseeeeeeweenweseseseeeseswswwwswnewsewswwwnwswswsenwswseswseseswsesewsenesenesenwseseswswseneswswswneswseswswnwsesesesesesenwnwwnwnwnwenwnwnwnwnwnwnwnwnwnwnwnwneeneseeneneneneeneenewneneneswnenewnwsenwnwnwnwwnwsenwnwnwnwnwenwnwnwswswswnwswswswswneswneswswswswewseswnwswseswneswswswswswswswseswswswswswswenwswwwwwnewnewnewswwswwswwwseswwwswenweswseswseneseswswsesewseseewswseswwsewsweswwswwswseneneneseneswwnwnwnwseneseenenenwneswwwwwseswsenesweneneeseneneneneneenenenenenwnwneneeenwnwwwnwnwnwnwnwnwnwnenwsenwnwwwnwnwwwwwwswwwwwnwwwewwnewnenenesenenwnwswenwnwnenenwneneneneeswneeeneeneneesweeneneneneeeeeweneeeseseenwnwsesesenwesenweseseseweseneeeeswswneeeeeeenweeeneseseesewnesewseseeseseswseneseswnwsenesesesewseeeneeseeseseseseeseeesewswwnwwnewsewnwnwnwesewwnwneseneeseeneenenewnenenwseesenwnwnesewneneeseeneeswnwneesesewwneswewwneeswneneswseneenwnenenenewneneneneneneseneenesesesweseswsesesewseswsesewsesweswsesewsesesesesewseseseneseeseneeseseseswwwenwwnwswnwnwneswwwnenwsewnwwwswwswswseseswswnwseswswswswsweseswseswsenwenwnewweneneswswnwswwsenwenwenwnwnenwnenenenenenenenenwneneneneneneenwwswwwnwwsewsewswnewsenwneeswnenwnwseswnwnwenwesewnwneeswswnwnwswnwnenwswnenenenenweneseneewseeneewsweneesenwwsenenenewnwnwswnwnwnwwwwnwnwnwwsesenweeeseseeeseseeseeesesweseneneneneneenenenewseneneneneneneneneneeeeseeeesweneneneeeeeenenweeswwwwnwneewwswwnwwneswwseswswwswwseseeeesesesesenweeneseseseseeeeesesesenweeeeeweeeswenwnewwwwswneenwswwseseswseneswswswseswseswswsewswswswseeseweseswseeeneseseewnweseeseseseeswswswswswswswswneswswswswwswswswswswswswwswswenwwswwwnweneneneeeneneeneeseneneneneeneswwswwwneneswswwswwswwseswnewswsweeeewenwweeeesweeeeewnwseeewswswwwswsewwswnewnenewewseneeswswneswenweswnwwwwneswweeswseswnenwswseswwseseeseseseneseseswsenweeseseeseseseseswnwsesesewsewnweweseseeseswseseswsewwwseseswswneenewenenwsenwsewwnwnenwnwneswswsenweswneneneeneneneneneeswnweeeeneeseneeeswenweneenwwsenwnwwnwnwnwnwnwnwnwnwwnwnwnwenesewenwnwnwwwnwwnwnwwnwewnwsenwnenwnesenwnwnwnwwwnewneswnwwsesenwwwewesenenewwswseseseneeseswsewsenenwsenwnwsenenwwnwwnwnenwnesenwnwnwnwneswswswswnweewnenwswswswswswswseswswnenwseseseseseeeseseseeeeseeeswsesewnwnwnwwwenwsewnwnwwnwnwwnwnwnenwwwwwwnwwewnwwwnwswswswswswswswswswswswswswneswseswneswswnenesweneneeneneneneneeneneeneneeswswswswswswwseswwswwswsweswswswnwwswnwwewswwnwwwwnewwnweeewenweeeseneeeseeeeeeesweswswenweswseseswneswswswsewsesesenenwweeseeeeeeneswseseseeeweeeeeeeeseseeeeeeeeseenwenenwesweswneswseswswseseseswseswsesenwwseneesewseneseseewneswswneswnesenenwswswwwsewwsenenwwenwewnewneeseeweeeneeenenweeseeeeenwswwswswswseswwswswswnewswswwswseswswneeneneeneswnwsesesesewnwesewseseswswswenwneneewneswwswswesesewseswnwnwsenenwnenwsenwnwnenwneneeswwnenewnwnwswsenenewswswsewwnewwwnwsewswwswswenenenwseseneweenenewswwswneswsewswswswswswswswwsenwsenwwwsewwnwswwnenwwnwnwnwewnesweweeswwseseseseeeeneenwewwseseneswnwswseseswseswswsenwwswswsweswwwnwnwnewswenweswenwnwenwnwswnwwseswneswswseswwseswswseneswswnweswswswseswswwwnewswwswswwwwwswwenwswswneeneneeneneneeneeeswswwswswswswswswswneswswswswswswsweseneswwseeeneeenwnenweswnenwneeseeeeweneeseesewseswneweenwesweseenwseseeeesweeeeneseeswsweesenwenweeeeseeeeeenweeeeeesenweseeeeeesweeseeeewwseenenwnwwnwnwwwwnwswsenwwnwenwsesenwseseseeseseswseswseswseswnwsenwseseeeeeneeneswnenweeseswneseswseswnwswswesesewseswswswswsenwsenwnwwnwwenwnwnwnweenenenwneneeswneeneneseneneeneneneseeseseseswseseeseseneseseseswseseswnwswswwseswsweseswsesesenwnenenenenenesenenwnenenenenenesenenenewnenwnwenwnenenwnwenwswnwnwnwnwnwnwneneswswnwneswswnenenwnwnenwnenwnenwnwswnenwnwnweneneneeeeneeeweneeneeneneenenenenwnenenesenenenenewneeneneneneseseseseseswsesesesesesesesesesewnenesesenwnwenwwnwenwwwenwnwnwnwwwnwwsweeseeesweeeseeeseeeeewnweneesweneneeneeeeneeewneneeneneenwnenewnwneseseneneenwwswneneenenwwsenwswwwwneswsewwswwneweweswnwsewswswnwswswsweswseswnwwnwnwnenwnwnwswnwnwwnwnwnwnwwnwwewswwwwwswswwwwneswwswsewwwwswseswsenenenewewnenenwneneweneneneneseewwnwwewnwnwenwwnwnwwnwswwwswwwswswswswswswneswswseswswswswswswwswswsweseeeeeeeeenwneneeeenweeeeneneneeneneneswnenenenewenenenenwneswswseeesewsenwswsesesweeneneenenwneeneweswsweneneeeneswseseseseseseseseseeeenwswseeseseseneseeneweeneeneneseenenenewseeeneeneweeswswseenenwneweewenwwsesesesenwnwwesenenwnesesewwwwwnwwwwnwenwwwnwwwwsenwwswnwsesewnenwsesesesenesewnenenenwneenewsenwnenewneeeseswswswswswswswswswseswnwswswwseswswsenwwswseswnesweseseswswseseesenwseeswswwswswnwseswswswswswsweswswswswswnwnweswwnesenwnwnwnweswnwnwnweswnewwswesewwwnwewwesenwnwwswweswnwneneneeeeswnesewnesweeeeeewswwnwnwnwwwnwnweeneneeeneneneeenweneesweswneseseswseseseswseneseseswweseseswswswseswswnwnwnwnwnenwwwenwenwnwnwesenwwnwnwsewwnwwenwswnwnwwwseneseswseseswswenwseseswswswswswwseseseeneseweneneswnwseenwswnenenenwnenenenewswnwseseneeneneneseneneneewnenweneeeneeneeeeneeneweesewwewwswwwwwwswswwwwseswseseseseseswseseneseswneseseseseseneneswseswnwwseswswswwswswsweswnwwswenewwswswswswwswswneeswnewswseweseeseeeseeseeeeeseeweenenewnenesesenewnwswsenesenenwneneneeswneeseeeeesesweseseseeseseenweesenweswswswswswseeneswwsewswswswswswewwwwwwsenwwwnwwenewwwnwwswwswsesewnwswswswneweswswseeswswneswsewswseswswswswswswswnesweeswswswsenwswswnweeeneseeneweneeeweeeneeneeneenwnwnwnwnwenwnwnwnwswnwenwnwnwnewnwswswnwnwwnenwwenwnwwwsenwnwnwswnwwnewwsenewswswnenenenwneeneneneneneeeneneneneeeseseeseesesenweseeseeseewseneswnesenenwswnenwswnenwswnwneswswnewseeesenwnwnenenwnwnwnenenwnwnenwnwnenenewwnwwwwwwwwsenewnwwwnwnwnwnwwnwnenwnenwnwneneenwswenwnwsewwwwnwsewswswwswenwswwswswwwwwnwwwwnwwswenwwwnwenwnwnwnwswnwwnenwesenwewneneseeseenwenewnenee
sesenwnenenewseeswwswswwnenewsewswneeenesenwnwwswnenewnwwsewnenwsesweswseswneswswsenwwnwsenwnwneseeswswnenewneswwnewseswneseeneswweswneswnenwsewnwneneseenweesenwseswswnenwswnwnwsewwnwsenesewnenenenesenwsewnenwwwsewenwwweseeeweswwwnwwewsweesenenewnwwnwsenewsenwwsesesenwneneeswseenwwswnwswswnwnenwswwsewswnenenewsenwsenwnesesenewenewnwewneswsewnwswenweswnenwsenwswsweneswneswneneenwnewenewwneswswneseswwesenesewenwneswnwwneseswwneenesenwswwswneneswsenwnewswseenwsesewnwnesenesenenwwnenwsewesewsesesewnenewswnwewswnenesenwnesewesweneswnwswnwsenenwnwnwwseeswneewseneseneswnwewnwnwseenwseesewsenwsweewewseweeenwnesenwwwswnew
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();const lines = data.split(/\n/);let flipped = new Set();for (const line of lines) {let px = 0;let py = 0;for (let i = 0; i < line.length; i++) {switch (line[i]) {case "e":px++;break;case "w":px--;break;case "n":if (line[i + 1] === "e") {py--;px++;} else {py--;}i++;break;case "s":if (line[i + 1] === "e") {py++;} else {py++;px--;}i++;break;}}const tile = px + "," + py;if (flipped.has(tile)) flipped.delete(tile);else flipped.add(tile);}function adjacent(x, y) {return [[x + 1, y],[x - 1, y],[x + 1, y - 1],[x, y - 1],[x, y + 1],[x - 1, y + 1],];}function play() {const next = new Set();const allFlipped = [...flipped].map((i) => i.split(",").map(Number));const mnx = Math.min(...allFlipped.map(([x]) => x));const mxx = Math.max(...allFlipped.map(([x]) => x));const mny = Math.min(...allFlipped.map(([, y]) => y));const mxy = Math.max(...allFlipped.map(([, y]) => y));for (let x = mnx - 1; x <= mxx + 1; x++) {for (let y = mny - 1; y <= mxy + 1; y++) {const neighbors = adjacent(x, y).filter(([xx, yy]) => flipped.has(xx + "," + yy)).length;if (neighbors === 2 || (neighbors === 1 && flipped.has(x + "," + y))) next.add("" + x + "," + y);}}flipped = next;}console.log("day", 0, "flipped", flipped.size, "part 1 answer");for (let i = 0; i < 100; i++) {// if (i > 0 && (i < 10 || i % 10 === 0)) console.log("day", i, "flipped", flipped.size);play();}console.log("day", 100, "flipped", flipped.size, "part 2 answer");
467528193
389125467
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();const cups = [...data].map(Number);const steps = 10000000;for (let i = Math.max(...cups) + 1; i <= 1000000; i++) {cups.push(i);}cups.forEach((v, i) => (cups[i] = { v }));cups.forEach((v, i) => (cups[i].n = i < cups.length - 1 ? cups[i + 1] : cups[0]));const vMap = new Map(cups.map((item) => [item.v, item]));let head = cups[0];for (let i = 0; i < steps; i++) {if (i % 1000 === 0) {process.stdout.write(" " + (i / (steps / 100)).toFixed(2) + "%\r");}const extract = [head.n.v, head.n.n.v, head.n.n.n.v];const extractHead = head.n;head.n = head.n.n.n.n;let cur = head.v - 1;while (true) {while (extract.includes(cur)) cur--;if (cur === 0) cur += cups.length;while (extract.includes(cur)) cur--;const pos = vMap.get(cur);if (pos) {extractHead.n.n.n = pos.n;pos.n = extractHead;break;}cur--;}head = head.n;}const posOne = vMap.get(1);console.log("\n" + posOne.n.v * posOne.n.n.v);
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();let cups = [...data].map(Number);for (let i = 0; i < 100; i++) {const extract = cups.slice(1, 4);const remaining = [cups[0]].concat(cups.slice(4));let cur = cups[0] - 1;while (true) {if (cur === 0) cur += cups.length;const pos = remaining.indexOf(cur);if (pos !== -1) {cups = remaining.slice(0, pos + 1).concat(extract).concat(remaining.slice(pos + 1));break;}cur--;}cups.push(cups.shift());}let res = cups.concat(cups);res = res.slice(res.indexOf(1) + 1, res.indexOf(1) + cups.length);console.log(res.join(""));
Player 1:195356122245391442473822613304344340168235036Player 2:1212941322893749201727243334448311525184671011
Player 1:92631Player 2:584710
Player 1:4319Player 2:22914
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();const groups = data.split(/\n{2,}/).map((gr) => gr.split(/\n/).slice(1));const p1 = groups[0].map(Number);const p2 = groups[1].map(Number);function play(p1, p2) {const seen = new Set();while (p1.length && p2.length) {const roundKey = p1.join(",") + "|" + p2.join(",");if (seen.has(roundKey)) return [p1, 1];else seen.add(roundKey);const c1 = p1.shift();const c2 = p2.shift();if (c1 <= p1.length && c2 <= p2.length) {const [, recursionWinner] = play(p1.slice(0, c1), p2.slice(0, c2));if (recursionWinner === 1) p1.push(c1, c2);else p2.push(c2, c1);} else if (c1 > c2) p1.push(c1, c2);else p2.push(c2, c1);}if (p1.length === 0) return [p2, 2];else return [p1, 1];}const [winner] = play(p1, p2);const result = winner.reduce((acc, v, idx) => acc + (winner.length - idx) * v, 0);console.log(result);
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();const groups = data.split(/\n{2,}/).map((gr) => gr.split(/\n/).slice(1));const p1 = groups[0].map(Number);const p2 = groups[1].map(Number);while (p1.length && p2.length) {const c1 = p1.shift();const c2 = p2.shift();if (c1 > c2) p1.push(c1, c2);else p2.push(c2, c1);}const winner = p1.length ? p1 : p2;const result = winner.reduce((acc, v, idx) => acc + (winner.length - idx) * v, 0);console.log(result);
jnlgn xqth jtjtrd vhdt rlsr jjhfbn vvrhc hbrplx fntg dtkr fnlqrk vvbqtz prkblp ffj zkkz vmb xlvrggj qjg sfghbs srjv vphhllt fvjkp qszsz zhszc rzbncvnc mfbfsz xdjk plxs xgc gfzmpxq rmpfkv tglj rsmstv lfckh rkllz qczmsk xpbxbv zdpxfl zfsbvl mmdcl nzqx gzsdm mqv cmffmd gjlql htmb fqrm prtvmb smbdlcg zgzt zcvs qcksk trpbj jbslsbv lhtpf jgjrj tqlbk (contains shellfish)zhszc mgrr zgdt txldvd tvz xlvrggj zvrm brvz rzbncvnc kzklp zcxq krpcn rxv xqth ztpmz trpbj hnngrhk dqspdq qmqbz qpndpm dfsnq sfghbs jgjrj gjlql dktlp prtvmb zxnjkf fvjkp prkblp jjhfbn crjpt rsmstv qthxnb tcflf lfckh fsmqv rnjlpq vvnmqt scnc mqv khmzbj xkmz hbrplx lxpqkn gzsdm nxvzp fktgv rkkgm hlhc xpbxbv kzrk pffccf ndkmq bxc vmb czzx vdjtl rkkpgs zgzt mmdcl sdggf jszqhpf jtjtrd zhbtz fntg pdst qltvp rbjdgh zdpxfl nnrctqh hprqd tcfgv vphhllt jrpm mnn tglj vvrhc mqscmlf qnc gtqfrp dtkr srjv vhr htmb ffj xrvgdh qszsz cqkprv trjqbr cqs (contains soy, wheat, fish)xbzns trjqbr prkblp mbdbf gfzmpxq gtqfrp fntg frnmdqx rlsr zgzt qvjk cmffmd srfm qltvp brkds lkzfc qthxnb plxs tsjtr dkshp qrbbf rmpfkv sxpbg qczmsk xlvrggj nzqx rnjlpq zkkz mvmhqbpz tcflf vvrhc tvdntm qplx btttz gjlql zsd vvz sgn rkkgm vmb zhszc pdst qcksk tkv tcfgv rkkpgs vhdt smbdlcg lxpqkn pffccf krnfm lfckh khmzbj htmb tvz crbd fqrm fnpkmh fsmqv txldvd qktcqv hbrplx hzxx xqth xpbxbv jtjtrd fvt (contains peanuts, sesame, eggs)nchjqv frnmdqx nxvzp tdszhqn jnlgn nzqx fnpkmh jszqhpf dlzb qltvp dtkr mbdbf jmvv zhbtz vhdt ltbqt ftrnplt rtjbpd vvbqtz fsmqv vmq brkds xpbxbv nltv cghkbp vrgdk fvjkp qrbbf krnfm xgc hbjmtc tcflf tftpnc zvrm flxplq qpndpm tbnlrpb qpkbc fntg zhszc vphhllt qmcdlz lnvrg srjv jtjtrd crjpt rnjlpq zbnv fnlqrk zljsv zsd xqth prpbcv vvz pffccf rkkgm gjlql khmzbj lhtpf mgrr mfbfsz kzklp zxnjkf btttz gtqfrp hxcc rlsr mbx nhldb rzbrrr vhmpqd zcxq zkkz lkzfc tkv tfn qvks zkxxnhn mvmhqbpz lzxpn dqspdq nnrctqh lxpqkn htmb crbd tvz jrpm srfm txldvd qczmsk (contains eggs, sesame)krnfm jrpm xbzns lnvrg rzbncvnc vhr mqscmlf xqth ffj zgzt xkmz nchjqv vmq jtjtrd xzd qmcdlz mqv smbdlcg qvjk khmzbj xgc dkshp prpbcv zptr vhdt nnrctqh tqlbk zcxq mnn vhmpqd qplx crjpt zhszc jjhfbn ltbqt dktlp tftpnc hxq vphhllt gtqfrp rlsr zdpxfl flxplq plxs sgmsn cqs fqrm mmdcl qlrxfv jmvv nltv frnmdqx cghkbp jszqhpf sxpbg vdjtl tkrflnf qjg fvjkp jnlgn kzklp lfckh mgrr fntg xpbxbv hlhc tvz tdszhqn tfn srfm ztpmz sfghbs zgdt rxv trpbj qczmsk (contains shellfish)htmb srfm qcksk ftssfh czzx fntg rbbnskn rnjlpq rxv rsmstv vrgdk gtqfrp rd flxplq hbrplx vmq xdjk vvrhc nhldb ztpmz jmvv tftpnc mfbfsz szsrnsc hprqd zptr mvmhqbpz mnn qjg srjv jtjtrd tqlbk vdjtl nltv mqscmlf rkkpgs prtvmb fvjkp hnngrhk ftrnplt lxpqkn tvdntm ffj xlvrggj bmpnrhb jrlzcv zhszc xgc vpvm zhbtz vvz mbdbf lzxpn zdpxfl qktcqv qvjk rlsr khmzbj (contains soy, fish)rmzbr jtjtrd fvghn jjhfbn tsjtr mfbfsz tglj qthxnb cqkprv trjqbr zqnn tkrflnf lnvrg kssgts vvbqtz rzbrrr ndkmq zfsbvl qrbbf vvz dfsnq gpvcz dqspdq vhdt gzsdm phkxp rlsr prtvmb jnlgn rkllz ltbqt zljsv nchjqv fvt znhjn fsmqv cghkbp sgn nzqx fvjkp tbnlrpb fntg pffccf bxc zhszc gtqfrp cqs nxvzp mqv xpbxbv jgjrj zgdt srjv tftpnc lsnnzp lxpqkn xzd tkv qmcdlz (contains soy)nhldb tlbtr fvghn lfckh tftpnc rlsr hxq zptr htmb lzxpn smbdlcg qplx zdpxfl hnngrhk dkshp qszsz qlrxfv plxs nxvzp xqth rd qmqbz tzc sxpbg mmdcl jnlgn nzqx rbjdgh vmb vvrhc scnc rzbncvnc prpbcv jrpm zxnjkf vhr nltv fktgv xzd fntg crbd vhmpqd pdst nnrctqh zhszc rnjlpq tsjtr krpcn rzbrrr zgzt xpbxbv jtjtrd gjlql fnpkmh cghkbp cmffmd trjqbr mqscmlf gtqfrp khmzbj dfsnq hzxx rbbnskn srjv xrvgdh fvjkp qmcdlz hbrplx xgc cqs mvmhqbpz szsrnsc hprqd qktcqv znhjn mfbfsz (contains sesame, eggs)nzqx fktgv vmb jszqhpf ffj fvjkp qcksk xqszlhq qvks zcvs pdst rmpfkv nchjqv dtkr qplx tfn crbd zdpxfl sxpbg xpbxbv bmpnrhb zgdt zkkz rtjbpd qrbbf tvdntm xkmz zbnv sfghbs vphhllt dktlp nnrctqh pffccf xrvgdh qszsz qmcdlz gjmbv vhr qvjk rkllz rlsr xzd tzc rkkgm txldvd cqs fntg xdjk hbrplx jnlgn hxcc mgrr lfckh qnc ftrnplt vvrhc frnmdqx xgc jbslsbv gfzmpxq rzbrrr gtqfrp rbjdgh jtjtrd tdszhqn rd lzxpn srjv rsmstv ndkmq rbbnskn tsjtr fnlqrk srfm fvt vvnmqt cvnmx scnc lxpqkn tcfgv zptr zhszc vvbqtz mmdcl hnngrhk mqv prkblp brkds sgn (contains wheat, soy, peanuts)qltvp mfbfsz rtjbpd fntg jtjtrd fvt rmzbr rzbrrr rd xqszlhq xrvgdh fvghn frnmdqx zdpxfl mbdbf rnjlpq mnn jgjrj rkllz rlsr cvnmx gzsdm lkzfc mqv nxvzp rmpfkv pffccf gpvcz zptr zkxxnhn qnc sgmsn qvjk dlzb fnpkmh txldvd trjqbr qlrxfv vhdt lfckh mvmhqbpz ftssfh krnfm hxq mbx jjhfbn fvjkp hbrplx bxc khmzbj lzxpn tqlbk lxpqkn vrgdk cqkprv zhszc jrpm trpbj hxcc prkblp mqscmlf xqth tcflf brkds tvdntm fnlqrk vvrhc vvnmqt xlvrggj qpndpm kssgts dfsnq zqnn pdst tbnlrpb qplx zhbtz mmdcl xpbxbv qpkbc (contains soy, sesame)lnvrg ftssfh tbnlrpb zhszc xbzns hxq cmffmd cghkbp jmvv zgdt ftrnplt nxvzp xlvrggj vphhllt tglj vhr trjqbr flxplq kstd tlbtr qrbbf gtqfrp rbjdgh xpbxbv jbslsbv lxpqkn zsd fktgv vvrhc mnn brkds vrgdk nchjqv xqszlhq ndkmq hprqd czzx hlhc xgc dkshp jgjrj xqth cvnmx hbjmtc zgzt rtjbpd nhldb ltbqt zcvs qpkbc fntg xzd gzsdm fvjkp zfsbvl lzxpn fqrm plxs bmpnrhb zljsv tvz vpvm pffccf jtjtrd qlrxfv (contains sesame, fish, shellfish)zcvs qnc zfsbvl xkmz bvdqd tzc fvjkp zxnjkf phkxp rnjlpq znhjn jgjrj vhr krnfm qcksk szsrnsc zhszc tvdntm gzsdm fntg jtjtrd vrgdk vvnmqt jrpm fnpkmh xbzns kzklp rlsr tdszhqn kssgts hbjmtc rmpfkv rkllz xdjk kzrk qczmsk nnrctqh ftrnplt tcfgv qltvp trjqbr rkkgm tcflf gjlql hbrplx srfm sgmsn qrbbf tlbtr tftpnc fvghn hprqd tqlbk gtqfrp hnngrhk fktgv ndkmq prkblp lnvrg mbx xgc gjmbv flxplq cghkbp rmzbr ftssfh nchjqv nxvzp xqth qktcqv jszqhpf jbslsbv dtkr qpndpm bmpnrhb tglj xpbxbv plxs (contains wheat, sesame)fvghn mvmhqbpz jjhfbn zgzt krnfm xqszlhq qvks fntg kssgts jmvv dtkr xdjk nchjqv vvrhc bmpnrhb qczmsk zcxq lhtpf prkblp tbnlrpb rlsr xlvrggj xpbxbv htmb qmqbz fvjkp phkxp prpbcv mmdcl kstd zgdt hbrplx krpcn ltbqt jtjtrd jbslsbv rxjsq lxpqkn sfghbs mfbfsz xkmz tcfgv hbjmtc mbx vvz nnrctqh tkrflnf dlzb vhdt rsmstv rmpfkv brvz vmq zptr gtqfrp rnjlpq zqnn prtvmb rbbnskn qpndpm qvjk ftssfh zhbtz rbjdgh kzklp ztpmz nxvzp hzxx (contains peanuts, eggs, dairy)xlvrggj nhldb rxjsq ltbqt fntg xgc zqnn vmb zvrm mqv jtjtrd vvz qjg mbx rkllz hxcc ftrnplt zsd jjhfbn jmvv scnc crjpt zcvs zhszc vphhllt tfn htmb mqscmlf rlsr qcksk lhtpf dtkr zkxxnhn zgdt qrbbf sgmsn srfm rd lxpqkn xqszlhq vhr gtqfrp brvz tcflf fvjkp bmpnrhb tqlbk gzsdm tcfgv qczmsk mgrr qktcqv fvghn hxq qvjk (contains fish, eggs, peanuts)tftpnc qktcqv dlzb vhmpqd qpndpm xlvrggj bmpnrhb vrgdk hbrplx kssgts kzklp zgzt mvmhqbpz krpcn vvnmqt gjlql gfzmpxq jtjtrd zhszc xpbxbv xbzns mbx vmq crbd vpvm krnfm qmqbz txldvd bxc qrbbf kstd fvt tqlbk tdszhqn rzbrrr sgn zqnn prpbcv fvjkp rkkpgs qjg kzrk qczmsk jgjrj rd rlsr fntg lhtpf tsjtr qnc qmcdlz ftrnplt szsrnsc xgc sfghbs xkmz fnpkmh zcvs rnjlpq prtvmb xqszlhq dtkr rkkgm srjv rtjbpd mqv qplx jszqhpf tzc zxnjkf gpvcz brvz ztpmz ltbqt cvnmx tbnlrpb (contains fish)plxs fvjkp hzxx rmzbr xbzns xlvrggj flxplq hbjmtc xpbxbv qnc sgn hxcc zhszc trjqbr qczmsk znhjn prtvmb zljsv qplx vphhllt vvnmqt zxnjkf cqs brkds gjlql rkllz zdpxfl lzxpn phkxp zsd frnmdqx hxq lsnnzp gtqfrp qltvp rsmstv hprqd fntg gfzmpxq vvbqtz mgrr tkrflnf jszqhpf vvz fvt jrlzcv prkblp kssgts nnrctqh ndkmq nltv tqlbk rnjlpq pffccf jtjtrd lkzfc rbbnskn dfsnq qvjk rtjbpd rmpfkv zbnv qcksk lnvrg qmqbz xqszlhq tvdntm zptr sgmsn txldvd (contains eggs, shellfish, fish)xkmz qktcqv frnmdqx qpndpm tfn ftrnplt xpbxbv rsmstv gfzmpxq zhszc gpvcz jszqhpf ltbqt fvghn kssgts khmzbj krnfm ndkmq rbbnskn scnc fqrm qmcdlz zqnn qmqbz xlvrggj rlsr ftdbz jgjrj gtqfrp jrlzcv zljsv xqth mnn tlbtr vvz dktlp rkllz gzsdm fntg cqs tftpnc fnlqrk tdszhqn hzxx fvjkp qltvp fnpkmh nltv qvjk tsjtr tcfgv (contains sesame)hbrplx xpbxbv mnn rmpfkv xdjk ftdbz fvt htmb vphhllt rtjbpd ndkmq xlvrggj xqszlhq xbzns rlsr qpkbc gzsdm krnfm srfm prtvmb fvjkp zqnn nzqx rzbncvnc tglj mqv qmqbz qmcdlz nhldb ffj nxvzp szsrnsc hnngrhk jrpm dqspdq plxs lzxpn xqth lhtpf zdpxfl sfghbs jrlzcv tcflf qltvp jjhfbn mqscmlf tkv hbjmtc tcfgv flxplq dfsnq crjpt trjqbr jnlgn ltbqt jszqhpf zgzt qszsz dktlp jmvv brkds rbbnskn lnvrg tfn prkblp tvz rkllz zcxq jtjtrd prpbcv gtqfrp vrgdk krpcn rkkgm cqs qjg zhszc zvrm rd rbjdgh tvdntm xkmz (contains fish, sesame)vmq cqkprv rkllz mqscmlf dqspdq rxjsq nxvzp fvjkp jtjtrd xpbxbv lzxpn tcflf qthxnb kzrk gtqfrp tqlbk tcfgv vhdt fsmqv rd cvnmx vvrhc hxcc zgzt qszsz ftdbz qltvp czzx qcksk lfckh gzsdm bvdqd qczmsk rlsr brvz tdszhqn kzklp lkzfc zhszc crjpt vmb rbjdgh rtjbpd tkrflnf hzxx xrvgdh xbzns fntg vpvm mfbfsz jnlgn qjg nzqx zxnjkf tvz zptr sgn fnlqrk zqnn vrgdk rbbnskn pdst (contains wheat, dairy)lfckh jgjrj xpbxbv lkzfc fntg mfbfsz vmq vrgdk rnjlpq tqlbk szsrnsc rkkpgs rbjdgh jrpm plxs zgdt qthxnb jtjtrd zkxxnhn bmpnrhb lzxpn mbx hbjmtc vhr lnvrg gjlql zqnn gtqfrp vvnmqt qnc qpndpm xkmz fvghn mbdbf zbnv rzbrrr qlrxfv vpvm znhjn qktcqv tsjtr qltvp rd pdst fvjkp xlvrggj rzbncvnc qvjk sxpbg czzx rlsr qczmsk (contains shellfish, soy)zqnn fvjkp qmqbz hnngrhk vdjtl xpbxbv srfm zhszc fktgv sxpbg vvz btttz lxpqkn hzxx lnvrg vhdt lfckh vphhllt rnjlpq gtqfrp tzc qktcqv plxs zsd xlvrggj qszsz rzbncvnc rkkgm dkshp jgjrj qlrxfv ztpmz mgrr fntg jrpm trpbj jtjtrd txldvd smbdlcg pdst vrgdk rkllz bxc rmpfkv kssgts zljsv (contains soy)cvnmx sdggf hnngrhk ltbqt srfm flxplq qthxnb prpbcv zkkz tcflf gpvcz dlzb bvdqd zvrm plxs znhjn fktgv xgc rzbrrr hzxx jgjrj rzbncvnc dkshp fsmqv fvt fvghn trpbj jnlgn qmcdlz nnrctqh brvz qpndpm kzrk xpbxbv xlvrggj nltv kzklp krnfm crbd ffj dqspdq kstd qczmsk dtkr vhdt qjg sgmsn frnmdqx rmzbr jtjtrd qlrxfv xbzns rlsr fvjkp qrbbf fntg trjqbr ftdbz sgn txldvd zptr vmq prkblp lxpqkn lkzfc rkkpgs tvdntm tkv rbjdgh krpcn mgrr srjv mbx vvrhc mbdbf qnc phkxp gtqfrp hbjmtc zsd (contains fish, sesame)zgdt czzx rxv cghkbp tglj rkkpgs vdjtl ftdbz vhr tdszhqn tsjtr qmcdlz hprqd plxs xlvrggj mmdcl znhjn qczmsk frnmdqx jbslsbv vvbqtz tlbtr gtqfrp zkxxnhn fsmqv qmqbz zbnv smbdlcg brkds qpkbc qjg hbjmtc dqspdq zcxq rlsr nchjqv ltbqt sdggf qrbbf kzrk lkzfc ftrnplt zqnn tvz zsd fntg sfghbs srfm dtkr crjpt htmb hnngrhk nnrctqh rbbnskn rsmstv mfbfsz fvt zkkz jtjtrd zhszc pdst jjhfbn xpbxbv tkv nxvzp qcksk vvrhc fktgv dfsnq prkblp ftssfh vvz (contains shellfish, eggs, peanuts)trjqbr ndkmq fntg trpbj vhmpqd btttz prkblp brkds tfn qthxnb lnvrg xlvrggj xpbxbv xrvgdh hxq qmcdlz hbjmtc ftrnplt tkrflnf rbbnskn phkxp dfsnq sxpbg fvjkp gfzmpxq pffccf qpndpm sdggf zhbtz ztpmz zsd sgn zhszc ftssfh rd zvrm rlsr rkllz prtvmb rmpfkv bxc cqkprv qjg zkkz fvt mqv jtjtrd qczmsk ffj dktlp nnrctqh tcfgv mbx hbrplx lsnnzp (contains peanuts, soy, sesame)hzxx vpvm vphhllt xzd gpvcz btttz jtjtrd dqspdq sgmsn tvz xlvrggj ftdbz fnlqrk tglj zljsv rzbncvnc fsmqv xpbxbv rmpfkv qmqbz fntg pffccf zdpxfl cmffmd vvrhc rd zhszc qpndpm qszsz ztpmz lfckh fktgv zkkz xdjk nxvzp hxcc vrgdk qvks xrvgdh rxv rbbnskn qvjk nzqx vvz ndkmq zsd tkrflnf nltv mnn fnpkmh frnmdqx cqkprv vhmpqd kssgts mvmhqbpz dkshp qlrxfv tcfgv rkkgm tkv tsjtr zgzt dtkr cqs jszqhpf lkzfc hxq smbdlcg hprqd fvghn qnc prtvmb tlbtr rlsr lnvrg gzsdm tvdntm gtqfrp rzbrrr qthxnb (contains sesame, wheat, fish)nhldb vrgdk txldvd zhszc sgmsn czzx kssgts tcflf jgjrj mqscmlf rxv jszqhpf scnc lsnnzp xdjk qvks prtvmb cvnmx jrpm hzxx jtjtrd sgn rtjbpd dktlp jbslsbv fvt zvrm lhtpf trjqbr gtqfrp rlsr tkv sxpbg prpbcv fvghn hbrplx kzklp nnrctqh gzsdm zbnv lxpqkn ftdbz srjv tzc pffccf mmdcl szsrnsc tqlbk ltbqt fvjkp tdszhqn btttz mgrr sdggf dqspdq rbjdgh xqth gfzmpxq nltv rbbnskn flxplq rnjlpq jrlzcv qnc tbnlrpb qltvp smbdlcg qpndpm xpbxbv zgdt vdjtl dtkr tlbtr xlvrggj pdst zgzt vhmpqd rzbncvnc (contains shellfish, soy)mvmhqbpz ffj xlvrggj crbd jtjtrd dtkr hbjmtc zgdt gtqfrp szsrnsc lnvrg kzklp tftpnc khmzbj scnc lfckh rxv nzqx jrlzcv gzsdm mmdcl zcvs hzxx ndkmq sgmsn xzd txldvd mnn fnlqrk rlsr rtjbpd plxs dkshp sgn srfm nchjqv fqrm tkrflnf hxcc bxc xpbxbv tlbtr nhldb qktcqv rbbnskn ztpmz zhszc nxvzp nltv fvghn zhbtz kssgts rsmstv qvks qplx vpvm lsnnzp cqkprv qrbbf hbrplx tfn rmpfkv crjpt brvz xkmz sdggf vvz vphhllt rxjsq fntg tzc prpbcv rkkgm fktgv zcxq (contains sesame, fish)scnc cqkprv kssgts szsrnsc cqs tkrflnf zcvs crjpt dktlp trjqbr qjg vhr lzxpn sdggf xkmz khmzbj ftrnplt rd qvjk fntg qthxnb xqth mnn jtjtrd ftdbz brkds pffccf cghkbp jgjrj dkshp vvrhc qktcqv zptr sxpbg vvbqtz sfghbs rzbrrr lfckh ffj rmpfkv lxpqkn mgrr lnvrg vmq czzx nltv qczmsk phkxp jszqhpf txldvd vvz tzc tdszhqn zgdt tvz zhszc rlsr vrgdk prpbcv znhjn fvjkp prkblp fnpkmh nhldb zxnjkf xlvrggj zvrm qpndpm ltbqt jrpm ftssfh tvdntm hxcc nnrctqh xbzns xpbxbv (contains soy)zhszc nxvzp hbjmtc xgc gzsdm kzrk vvnmqt mqscmlf hzxx rlsr rzbrrr tcflf rmpfkv jtjtrd szsrnsc vmb zdpxfl frnmdqx gfzmpxq sgn vhdt qplx jbslsbv lsnnzp xpbxbv vmq gtqfrp crbd zvrm xdjk lkzfc zqnn bxc fvjkp tbnlrpb qczmsk zkxxnhn nzqx rxv xlvrggj tcfgv lzxpn vvrhc gjlql lhtpf fvghn tftpnc gpvcz txldvd (contains peanuts)xlvrggj rlsr gjlql trpbj kzklp rzbncvnc nhldb xkmz hlhc fqrm rzbrrr dfsnq mvmhqbpz zkxxnhn vdjtl dlzb bmpnrhb kzrk rtjbpd xpbxbv flxplq tftpnc qmqbz krnfm fntg jszqhpf qltvp sgmsn trjqbr tsjtr dqspdq tvdntm qplx fsmqv vvnmqt qszsz cqs fvjkp nnrctqh tcfgv rnjlpq xbzns jtjtrd tzc gtqfrp xqszlhq mmdcl tbnlrpb rxjsq kstd fvt sgn zbnv fnpkmh (contains dairy, sesame)fntg jszqhpf xrvgdh ztpmz xpbxbv qszsz hbjmtc plxs cghkbp tkv zhszc cmffmd lnvrg qjg tvz vvz qnc flxplq qpkbc rmpfkv tbnlrpb dlzb bmpnrhb hlhc rmzbr hxcc zhbtz gzsdm gtqfrp mqscmlf qvjk fvghn hbrplx bxc qltvp jrlzcv vhr tzc lhtpf zbnv sfghbs kssgts vhmpqd hnngrhk qthxnb tftpnc krpcn zgzt fvjkp rsmstv vdjtl jtjtrd mnn jbslsbv rlsr ltbqt tglj (contains wheat, dairy, sesame)crbd krnfm jtjtrd dlzb tcfgv dfsnq ltbqt rkkpgs ffj zgzt dkshp ztpmz vdjtl crjpt smbdlcg phkxp tkrflnf kzrk tftpnc bvdqd vhr frnmdqx scnc rzbrrr sfghbs xpbxbv xzd gpvcz qpkbc pdst cqkprv rzbncvnc xlvrggj srjv ftdbz rsmstv qrbbf sxpbg prkblp hxq hlhc zgdt rlsr vvrhc pffccf vphhllt vmb hnngrhk bxc fvghn czzx nxvzp vhmpqd gtqfrp lkzfc lsnnzp prpbcv lnvrg xkmz xqth fvjkp tcflf rkkgm fnpkmh zkxxnhn jszqhpf qmqbz rbbnskn qvks tkv nltv tdszhqn kstd qplx fntg (contains sesame, eggs, peanuts)zqnn jtjtrd rzbncvnc fqrm fvjkp zsd vhr dkshp btttz fvt fntg lnvrg rlsr xgc sgn rkllz dlzb vmb qktcqv phkxp szsrnsc txldvd rmpfkv mbx gzsdm xlvrggj tkrflnf mfbfsz xrvgdh hxcc qmcdlz tftpnc tkv rsmstv xdjk zljsv krpcn zgdt smbdlcg prpbcv gtqfrp qjg qvks vphhllt tdszhqn prtvmb zhszc cghkbp qczmsk vrgdk gfzmpxq (contains fish)vhmpqd jjhfbn xpbxbv brvz qthxnb lkzfc xrvgdh fvt xqth tdszhqn gtqfrp tkrflnf kzrk zgdt dkshp kssgts mbx gjlql jtjtrd cvnmx gjmbv tvz zptr kstd rxv fntg prpbcv qplx zbnv jbslsbv trjqbr mfbfsz fvjkp ftdbz phkxp mgrr tvdntm dlzb crjpt vvz tsjtr xlvrggj nhldb zhszc fvghn qczmsk tftpnc htmb ndkmq rbjdgh vvrhc (contains wheat, soy)xlvrggj tglj rzbrrr dtkr trjqbr prtvmb zvrm jnlgn xqszlhq cqkprv vphhllt fqrm qczmsk cmffmd khmzbj rbbnskn zkxxnhn xpbxbv jbslsbv fvjkp xbzns mmdcl brvz rkkpgs fnpkmh scnc gtqfrp nltv zhszc fvt rmpfkv qjg mgrr qpndpm zsd vvbqtz tftpnc ltbqt jtjtrd prpbcv dqspdq rlsr ztpmz (contains eggs)fnpkmh hprqd kssgts czzx mnn tlbtr ltbqt bvdqd vrgdk tftpnc ftssfh hxcc tfn vhdt fntg szsrnsc bmpnrhb zljsv hbrplx lzxpn ztpmz kzrk kstd xqszlhq rtjbpd mqv qpkbc tzc zbnv qvjk rlsr sfghbs phkxp qszsz qnc txldvd nxvzp rbjdgh lkzfc xrvgdh gtqfrp gpvcz qczmsk nnrctqh tdszhqn dktlp hbjmtc rzbncvnc qrbbf zfsbvl vphhllt xlvrggj dlzb xdjk zhszc jtjtrd zkxxnhn dtkr rkllz jrlzcv vdjtl lfckh tkrflnf btttz zqnn rbbnskn fvjkp ftdbz krnfm hnngrhk rmzbr pffccf flxplq zgzt ndkmq zptr (contains wheat, eggs)szsrnsc nnrctqh rxv prpbcv dfsnq ndkmq rxjsq qlrxfv jgjrj dkshp rkllz zdpxfl scnc rlsr qnc crjpt lsnnzp nhldb zcxq xdjk gzsdm hxq fvjkp mbdbf xpbxbv tvz tqlbk ftdbz crbd bxc zkxxnhn fntg pdst lnvrg krpcn vrgdk tsjtr fnpkmh zhszc tzc qmcdlz qpkbc kssgts gtqfrp gfzmpxq qszsz trpbj phkxp hlhc xzd xlvrggj zljsv (contains wheat)nchjqv mgrr tvz prpbcv rlsr sgn jjhfbn gjlql zgzt nhldb vmq gtqfrp xrvgdh cghkbp nzqx vvbqtz bmpnrhb mvmhqbpz fnlqrk brkds hzxx vvz fvghn krnfm tbnlrpb zcxq gzsdm kssgts rkllz fntg tlbtr zljsv rzbncvnc kzrk rbbnskn sdggf ftdbz lnvrg zbnv lxpqkn vhr szsrnsc rxv fktgv zcvs zptr jgjrj mfbfsz cqkprv jbslsbv dqspdq xpbxbv lzxpn jtjtrd rbjdgh fvjkp rtjbpd cqs htmb gpvcz lkzfc tdszhqn hprqd zhszc sxpbg qjg fqrm qvjk tkrflnf xdjk vvrhc cvnmx zsd jszqhpf qpndpm rkkgm krpcn rxjsq vpvm mbdbf qltvp rsmstv (contains eggs)
mxmxvkd kfcds sqjhc nhms (contains dairy, fish)trh fvjkl sbzzf mxmxvkd (contains dairy)sqjhc fvjkl (contains soy)sqjhc mxmxvkd sbzzf (contains fish)
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();const lines = data.split(/\n/);const products = [];const allIngredients = new Set();const allAllergens = new Set();for (const line of lines) {const p = line.split("(contains ");const ing = p[0].trim().split(" ");const alg = p[1].substr(0, p[1].length - 1).split(", ");products.push([ing.sort(), alg.sort()]);ing.forEach((i) => allIngredients.add(i));alg.forEach((a) => allAllergens.add(a));}function intersect(arr1, arr2) {return arr1.filter((a) => arr2.includes(a));}const found = {}; // allergen -> ingredientfunction mapAllergens(usedProducts, commonIngredients, commonAllergens) {for (const [productId, [productIng, productAlg]] of products.entries()) {if (usedProducts.includes(productId)) return;const nextIng = intersect(commonIngredients, productIng).filter((i) => !Object.values(found).includes(i));const nextAlg = intersect(commonAllergens, productAlg).filter((i) => !Object.keys(found).includes(i));if (nextIng.length === 0 || nextAlg.length === 0) continue;if (nextIng.length === nextAlg.length) {for (const [idx, ingredient] of nextIng.entries()) {const allergen = nextAlg[idx];found[allergen] = ingredient;}}mapAllergens([...usedProducts, productId], nextIng, nextAlg);}}while (true) {const before = Object.keys(found).length;mapAllergens([], [...allIngredients], [...allAllergens]);const after = Object.keys(found).length;if (after === allAllergens.size) {console.log("good");break;}if (before === after) {console.log("stuck");return;}}const safeIngredients = [...allIngredients].filter((ing) => !Object.values(found).includes(ing));const part1 = products.reduce((acc, [ingredients]) => acc + intersect(ingredients, safeIngredients).length, 0);const part2 = Object.keys(found).sort().map((a) => found[a]).join(",");// console.log(found);console.log("part 1", part1);console.log("part 2", part2);
Tile 3457:##.###.##....#..##.##.#..###..##.....#..#.#....#.#...##.#...##..#....#..###..#..#........##.##..#.#.Tile 3061:##....#####.#.......#.....##..#........#.....#....##......##.##..###..........#....#....#...###.#.##Tile 2131:.#..#..#.##....#..###........##..#..#..#.#...#..#.##........##.##..###..#..##.........##.###..######Tile 2087:.##.#........#......###.......#.#......###....#.#...................###.....#.#....##.#.....##.##..#Tile 2593:#.###.##.#.#..#...#..........##..###........##....##..#..#..###.##....#....####..#..##..#..#.....###Tile 1277:###.#.#.....##......#..#.#...#...##.#..##...###.#...#......###...#..........#.####.#.##..#..#...#...Tile 2917:###.#....#....##.####......#.##..#.#...##.#....##.#..#..#.#...#####...##.##.#.###.#....########.#..#Tile 1579:#.#..#..##..#....#####......#.#...#..####..##..#..##.##....#.##....#.##.###...#...#.#.#.#.##.#.#....Tile 3011:....#.#.#.##........#.#......##...#..#.#........###..#.....#.....#....#.##......#...#..#......#..#..Tile 2539:..#.#.#.##...#.#####.........#...............##..###....##.##.....#.......##.#....#.##.#..#.#.#....#Tile 1879:##.########..#....#.........##..#.....#.#.#.#..#.....##....##..##..#.#..#.....#.#.....#....#####.##.Tile 2081:..#....#.##.##.#.#.##....#.##.##......##....#.#.##......#..###.......##........#..#..#...#..###..#..Tile 1721:.#.####.##....#.#..##...#.#...#...#.##..#.#.#.#####...#.#..#.........#..#..##.#.#.#.#.##.##..#....#.Tile 1237:.....###.........#..#...#....#......#.#####....#..#.#..#.#....#......#..#..#..#..#........#.#.#.##..Tile 3037:..#..####.........#....#.#...#.##.##..#.#.##.#.#..#...#.#.###..###....#......####.#..###.#.##...#.##Tile 2719:######.##.#...#...#.#..##.#..###..........#.##....##........#.###.###.#..#....#.##..##.....#....#.#.Tile 1013:.#...#.##.#..#.##...##..#....##......#...#..##......#...............###........#.....##...#.#.###...Tile 3571:.......#.#.#...#...#....##....#......#.#.###.#..#.#...##...###...#.#........#...#.#....#..##....#..#Tile 2269:##.#.#...#..#.#......##.###..#.#....##.##.#..#.####.....#..##.#.#....##..##..#.#...#....##...##.#...Tile 3709:##...#..##...#...#.##..#.#......##.####...#...##.#...#...#.##...#.#....#..................#..#.#.#.#Tile 2143:#.##.#....####...##.#.###...#.....##.#.###.##............#.#####..##.........#..#......#.#####....##Tile 3677:##.###.##..#.###..#...##...#....#......###.##.....#.#.##.#....#..#.##.##..###...#.#......#...###.###Tile 2297:.........#..................###.#..#....##.#..###.#........#.....#..#....#...#.###..#......#.######.Tile 1871:#.#.#.....#.#....#.#..#...#..#..#..##..##.#.##..........#.####.##.#.###.###.#####..#....#.###.#....#Tile 3449:##..#.###..####.....#..###..#.#....#.#..#.....#..##....#.#..#.....#..#.#..#.....#..#.#...#.####.####Tile 3391:........####.#.#.#.#...##....#..###..###.#....#..#.#....#.#...........#...#.#.#......#.#.##.#.......Tile 2243:..#...##.###...##.....#......#..#.##.#.#.#......#.#.#...##..#.....###.##..##.#.##.#....#.##.#..#..##Tile 2153:##.###.#.#.#.#.#.#.##..#..###..##..#.#.#.#.....#....#......#........##.#.....##..#.......##......###Tile 3659:.#.#....##..#..#..#...###...##..........#.....#..###.#.#..###.###..#..#..#....###........##.###..##.Tile 2503:##..##.#.##..#..#........#...#...#.....##.....#........###.##..#..#.....#...#...#..#...##..###...###Tile 2741:#..#.#####..#..........#..##..#...#......#.#.#......###..#...#.#..#..#.##..#.##.##.#.......##....#.#Tile 3371:..###.#..##..#......###...#..#...........#..##...#...#.....#...##.#...#.#.#..#..#.......#.###.#.###.Tile 2731:#...#.#...#.#..#....#...#.#...#.###.####.#.##....###..#....##.#.......##..#....#......##..###...###.Tile 3217:.#..#..#.###...#...#....##..#.#...#.#...#......#####.#....###..#...##.#...#...###.#.#......#.#......Tile 3911:..###..##......#.#..##.#...#.##.....#..#.......#.##........#..#....#.##.##....##.....#...###.##.#.#.Tile 1637:.#.#..#.####..#.#....#.#####.#..#..#..#.#......####.........#.##...##.#........##..#.....#..#...#.#.Tile 3989:.#..##.##.............#.##..###.#..#....#...#....##..#.#.#.###....#..##.#...#...######.##..#..#..###Tile 2213:...#..####.....###..##....###.#...###.####...####.#...............#...#.......#####.....##.##...###.Tile 1061:.#.....##.#...#..#.##.......#..#.......#.....#.....#....#.####.#....###...#...#.#...#.##...###.....#Tile 2281:..#..##.#...##.....#..##.....#..#.#....##.#..##.#.#..#..#.###......#.....#...#.#..##......#.###.###.Tile 3803:####.##..##..#..#.##.#...##...#..#.#.##.#...#....#....#....#..#.##.#..#..#...#..##........#...#.#...Tile 3347:.##.##...##..#.#.......##.##..#...#.....#.....##..#.#..#...#.....#.#.##.........#.........##..#####.Tile 2687:.#####.#..#.#.#.....#....#.....##.#.....#.##....###....#...####.##...###..#....#....#....##.##.#.##.Tile 1097:##....#..#....##...##...#.#...#....#.........#..###..##.#..##....#....###....####.....#.###....#...#Tile 1483:#..#.##.......##.#.#...##....##..##..#.#.#...##.............#..#..##......##.#.#######....####....#.Tile 2207:.#.###.##..##..#........#....##....#....#....##..##.#.....##...#....#.#.#..#...#.#.......#.#####.##.Tile 1559:.####..##.##..##.#.#......##..##.#..#..#.#.#.#....#....#..#.#..#..#.#.#.#..#.#.##...##.#...#...#....Tile 3019:...#.###.#.##..#..##...##..#....#...##.##......#..#....#.#####..#....##.#....#..#..##..#.##.#####..#Tile 2441:...####.#.#..#.#...#...##.#..##.#......##..#.#.#..#..##....#.####.#....#.#...#....##..#..#.#..#.#...Tile 1997:.##.###.........#..#....#.#..#..#.##...#.....##..####.#.#...##........#.....#...##....#.########..##Tile 1481:####.#######.#.....##.#....#.#.......#..#........##....##......#..#..#.#......##....##...#.#########Tile 1811:..#..#.##......#.#....#...#...##.....#...#.#.....#...#####.##...#.##.#....#.#..#....#.#...#..#.##...Tile 3701:####.###.####.....###...##.###....###.#.#.#.#..#.#..###....#.#...#...##.##..#...####....##.#####..##Tile 1451:###.##.#..#...##.#.#.#.......##.....#....#........#.......##...##.#.#..#..##..###.#.#.........#....#Tile 3319:....####.#.#..#...##..##.###..#...#..#.#.#..............#...........###.....#...#...........##.##..#Tile 2659:.##..#.#..#.#...##...####..##......#######.........#........#.#.#..........##...........##..#.......Tile 1433:#.##.##.##.#.....#......#.#....#..#.####....#.#..#####...#.#.#.#..#.#...#......#.#.#.#.#..#.###.#.#.Tile 1409:#..###....###.......#...#..##.#.##....##..#...#..#.#..##..##..#..#...###..#.#####....#######..####..Tile 1747:...##.###.##...##.#.......#..##.#.....###..#....#####.##.#.#.......#.##...#....#......#..###...####.Tile 2011:.#.#..##.........####.#.#...###...#.###.......###.....#.#.......#.##...##......###....###.###.####..Tile 1009:.#.#...####.#.##..#................#...#.#...#..##.#..#.#.###..####.###.##.#.#.#..###....#.##..#....Tile 1759:#.#######.#..#....##............###..#.##..###....#.######.....##.##.##.........##.......##...#..###Tile 1223:###..#.##.##..##.......##.....#..#.#..#.#..##.#....#.......#...#..#.#.##.......###.........###.#...#Tile 2467:.#.##.#.#.#.........##.....#...##...#####..#..#..##.#...#...........#.##.......#..#....#####....#...Tile 1571:...##.#.##..#........#.#..#..#..........#.......#...#....#.##.###........#..##.#..##.#..######.....#Tile 1931:###..#.##.##.#..##.....##.##.#........#..####...##..........#.....#..##.....#..#.#..###..#.......##.Tile 2711:#..#.#...##....####..#.#..##.##.#.#..###......##..###...##.###..##.........#..#.##....##.#.#...#....Tile 3331:...#.#.##..#......#.##.#.....##..##....#.........###....#.#.#.#......##.......#.##......##..##..####Tile 1979:..##.#.##....#..###.......#.#...#..#...##.........#...........#.#...#.#..#..#####...#....###.######.Tile 1229:##.###.####....#.#..#....##...#.....#...#.#......###...#.....#...###.##..#.#..##...#.#.....##...#.##Tile 1217:#..#.#.....#....#..#.#.....###..#.#....###....#....#...##.##.#..#.#.#..##..##....#....#..#.#.#.#.#.#Tile 2521:.....####.#.#....#....#..#...#..#...#.........#...#.##..#..#..#..##..#.#..#....##..##..####.###.##.#Tile 2251:#...#..###...##.#.#.#..#..##..##........#...............#.####.....#....#.#...#.###.#......###..#.#.Tile 1093:#####.#...###.....#.#.#.###..#....##....###.....##.#......#.#...........#...........#.....#.#.#.#...Tile 2293:##..#.##.##...#....##..##.......#......##....#...........#..##.....####....#....#...#..##.########..Tile 1279:#.###.##............#...#....#.....#...##....######...#.#.#.#..#..#..#.......#..#.#...##.######..#..Tile 1213:#...##....##.#.....##.....#...#.......#.#.........#.#.......#........##....#.....#..#....#.##...##..Tile 3851:#.#...##.#.........##.......#..#.#.#..#..##.....##...##...#.#.#...#..##.....#..#.#.#.......#.#.##..#Tile 1531:..##..#...#....#....#...#.#..#....##..#.#..#..##...##.###.###..#####.###.#.##...#.#.##..#.#..##.####Tile 1321:#.##.....####.#.....#................#.##...##...#.....###.#..##...#....#.#.##.#####....##.##...##.#Tile 1619:.###..#####..##....##.....#.........#...#.......###....#....##..#..#......#...#..#.....#...#.#.##.##Tile 2803:#.#.#..#..#...#..#..#####.#.#..##....#.#......#..###..#.#..#..#..#..#.##......##..#.##...#.#.#....##Tile 2383:.####.#..##..#..##..#..##.#..#..##...#.###..#.##...#........#.##..#...#......#..#...#....###.##..#.#Tile 1291:...#.#..####.#..........#.#.###.#.#...##.#.##.#..###.#...#..#..#......#.#..#....#..####..###.....###Tile 1129:#.#....##....#.#.#...#.#.#...#.#..#....#.#.##....#........#..##......#...#.#.#..#.....##...###..#...Tile 2857:#.#.#.####...#.....#..#.....#.###.....#.###...##.##..#.#...##.##.###...####..####.##........#..#.###Tile 2411:......##.###..#....##.....#..##..#.......#...##..##.....##..###.#..####.#.#####.#...#.#..#.#.##.#.##Tile 3923:..#####..##...#.#...#...##.#.#....#...............#.##....#..........###.......##...#...#####..##.##Tile 3343:#..#.###.#..#...##.#..#...#...#...#.......#.......##.#..#......###..#.#.#.#.#..#...#..##.##..#...##.Tile 2017:.#...###...........#.##....##.....#...##..###.....##..##..#.#..#.##..##.#..####.##..........#.##....Tile 3889:#.##.##..#.#....#.#..##...##.##..#.###..#..##.#...#...##.#...#....#.#####.#.#..##..#...#.#.#.#..##..Tile 1823:....##.##.#...#...#...#......#..............###..#####....#..##......#...###.#####....#...#.#.##....Tile 3769:.#..#........#.....##...#....#..#..##........#...#....#.....#...####.##..#.##..##..#....#########.#.Tile 1523:.#.##....#...#...#.##..............##.#.##.##..#....#.##...##...#..##.#....#.....#.#...#..#.#.###...Tile 2843:...#....#.......###...##....###.###.#..##..##.#...#.##....#......##....#.......###.#..#..##.##....#.Tile 2423:#.##.#####..#.#...#.#.....#.#.#..#.....#..##..#..###....#..##......#.##.#..#.##.#.....#....##.##.#..Tile 1999:.#..#.####.#.#..#................#.#.#....#....#.###.#...#...#..####.......#.#.#..#..#..####..#..#..Tile 2341:#....#.#.###.##....##..##.#...#..#.#.......#..#.#.##..##.####.#.....##.......#.###.##.........#.####Tile 3359:#..###.##.#..........####.###.#.##....#..#..#.##..#..........#.#.#......#...#..####......#...#......Tile 3863:..##.##.#.#.##..#.##.###.......#.......#..##......#..##..###.##..##.......#.#...#.#.#.##.#...##..##.Tile 3187:#.#.#.#.........###.#.....####..#.#...#.#....#..#.#......#..#...##..#.#........##.##.....#.##.#...#.Tile 3119:##.....##.....#....##..#..#..##....##..#........#....#.#.......##..#.......#....#.####.......#..#.##Tile 1063:.#.#.#....##........#..#.##...#..#.....#....##...#.#......#...##...##.#........#...........#..#..#..Tile 1657:.##.#.#...##.....#.#....#.#.#.#....########......#.#....#..##.#..#.#..#.#.##....##.#......#..##.#...Tile 3257:##.####..##.#.#####.##.#..##...##.#..###..#.......#...#.#..##..#.#.#.#...#....####.....##....###..##Tile 1987:.#.#..###..#.......#...#....###...##...........#.#.#.##.####...#...#...##...#............#.#.##..#..Tile 1459:#.....####......#..#........#.##..#..#..###.##.#.###..#...#.##..#.###..##..###.##..####....#.#####..Tile 3533:#.##...#...#.....#..#.##........#.....##....#..#..##..#....##....##..#..#....#..........##.####.##.#Tile 2789:..####...##....###..#..#..##.##.#..#....#....##.......#.....#.........#..#.............#.#...####.#.Tile 2137:#..####.##....##...#.#.....#..#.#..#####...#..#....#.....#.#.....#..#.##..#...##..#.#.....#..######.Tile 1181:.#####.#....#.##...##....#....#...#.#...##.......#.....#...###..#...#..##.##....#...##......#.##....Tile 1117:#####.####.......#..##.#..#..##....#.#..............#...#.#.......#...##...#...#....#...#.#.....##..Tile 3739:..####.#.##.#.#.#...#.......##.##...#.#.#....#.#..#...#....##.....##.#.......##.##...###.#....##..##Tile 2909:.##..###..#...#..........#...#..##......#.##.###..##.....#.##..#...###....##....#......#..#.#...####Tile 1609:##.###.#......#.#...#.#....##.#..##.#....####..#.#..........##..#....#...#..#...#.............#.###.Tile 1753:....#.###.##.##.........##....#.....##..#.##..#.............#..#.#..#.#.....#....#.........#.#...#.#Tile 2003:#.#.####.##.##.#...#####..#...###..##...###.......#.....#.....##......#....#..#.#.###...#..#..#.###.Tile 1399:#.#..##..#....#.##.##..#.....##..#....###...#..#..#.#.#....#......##...##........####.####...#...#..Tile 1249:..#..####.#.##.....#............#.....###.#..#...##..#...###.....#.#.#..###..#.#.#...#..#..#...##.#.Tile 1289:#########....#...........##.#....#.#...##..#..#...#....###.#....#..#.......##..#.....#...#.#.#####.#Tile 3373:#...##..###..#....###..#...####......#....#......#.....#....#.#............#.##....#.#..##..##.##...Tile 1613:####...#..#.#.................#....######..#....##...#..#........#...#.#......####....#..#....#..###Tile 2029:#..###.#.##.#..#...###...#.....#..#..#.....#...##.##.....##...##...#.#...##.#..##..........#.####.##Tile 2203:..####.###..##....##...##.........#..#.#..#...#.###.#..........###....#.....#..#.........#.###....#.Tile 1877:##.....###.....#..#.....#...#.##.#.....#.#..##...###.#..##....#...#...#...##....#.#.#......##..#....Tile 3847:...##.#....##.....###.#.#..##.#.##..###..........#..#...##.##...##..####..#.##.##..#.....##.##.#..#.Tile 1499:..#.#######....##..###...#...#...#.##.#.##...#...#....#....###.....#.##.....#....#....#..##.#.#..#..Tile 3251:.###.#.#.###....######..#.....#.#....#.....#..#.##...#......#.#.##..........##........#.....#.##...#Tile 3323:...#.#............##...#......#.......#####.##..####.##....#...#..#......###.#####.....#...###.##..#Tile 3109:.#.#.#.#########.#........#...##.#.#...#.#...#..#####...#.#.....#.....#....#..###...#.#....#....####Tile 1889:#..#.####.#..##.##.....#....##........###.#..######.........#.#.#........###.#..#....#..#...###.#...Tile 2027:#....##....##....#..#...#...###........##.....##.#.#...#..###..#...###....#.....#..#...##.##.#.#####Tile 2677:#..###.#.###.#....#..##.###.###.........#........#.#.##.##.###...##..###......##...#......#..####...Tile 1663:.####.#.#.#...#....####....##.#..##.#.###.....#..#.#..##....#....#.#..##........#..#.......##.##..##Tile 3559:..###...#.##..........#..#..#.#..........#.#..##.###.#.....#..#.......#..##.#..####.#....#.#..#..#..Tile 3049:.#.##...#.#.......#.#.##....#....#...#.#..........####..#.#..##.##...#...#..#.#.....#....####.#.#.#.Tile 2777:..#.#..##.##..#...#......##...#.###...####...#..#..##......#....#....###....#...##.....#..###.##...#Tile 2551:#.####.##.#.........#..##...##..#......#..........##...#..##.........##.#......#..#.....#....#.###.#Tile 3491:#.##...####.#.#.#...#.....#..##.....#...##..#..##.###......##......#......#.##.##.##....######.#.#.#Tile 3947:#.##.#.#......#.#.##...##....####......###.#..##.#..#.#..#..#....#..#.#...#....#...#..#.#####.##.#..Tile 1361:..#.#.#####..#..#.##.#...#...#............#......###........#.##.....#.#.......##.#..#...##..##...#.Tile 2851:.###.##...#.....##......##...#........#.#.#.###..##...#.#..###...#..##...#..#...##.......######.#.##Tile 2381:.#.#######.#..#..##....#......#......####.#..#...#..###..#.....#.#.#..#......#....##.....#..#.#.##..Tile 1069:.#.#...#####..#.##.##.#..###..###...##...#.#....#..........##..#...#....#....##..#.#....###.....##.#
Tile 2311:..##.#..#.##..#.....#...##..#.####.#...###.##.###.##...#.###.#.#.#..##..#....#..###...#.#...###..###Tile 1951:#.##...##.#.####...#.....#..###...######.##.#....#.###.########.##.##..###....#...#.#..#.##...##.#..Tile 1171:####...##.#..##.#..###.#..#.#..###.####...###.####.##....##..#...####.#.##.####.####..#........##...Tile 1427:###.##.#...#..#.##...#.##.#..##.#.#.##.#....#...##...##..##....#.#####.#.####.#...#..###.#..##.#..#.Tile 1489:##.#.#......##...#...##..##.....#...#...#####...#.#..#.#.#.#...#.#.#..##.#...##...##.##.#####.##.#..Tile 2473:#....####.#..#.##...#.##..#...######.#.#.#...#.#.#.#########.###.#..#.########.###...##.#...###.#.#.Tile 2971:..#.#....##...###...#.#.###...##.##..#...#####..##.#..####.##..#.#..#...####.###..#.#.###....#.#.#.#Tile 2729:...#.#.#.#####.#......#.#.........#..#.#.##..##.#..#.####...####.#.#..##.####...##..#.##..#.##...##.Tile 3079:#.#.#####..#..######..#.......######....####.#..#..#...#.##.#.#####.##..#.###.....#.........#.###...
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();const groups = data.split(/\n{2,}/);const tiles = {};const edgeCandidates = {};// find edge candidates per tilefor (const tileLines of groups) {const lines = tileLines.split(/\n/);const head = lines.shift();const id = /Tile (\d+):/.exec(head)[1];tiles[id] = { lines };tiles[id].possibleEdges = [];tiles[id].possibleEdges[0] = lines[0];tiles[id].possibleEdges[1] = lines.map((l) => l[0]).join("");tiles[id].possibleEdges[2] = lines.map((l) => l[l.length - 1]).join("");tiles[id].possibleEdges[3] = lines[lines.length - 1];for (let i = 0; i < 4; i++) {tiles[id].possibleEdges.push([...tiles[id].possibleEdges[i]].reverse().join(""));}for (const edge of tiles[id].possibleEdges) {edgeCandidates[edge] = edgeCandidates[edge] || [];edgeCandidates[edge].push(id);}tiles[id].id = id;tiles[id].adjacent = [];}// count possible connections// collect adjacency datafor (const [edge, ids] of Object.entries(edgeCandidates)) {if (ids.length === 1) {continue;}for (const id of ids) {tiles[id].connections = tiles[id].connections || 0;tiles[id].connections++;}tiles[ids[0]].adjacent.push({ t: tiles[ids[1]], e: edge });tiles[ids[1]].adjacent.push({ t: tiles[ids[0]], e: edge });}// collect edge tiles idsconst edgeTiles = Object.values(tiles).filter(({ id, connections }) => connections === 4).map(({ id }) => id);// helpersfunction flipLines(lines) {for (const [k, line] of lines.entries()) {lines[k] = [...line].reverse().join("");}}function rotateLines(lines) {const oldLines = lines.map((l) => [...l]);const newLines = Array.from({ length: oldLines.length }, () => Array.from({ length: oldLines.length }, () => ""));for (let j = oldLines.length - 1; j >= 0; j--) {for (let i = 0; i < oldLines.length; i++) {newLines[j][i] = oldLines[i][oldLines.length - j - 1];}}newLines.forEach((l, idx) => {lines[idx] = l.join("");});}// make map of tile idsconst map = [];const availableIds = new Set(Object.keys(tiles));// place first edge tile{// based on the order of generated possible edgesconst flipIfEdge = [1, 3, 4, 6];// rotate to make connecting edge on top// all rotations are counter-clockwiseconst rotateIfEdge = [0, 1, 1, 2, 0, 3, 3, 2];map[0] = [edgeTiles[0]];const connectingEdgeString = tiles[map[0][0]].adjacent[0].e;const edgeStringNo = tiles[map[0][0]].possibleEdges.indexOf(connectingEdgeString);if (flipIfEdge.includes(edgeStringNo)) {flipLines(tiles[map[0][0]].lines);}// 3 extra rotations to make connecting edge on the rightfor (let r = 0; r < rotateIfEdge[edgeStringNo] + 3; r++) {rotateLines(tiles[map[0][0]].lines);}}availableIds.delete(map[0][0]);// last placed tile, py - line no, px - tile in linelet px = 0;let py = 0;// place all remaining tiles{let isFirstLine = true;do {const rightEdgeString = tiles[map[py][px]].lines.map((l) => l[l.length - 1]).join("");const adj = tiles[map[py][px]].adjacent.find(({ t: tileCandidate }) => {if (!availableIds.has(tileCandidate.id)) return false;for (let i = 0; i < 4; i++) {const leftEdgeString = tileCandidate.lines.map((l) => l[0]).join("");if (rightEdgeString === leftEdgeString) return true;rotateLines(tileCandidate.lines);}flipLines(tileCandidate.lines);for (let i = 0; i < 4; i++) {const leftEdgeString = tileCandidate.lines.map((l) => l[0]).join("");if (rightEdgeString === leftEdgeString) return true;rotateLines(tileCandidate.lines);}});// if (!adj) return console.log("bad left step");availableIds.delete(adj.t.id);map[py][px + 1] = adj.t.id;// first line ends on edge tile// other lines end at first line lengthif ((isFirstLine && !edgeTiles.includes(adj.t.id)) || map[py].length !== map[0].length) {// not the end of the linepx++;continue;}if (availableIds.size === 0) {// no more tilesbreak;}// line has ended, must place first tile on the next line{let bottomEdgeString = tiles[map[py][0]].lines[tiles[map[py][0]].lines.length - 1];let adj = tiles[map[py][0]].adjacent.find(({ t: tileCandidate }) => {if (!availableIds.has(tileCandidate.id)) return false;for (let i = 0; i < 4; i++) {const topEdgeString = tileCandidate.lines[0];if (bottomEdgeString === topEdgeString) return true;rotateLines(tileCandidate.lines);}flipLines(tileCandidate.lines);for (let i = 0; i < 4; i++) {const topEdgeString = tileCandidate.lines[0];if (bottomEdgeString === topEdgeString) return true;rotateLines(tileCandidate.lines);}});// first line may need to be entirely flipped for this to workif (!adj && isFirstLine) {map[0].forEach((id) => {tiles[id].lines.reverse();});bottomEdgeString = tiles[map[py][0]].lines[tiles[map[py][0]].lines.length - 1];adj = tiles[map[py][0]].adjacent.find(({ t: tileCandidate }) => {if (!availableIds.has(tileCandidate.id)) return false;for (let i = 0; i < 4; i++) {const topEdgeString = tileCandidate.lines[0];if (bottomEdgeString === topEdgeString) return true;rotateLines(tileCandidate.lines);}flipLines(tileCandidate.lines);for (let i = 0; i < 4; i++) {const topEdgeString = tileCandidate.lines[0];if (bottomEdgeString === topEdgeString) return true;rotateLines(tileCandidate.lines);}});}// if (!adj) return console.log("bad line step");availableIds.delete(adj.t.id);map[py + 1] = [adj.t.id];px = 0;py++;isFirstLine = false;}} while (true);}// make final imageconst image = [];const tileSizeForImage = tiles[map[0][0]].lines.length - 2;for (let i = 0; i < map.length; i++) {for (let j = 0; j < map[0].length; j++) {for (let k = 1; k <= tileSizeForImage; k++) {const line = tiles[map[i][j]].lines[k].substr(1, tiles[map[i][j]].lines[k].length - 2);image[i * tileSizeForImage + (k - 1)] = image[i * tileSizeForImage + (k - 1)] || "";image[i * tileSizeForImage + (k - 1)] = image[i * tileSizeForImage + (k - 1)] + line;}}}const pattern = [` # `, //`# ## ## ###`, //` # # # # # # `, //];// offsets relative to first hash on second line in patternconst requiredHashesOffset = [];for (let i = 0; i < pattern.length; i++) {for (let j = 0; j < pattern[0].length; j++) {if (pattern[i][j] === "#") {requiredHashesOffset.push([i - 1, j]);}}}const imageSize = image.length;function countPatterns() {let res = 0;for (let i = 1; i < imageSize - 1; i++) {for (let j = 0; j < imageSize - pattern[0].length; j++) {res += requiredHashesOffset.every((shift) => image[i + shift[0]][j + shift[1]] === "#");}}return res;}// only one flip/rotate combo has patterns!let foundPatterns = 0;search: do {for (let i = 0; i < 4; i++) {if ((foundPatterns = countPatterns())) break search;rotateLines(image);}flipLines(image);for (let i = 0; i < 4; i++) {if ((foundPatterns = countPatterns())) break search;rotateLines(image);}} while (false);// result is number of hashes that don't belong to a patternconst hashesInPattern = [...pattern.join("")].filter((char) => char === "#").length;const hashesInImage = [...image.join("")].filter((char) => char === "#").length;console.log(hashesInImage - hashesInPattern * foundPatterns);
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();const groups = data.split(/\n{2,}/);const tiles = {}const edgeCandidates = {}for (const tileLines of groups) {const lines = tileLines.split(/\n/)const head = lines.shift();const id = /Tile (\d+):/.exec(head)[1];tiles[id] = { lines }tiles[id].possibleEdges = [];tiles[id].possibleEdges[0] = lines[0]tiles[id].possibleEdges[1] = lines.map(l => l[0]).join('')tiles[id].possibleEdges[2] = lines.map(l => l[l.length-1]).join('')tiles[id].possibleEdges[3] = lines[lines.length-1];for (let i = 0; i < 4; i++) {tiles[id].possibleEdges.push([...tiles[id].possibleEdges[i]].reverse().join(''))}for (const edge of tiles[id].possibleEdges) {edgeCandidates[edge] = edgeCandidates[edge] || [];edgeCandidates[edge].push(id)}}for (const tileGroup of Object.values(edgeCandidates)) {if (tileGroup.length ===1) {continue;}for (const id of tileGroup) {tiles[id].connections = tiles[id].connections || 0tiles[id].connections ++;}}let result = 1;for (const [id, {connections}] of Object.entries(tiles)) {if (connections === 4) {result *= id}}console.log(result);
3: 97 29 | 2 10445: 97 10 | 2 73114: 44 97 | 90 278: 2 95 | 97 327: 97 64 | 2 119118: 97 81 | 2 5864: 97 29 | 2 14106: 53 1214: 2 103 | 97 5554: 2 53 | 97 4458: 33 97 | 130 291: 104 97102: 104 97 | 83 2128: 2 59 | 97 379: 98 2 | 124 97117: 2 65 | 97 921: 75 2 | 115 9740: 2 96 | 97 1198: 4292: 102 97 | 57 297: "a"93: 2 66 | 97 10336: 2 104 | 97 322: "b"108: 43 2 | 68 9746: 44 2 | 90 9731: 97 5 | 2 132110: 14 2 | 90 9761: 38 2 | 9 9710: 63 2 | 34 9732: 2 2 | 97 12111: 42 31103: 121 121131: 75 97 | 60 274: 2 112 | 97 4720: 93 2 | 69 9753: 97 2 | 97 9723: 125 1219: 97 66 | 2 25101: 83 97 | 95 235: 25 2 | 104 9776: 97 55 | 2 104125: 83 2 | 32 9722: 59 97 | 76 2127: 6 97 | 55 2126: 97 119 | 2 17113: 59 97 | 35 281: 46 2 | 72 97104: 2 2 | 97 2100: 25 2 | 95 9795: 97 2132: 97 27 | 2 45107: 97 90 | 2 3234: 98 97 | 50 233: 2 95 | 97 83119: 32 97 | 66 290: 2 2 | 97 9777: 126 2 | 22 976: 2 9714: 97 2 | 2 12194: 2 110 | 97 12921: 56 97 | 105 265: 2 96 | 97 98122: 2 71 | 97 8687: 101 97 | 91 215: 107 97 | 120 2120: 103 2 | 66 9756: 128 2 | 20 97129: 2 66 | 97 8341: 97 48 | 2 12213: 39 97 | 26 230: 97 88 | 2 5484: 55 97 | 53 286: 84 2 | 59 9796: 55 2 | 104 9783: 97 121 | 2 9750: 53 97 | 95 219: 2 70 | 97 78121: 2 | 9757: 53 2 | 83 9737: 6 97 | 6 268: 97 53 | 2 83112: 97 23 | 2 1966: 2 97 | 2 249: 97 90 | 2 10380: 2 97 | 97 9785: 83 97 | 55 212: 2 35 | 97 51116: 97 67 | 2 77123: 4 2 | 85 9782: 21 2 | 111 97105: 30 97 | 87 272: 25 97 | 95 2115: 104 2 | 29 9763: 97 37 | 2 3642: 24 2 | 82 970: 8 1170: 2 80 | 97 255: 2 74 | 97 11652: 16 97 | 94 262: 35 97 | 114 218: 123 2 | 61 9725: 97 9788: 83 97 | 66 2124: 2 6 | 97 8089: 114 97 | 100 244: 97 2 | 2 9771: 49 97 | 106 238: 2 104 | 97 9075: 53 2 | 104 9798: 53 2 | 25 9769: 97 95 | 2 9573: 2 1 | 97 724: 41 97 | 109 248: 2 40 | 97 11339: 103 2 | 104 9767: 2 15 | 97 6255: 2 247: 2 79 | 97 10851: 6 2 | 95 9717: 95 2 | 90 9759: 53 97 | 66 228: 2 12 | 97 13127: 2 52 | 97 2829: 97 97 | 2 12116: 4 2 | 127 97109: 2 117 | 97 1843: 104 97 | 6 299: 97 89 | 2 13130: 83 121111: 99 2 | 118 9760: 97 44 | 2 2526: 121 44abbbbababababbaabbbbbbabbababababaabbbaaaabaabaaaaabaabaaabbbbabbaaaabbbabbbbababbbbaabababaaababbaaaabbbbabbbbbabbababaaabbabbaabaaaaaaaaaabaabaaabaabbaabbaababaabbabbaaabaababaaaababbaabaaaaabbabaabaaabaaabbaaabbabbaaabbbbbabbbabababaabaaabaabaababaabbabbbbbbababbbaaaababaaaaabbaabaababbaabaaaaaaabbabbababaabbabbaaaaaabbababaaaabababbbbaabbaaabbababbaaababbbbaababbbbabababbaaabaaaaababbabbbbababaabbbabaabbaabbaaaaabbbabbbbbbbbbaaaabaabbbaaababbaaaaababbbabbabbabaaabbbbabbbabbaaabaaabaababbbaabaabaaabbbbbaabbbbbabbaabbbbbbaaaabbbbaaaaabbaabbababbabbababbbbbaaabaababbaabbaabbaabbbbbabaaabbaaaaabaaabbbabbaaababaaabbbbbaabbaaabbbaabaaaaaabbbbaabaaaabbbabbbaaaabaabbaabbbababbbbbbabbbabbbababbabaabaabbbbaabaaaabbabbbababbabbaabaaaaabbbaaaabbabbababbbaabbbbbbaaaabbaabbabbaaabbabababbbbbbbbbabbbaabaaaaaabbababbbbbaaababbbaabbbaaabbaabbbbbbaaabbabbabbbababbbbababbbaabaabbbabaabaaabaabbbbbbbaaabbaaaabbababaaabbaabaabaabbbabbbbabaaabbabbbbabbabaabbbabbbaababbbbbaaaabababbbbaaabbbaaaaaabaaaaabaabaabababbbbabaaaabaaaaabbbbbbbbababaaabaaabbbabaabaaabbbababbabbbabbabaaaaabbabaaabbaaaabbbbbabbbbaaabbbaabaabbbbbaaabbbabaabbbbbbbababaabbaaabbabbaaabaaaaabababbaabaaaaaaaaabababbbbaababaaaabbbabbbabaaababaaabababaaaaabbaababaaaabaabbbabaababababbabbaaaabbabaabbbbabababaabaaaabbbababababbaaaabbaabbabbabbabbababbbababbabbaaabbbbabababbbbababbbbbbaaaabbaaababaaaababbbabbbabaaabbbabababbababbababaaaababbaabbbabbaabaabbabbbbaaaaabbbbbbbababbaabbababaabbbbababbbaabbbabbbaabbbbaabbbaaababaaababaaababbbbbbbaaaaaabbbaababaabababbbaaaaabbbaabaaabbbbbbaaaaabbaabaaabbaaaabbbbbbbbbbaaaaabbabbbababbabbbbaabaabbbaaabaabbbbaaabbababaabbababbbbababbbbaaababbbbbabbababbaaababbabaabbaabbbbabbababaabbbaaabaaabbabbbbaabaabaaaabbbabaabbaaabbbbbbababbabaabaababbabbaabbbbbaabaaabbaabaabbbbaaabbaaabababbbabaaaaababbbaaabbabbabbbaabaaabbbbababbbabababbabbabaabbbaabababbbbbbabaabaaaabaaaaabbbaababaababbbbababbbabbaaabbbabbbabbaaabbababaabbbaaabbaaaaaabbaabababaaaabbbbbbbababbbababbbbbaabaabbaabbaaabbbbaaaaabbabbababaaabbabbabaaaaabbbaabbbaaabaaaaaabbabbbbbbaababbaabbbabbaaabbbbabbaaaabbbbaabbababbbbbbaabbaaaaaaaabbbbaabbbabaabbbbbbbaabbbbbabaaabbbbbaababababaabaaaaaabbaaabbaaaaabbbaabbbbbababaaababbbabaaabbaabbabbbababababbaaabbbababaabbbbabaababbaaaaabbabbbaaabbbaaaababaaaaaaaabbbbabbbabbbabbbbbabaabbbabaaaaaabbbaabbaaaaabbbabbabababababbabbababbaabbaaaabaabaabbbbbbaabaaaaabaaabaabbaabaaaabbbabbbbaaababbabbababbaaaaabaabbbaaaaabbbbbbbababaabbbbaabbabbbababbaaaabaaaaaabbbababababbbaaababaabbabbbabbabbbbbbaaaaaabbaababbbabbaabaaaaaabbbaabaaabbbbaaaabbababaaabaaaabbaaabbababaabbaaaaabbabbaabbbabbbabaaaaabbbababababbababbaababaabaabaaabbaabbaaaaaababaaabbabbabbaabaaaabbbbbbbbaaabaaabaabaaabababaabbabaabbbbaaabbaaabbababbbbaabbbbaababbaaababbaaabaabaaaaaababbbabbaaaabaaaaabaabbabaaabbabaaabaaabbbababaaabaaaabaaabbabbabbbaaaabbbabbbaaaaaabaabaaaababbaaaaaabaababbbbbbabbbabbbaaabbbabbbbbabbbaabbbbbabaabbabbaaabaaaaaaabbbaaaabaaaabbababbaabbbbbabaabaaaabbbbaaaababaaaaababaabaababbabbaabbbbbbbabaabaaaabaaabaaabbabaaaabaabababababbbbbbabaababbbabbbbaaabbabbababaaaabbbbababbbbabbaabaababbabbbaabbbaabbbbaabbaabaabaaababbbbaaabbabaabbaababaababbbabaabaabaaabbbbaabbbbbbbaabbababbabaabbaaabaaabbbbbbbaabbbaabbbabbbabbababbaabbababbbaabababababaaaaabbbababbbaabbbbaaaaababbabaaaabbaabaabbaaaabaaaabbbbbabbababbaaaabbbbbabbaabaababbbbbaaaaabbaaaababbbaaaaaaabbaaaaaaaaabaabaaabbabbaaaaababaaababbaaabbabaabbbbbbaaaababbbaabaababbabbbaaaababbbababbbabaabaababbbabababbaabbbaabbabbbabaabbbaaabbaaaabbbbaaabaaabbaabbbbabaabaaaaababababbbbabbbabaabaaaabaaabaababababbbaabbbabbaaaaaababaaaabaabaaabbaababbaaabbbbbaaaaababaaaaaaabbabbbbbbbaababbbabbabaabbabbabbbbababbaabbaabababbbaabaaabbaaaaaabababbaababaaabaaabbbbbbbbaabababbbbabbbabbababbababbababbbaabbbbbbbababbabbaaabbbbbbaabbaababbbaababbaaaaaabbbaaababbbaaababbaabababbaabbaabbabaaaaaabbabbabbbabbbaaabbbababababaaababbabababbabaaabbbabbbaaaabaaabaabaaabbbbabbababbaababaabaaabaabababbbabbaaaaabbbabababababbababbbaaabbbaaaababbbabbbbbbbbabaababaaaaabaaabbbbbbababaaabaaaaaababbaaabaaabaaaabaabaabababaabbbbaaaaabbbabaaaaaabaabaabaabbbabbbbabbaaaabbbaabaabbbabbbababbbbbbbbaababbbbaabbbabbaabbbbaaaaabaaaabbbbbabbbababaaaaababbbababbbaaaaabbaabaabbaabbaaaaabaaabaaaaababbbabaababababaabbaabaaabbabaababbaababaaaaabbbaababaaabbababbbbaabaaababbbbbbbbbababbbbbbbbbaaabbbaabbabaabaababbabaaababaababbabababbbbabaababbbaaaabaabbabbaaabbbbababaabbaabbbbbabaabaababbabbabbbaabaaababababbaabaabaaaabaaaaaaaaabaabbabaaabbbaabbabaaaaabbaababbabababaabaabbbaaaaaababbabaaaaaaaaabaabbbaaaaaaaaabaaaaaaaababbaaaaaabaabababbaababaababbabbaabbaabbbaaaabbababbabbbaaabbbababaaaaababbaabbbbbbabaabaaababababbbabbaabbaaabbbabbbabbbbaaaabaaaabbaaabbaabaabaaaabaabaababbabbabbbaabaabbaabbabaabbbabaabbbaabaaabaaabaaabababaababbbababbbaaaaaabbababaaabbbaaabbbbaaaababbaabaabbabbaaaaaabaabbbbaabababababbbbaaababbaaaabbbbaaababaabbaaaaabbbbbaabbabbbbbaaaaaabbbbaaabbabbbaaaaabbbbbaaaabbbaaaabababaababbaabbbbabaaabaabbbbbbaabaabbbababbaabbbabbabaabbbbabbaaababbaabaaabbbbbaaaaaaabbabbaaaaabaabababbabbabbbbbbbabababbaaaabababbaaabbaabaaabbbababaabbbbaaaaabbbbaabbbbababaabaaaaaaabaaabbbabbbbabbbabbbbbabbaabbabbbbaabaaabaaabaababaaaaaaaaaaabaababbaaaabbaabbbaabbbbabbaabbabbabbababbbaabbaababbaaaaaabaabaabbbbaabbbabbabbbbabaabbabbabbbaabbabbbabbbbaabbbbaabababbbbaaaaaabbabbabbbbbbababaaabaabbbbbbbaabbbaaaabbbababbbabaabaabaabbbaabbababbbababababbbabbababaabababababaababbbabbababaabbabbbaababababbbbaabbbbbabaabbbbabbbababababbabbbabababbbbabbaaaaabbabbbbaabbabbbbaabaaabbabbaabbbabaabbbabababbbabaabbaabbbbbbaabaaaaabbbababaaaabaabbbaaaabaabbaaaaaabbabbababbaababbbbaabbabbaabbbbababbbabaabbaaababaabbbaabaababaabbababbabaababbbabbabababaabbbbaaaabaabaaabaababbaabaaaaababbbbabbbaaaaabbabababaaabababababbaabbaaababaaababababbbbbbababaabbabbabbbbabababbbabaaabaabbbaaaaaabbbbbaababbabbbbbabbabbbabbbaaabbbabaabbbababbababbbbaaabaaaaaabaabaaabaabaabbbbaaabbbababbbaabbbbbbaabbbbbaaababaaababbabbaaaabbaababbbbbabbbbaabaabaabbaabaabbabbbabbbaaaabbbaabbbababbaaaabbbbabaabbbbbababbabababbbaababbabbbaaaaaaabaabbabbbaaabbbaaabbabaabababbabaaabbaaaaaaaaabaabbbabbbbbaaabaaabbaabaabbbaababaabababbbbaabaaaabbaabbbaabaabaabbaababaabbbaaabbaabaaabbbbbbbabaababaabaaababbbbaaababbaaaabbbabaabaaaabababbbbbbabbaabababaaaabbaaaaaaabbbbbabaaababbabbabaaabaabbaabbbabbaabbabbbbaabaabbaabbaaabbbbababaabbbaabbbbbabaababbbaabbbbbaaababaaaaabbbbbbbbbbbbbababbbaabaabaaaaaabbbabaaabaabbabaabbaaababbabaabbabaabbbbbbababaabaabababbbabbbbbabaaaaaababbabaabaaaababaababbaabaaaaababaabaaaaabababaababaaababaaaabbabaabaaabaabbababbbaaabaaabaababaababababbababababaaababbbaaabaaabbbababaaaabaabbabaaabbbabaaaabababbabbbaaaabbbaabbaaaabbbabbbabbabaabbaabbbbbabbabaaabaabbababaabaabbabbbabbaabbbbbbabbbabbaaaaabbbbbabaaabbbabaababbbbbabaabbbbbbaaaabbbbbaabbbabaaababbbabababbababaabababbbbbbbbaaabbabbaabbbaaaaaabbbbbaababbbaaabaabbbaaaaaaaababbabbabbbaababbabbaabbabaabaaabaababbbabbabbbbbbbbbaabaaaababbbbbbbbaaabababaaaaaabbbabbabbbabaabaabaaabababaabbabbbabaabaabbbaabaabbabbbaabbbabaaabbaabbabbbabaaabaaaaaabbbbabaaabbaaababbababbaaaabbbbbbabaaababbaaaabaaaaababbaabaabbbbbabaaaaababbaabaaaabbbbaaaaabaaaaaabaabbbbababaaababbabaabaabbaaabbaaabbbbbbbbbbbabbababbaabbbaaababaabbabaabaaaaaabaaabbbabbaaabbababbbbabaababbbaaabbabbaaaabaaaabaaababbbbabaaaaabaabaababbaabbaabbbabbabbababaaaabbbbaabbabbaabaabbbbbababaaabaabababbaabaaaaabaaabbbaabbaabbaaabbbbbbbbbbbaaaaabbaababbabbabbbbbbbaaabaaabaabaabbbbbbabababbbabbbaaaabaabbbaabbbabbbaabaaaaabababbaabaaabbababaababbbbbabaabbababbaabbbabbaababbbbbbbbbbbbabbbbbbbbbaabaabbaaaabaaabbbaaabbbbbabbbbbabbabbbabbbbbaabbbaaabbbbaabbbaaabaabbbbbabbabbbbaaabaaababaaaaaaabbbabbbaabbaaababbbbbbbaaaabbaabaaabbaabaabbbabbaaabbbabaaabbbaababaaaaaaaabbbaabaabbabaabbbbbbbaabbaaaaaabbbaabbbbabaabbabaaaaaabaabbaaabaaabaaabaaabbaabbaaababbbbabbabaaaabaabaaabaaabababaabaaabaaababbaaabbbabbaabbabaababaaabbbabbbbaabbbbaabbbbbaaabaaaaaaaabbaaaabbbbbabbbabbaababbbbbbbbabaaabbbababbababbbabaabaabbababbbaaababaabbbbbababababbbabaaabbbbaaaabaaaaabbaaaaaabbabbabbbababaababbbbbabaaababbababbbabbbaaaaaaababbbaaaababaaaaabbaaabbbabbabbbbaabbaaaaabaabbabaaabbabbbabbaabbbbbbabaaabaaabbaabaabaaabababbbaababbbbbaaabababbbbabbaaabaaaaaabbaaaabbbaabbbaababbbbbbabaabbbaabbbbbbbaaabababbbbbababaaaabbaaabaaabaaabbabbbbbabbababbabbbaabaaaaaabaaaaaabaabaababababaabaabbaaabbbbbbbbbabbaaabababbbaabaaaaaaaababaaabbbaabaabbbbbbabaabbabbbbaabbbababaaabaabbbaabbaaabbababbbaabbbbabaababaabbaababaaaabaaabaabaaababababbabbbbbbbbababbaabbbaaaaabbbaabbababbbabaabbbaaabbabbbbbbbbabaaabbbbaabbababbbbbaabaaaaaaabababaaabbbabbabababbaabbbabaabbbbaaababaaababbaabbbbbababaaaabbbaababbaaabaaaabbbabbbabbababaaaabababbbaabbaaabbbaaabbabaabbbbbbabbabbbbbbaaaababaaaabbbaaabbaabbabaabbbabaaababaaaaababaabaaaaababbbaaaaababbabbbbaababaababbabbaabbbabbaaaaaaaaaababbbbbbabbabaaababbbbaaabbabbbbbbbaabbabbaaabaaaaaabbbaabaababbbbaababbabababbababaabaaabbbbbaabbababaabbbabbaabbbababaabababbabbaaabbabaababbaaaaabbbaabbbbbaabbabbbaaaabbaaaabaabbbbaaaababababababbaaabaaaaababbabaabaaaabbbaabaaabaaabbaababbbbabbbbbbbaaaaababbbbabaaabababaabaaabbaabaaabbaaabbabbaabbaaabbaaabaaabbbbbbbbaaaaaabaabbbabbbbbbbaababbbabaaababababbbbbbbabbaabaabbababbbbbaaaaaabbaaabbbaababaaabbbaabbbbabbbbaaaaaabbabababaabbbaaaaaabbaaaababbbaaaaabababbabaaaaaaaaababbbbbbaabbbabaaabaabaabbabababbbaabbaabbbbbabaabbbbabaabbaaaaaaababbbabbbbababaaababababbaabbbaaabbbabbbababbabaababbaabbbaabaaaabbaaaaababaaabaabaabbaababbbbbbbabbbbabbaabbbaaaabbbbbaabbaaaabbbaaabbbbbbbbabbbaaababaababaabbbababbabbabaabbbabaabbaaabbbbbaaabbbababbbaabbaaabbabaaaababbbaaabbabbabaabbabbbbbbbbbaabaabbaabaababbbaabaababbabaaaaaaaaabbbbaabaaabbabaabbbbbbaaaabbabbbbaaabbbababbaabaabbaaabaabbabbabababbbbbbbbababbbabbaabaabababaaaabbababbabbbabbbbbbbbaaabbaabbbababbaaababbaabbbbbbbbaaaaaababaaaaabaababbababaabbabbaaabaaaabbabbbaaaaaabbabaaaaaaabbbabaababbbbbbaababbbabaaaaaabaaababbbaabbbbabbaababbbbaaabbbbbbbaaaabbbbbaaabbbbbbbbbaababbaaaaabbbabbbaabbbababaaaaabaaaabaababababbabbaabaaabbabababbbbbaabbabbbbbbabbbbbbbaabbabbabaaaaababbaabaabaaaabbabbabbaaaaaaaabbbababaabbabbbabaaabaabbaaababbbbaabbaabbbaabaabaabaaaaaababbbbbababaabaaaaaaabababbbaaabbaabaaabaabbabbbbabbaaaaabbbababbabbbabbbaaaabaabbbbabaabbbabbbaaabaaabbbaaaaaabbbaaaaaaabbbbababaabbbaababaaaabbaaaababaabbaaababaaababbaaaabbbabaaabbababbbaaabbbabaaaaaababbbabbbbbbbababbbaabaabbabbabbababbbbabbbabaaabbbabbabaaabbababbaabbbabaabbabababaabbbabbbbabaabbbaabbababaabbbababaababaabbbbbaababbbaabaabbbbabbbabaabbababbbbaaabaaaaaaabaaabbbbbaabaaaabbbbbbaaabaaababbaabbbaaababaaaabbbbabbaaabaaaaaababbabaaaaababbabaaaabbababaabbbaaaabaabbbbbbbaababbbabaabaaababaababaababbaabbaaaabaabbbaabaaababaabbbbbabbbabbabaaaabaabbbaabbbabbaabaabbabaabaabbaabbbbbabababaaabaabbbaabbaabbaaaabbbbababaaabbbbbbaaabbbbbbabaaaaabaaabbbabbabababbbbaabbbabaabababbbabbababbaaaabaaabaaabaaaabbaaababaaaabbaabbbbaaaabbaabbababababbaaabbabbbbabaaababbaaaabbaabbbbabbbabbbaabaabbabbaabbaaaaaabbbaabaaabbbababaabbbbabaaaabbaabbababaaaababaabaabbbabbaababbbbbaaabaabbbbaabbbaaababbbabbbaaaaaaabaabababaaababbaabbaabbbabbaaabaaabaabbabbaababbabbababbaababbbbabaabbbaaabababbbbaabaaaaabaabbaaabbabbbaababababbaaaabaaabbaabaaaabbaabaaabbaaabbaaabaabababbaaababbbbbbbbbaabbbababbaabbaaabbababbaabaaaaababbbaaaabbbbbbababaabaaabaaabbbbabbabaaaaaababaaabbbbaaabaabbaaabaabaabbbaabaaaaaabbbbabaaaabbbbbbaaabaaaaabaabaaabbbbbabbabaaababbbaabaaababaababaaababbaaabbabaabbbaababaababbabbbabababbababbaababbbaaaaabbbaaababbbabaaaabbabbbababaaababbaaaababbbbaaababbaabababaababaabbaabaaaabaaababbbbabbbabababbabababbabbaaabbbabbababbabbaabbaaaaaabbbbaaaaaaaaabbbbbaaaabbbabbabbaabababbbaaaabaaabbbbbbaaaabbbabbbabaaaaaaabaaaabbbbbbbbbaabbaabaaaabbbabbbbabbbbbababaababaabaaabbaaaaabaabaabbbbbaabbbabaabbbbabbababbbbbabaaaabbaaabbbbaababaabbaaabbbabaabbbaabbbbbbbabbbbabaabbbbaaaababaaababaababbaaababbbababbaabbbbbabbbbaabbabbbbbbabbaaababbbbaabbbbbbaabaaabbbaabbbbaabaabbaaaaabbabaaabbababbaabbbbbabaaaabbbababbaabbbababaaabbabbbaabbabaababbabbaaaababbaabaaaabaaabbabbabbabaabbabbbababbbbbababaabaababbbaaaababaabababaaabbabaaabaabbbaaaabababbbbaabaaaabbaaaaaaabaaabaaabbaaabbaaaaabbbaabaabbaaaaaaababaabbbbabaaaababbaabaaabbaaababababbaaaaaaaaaaaaabbaabbaabaaaabbaababaaaabaabaabbabaaaaabaabbbabbbaaaaababababbababababbbaaabaaaaaababbbaabaaababbaababbaabbabbabababbbabbabbabbaabbbabaabaabbbabaabaaabaaababaabbbabaaaabababbaabaaabbabaabaabaaaabababaaabbbababaaaaababaabbabaababaaababbaaaaaaaaabbbabababbabbaabaababbbabbbaaaaaaaabbbbaaabababaababaaabbbbabaabbbaaaaabbaaaababbaaabbababbabbaabaabbbababbabaaabaababaaaaaaabbbabaaaababaabbaabbabababbbabaabbbbbabaaaaaaaaabbbbaabaabbabaaabaabbaaabababbabbaabaaabaababababaaaabbbbaaabaaabaabaabaaaabaaabaaabaabababaaabbbaabbbbbbaaaaabaabbababababaabbbbbbbbbbbbababaaabaaabbabababbabaababababbabbbbbbbbaabbabbaaabbaabaaabbbbabbbbbbbababaababbabbaaaaaaababbbbbaaababbbaaabbbababbabbbbbbbbbbaabbabbababaaabaaabbbabbaaaabbabbaaabaabbabaaaaaaabaabbbabaaababbaaabbbbababbbbbbabbbaabbabaaaababababbbababbaaabbaaabababababaaaabaaabbbabaabbbababaabaabaabbbbbaabbaaaaaabbbaaaabababaaabbbaabbbbaabbababbbbabbbababaaabaaaaabbabbbaaaaaababbbbababbaababababbbbbbaabbbabbbaaababbbaaababababababbaaabbbaabaabaaaabbbabbaaabbbbaabbbbbbbaabaaabaaabaabbaaaabbbababbaaaaabbbabbbabbbabbbabbbbabbbabbbabaaaaabbbbabaabbbabbabbaaabbbbaababaababbbaaabababbbbaabababaaaaabbabbbaaaaaabbaaabbbbaabababbbbabbabbbaaaabbbaaababaabaabaababbaaaaabbbbaaaabbbbbabaaaabbababababaaababaababbabbabaabbaaaaabaabbbbaaaabbabbabbbabbaabaaaaaaaabbbaaaabbababbabbabbabbbabaabbbaaabaabaaaabbbaaabbbbaaaabbbbabaaaaaabbbaabbbabaabbaaaabbbaaaaabaaababbbabbaabbbbbabaaabbababbaaaababbbaaaaaababbabbbaabbbaabaaaabaaaabaaabaaaaaaaaabbbbbaaabaabaaabbabaabbbababbabbbababbababaaabbaaaaaabbabbaababababbabaabaaaabbbbababbabaaabbbaaaabbbabbababbaaababababbabbbaabbabaababbaabaaabaaabbbabaabbaaabbabaaaabbbaaabbbaababbbbabaabababbbababaabbbbaaabaabbbabbabbbaababbabaaababababbabbabbabbaabbabaabbaabbaaabaaabbbababbbabbbaababaababbbabababbabaaaaabbbaabbabababaababbabaababaabbaaaaaabbbbbaabaaababababaabaaababbaabbaabbbaaaabbbabbaabbabaaabbabbabaaaaaaaaababbbbaaaabaababaabababaababaabababbbaaabbaabaaabaaaababbbabaabababababbbabbbabaaaababbbaabaabaabbaaaabbbbabaaabbbaababbbaaaabbbbababaabbabababaaabbbbbbaaabaaaaabbbbabbaabbbabbabababaaaabbbaaabbbababbbbaaaabaabbbaabbababbbabaababababaaaababbbaaabbabbabbbaaabbbaaaabbaabbbbabaaabbaabababbbabbbaababbaabaaaaabbaaaaaaaaabaabaabbabbabaaaaabaaabaaaaaaabababababbbbabbbbbabaabababaaaaaaabbbaabaaabbbbbabaabaaaabbaaaaaaabbbababbbabbababbbaababbbabababbaabbbaaaaabbbbbbbaabbbaaaabaababaabbaababbaabababaabaaaaaabbbbaaaababbabbaabaabbabbbbababaaabbabaababbbabbaabaaaaababababbbabaaaaabbbbaaaababbabbaaabbabaabbaabbbaaaabbaabbaabaabaaaaababbabaabbabababaabaabbbbbbbbbaaaaabbababbbbaaaabaaabbbbabaabbaababaaabbbbbabbaaaaaaaaababaaaaaababbabaaabbaaaaaaaaabbaabbaaababbbaababaabaaababbbbaabababababbbbbabbaabababbbaaabaaaaaaaaaaaaabbbaaababababaaaaabaaabbaaabaaabbbbabbbababbaababbbaabbababbbbbbabbbabaabaaabaabbabbbbabbaaaaabbbabbbaaabbaaaabaaabaaaabbbbabaaaaaaababaabbbbbbaaabaabababaabaababaaaaaabbaaaabbbbaabbabbabbaabbaaaabbbbaaabbabaaabaabbbbbbababaabbaaabbbbbababbabbababaabbabbaaaababbbbbbbabaaaaaabaaaaabababaabaabbbabbbabbaaaababaabbbabaaabbabbbbbabaaababbbbabbaababbababaaaaaababbbbbababbabbaabbbbaaabaaabaabbbbbabaaaabbaaababababababbabaaaabbaaabbbabbbababbabababaabbaaababbabaaaaaabababbbbbabbaababbbabbaaaababbbbbabbbbaabababbababaaaab
42: 9 14 | 10 19: 14 27 | 1 2610: 23 14 | 28 11: "a"11: 42 315: 1 14 | 15 119: 14 1 | 14 1412: 24 14 | 19 116: 15 1 | 14 1431: 14 17 | 1 136: 14 14 | 1 142: 1 24 | 14 40: 8 1113: 14 3 | 1 1215: 1 | 1417: 14 2 | 1 723: 25 1 | 22 1428: 16 14: 1 120: 14 14 | 1 153: 5 14 | 16 127: 1 6 | 14 1814: "b"21: 14 1 | 1 1425: 1 1 | 1 1422: 14 148: 4226: 14 22 | 1 2018: 15 157: 14 5 | 1 2124: 14 1abbbbbabbbaaaababbaabbbbabababbbabbbbbbabaaaabbabbbbaabaabbababbbbaabbbbbabbbbbbaabaaabaaaaaabbbbbbaaaabaababaabababbabaaabbababababaaabbbbbbbaaaabbbbaaabbabaaabbbababbbbaaaaaaaabbababaaababaababababaaaaaabaaabababaaaaabbbababaabbaaaabbaaaababbaababbabbbbabbbbaaaababbbbbbaaaababbaaaaabbaabaaaaababaaaaaabbaaaabbaaaaaaabbaabbaaaaaaabbbabbbaaabbaabaaababaaabbbaaabaababbaabababaaabaabbbbbaabbbaaaaaabbbbbababaaaaabbaaabba
0: 4 1 51: 2 3 | 3 22: 4 4 | 5 53: 4 5 | 5 44: "a"5: "b"ababbbbababaabbbabaaabbbaaaabbb
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();const groups = data.split(/\n{2,}/);const rules = Array.from({ length: 1024 }, () => false);for (const r of groups[0].split(/\n/)) {let [key, variants] = r.split(": ");key = +key;if (variants[0] === '"') {rules[key] = variants[1];} else {rules[key] = variants.split(" | ").map((variantRules) => variantRules.split(" ").map(Number));}}rules[8] = [[42], [42, 8]];rules[11] = [[42, 31],[42, 11, 31],];function test(line, pos, rule) {if (pos >= line.length) {return false;}if (typeof rules[rule] === "string") {return line[pos] === rules[rule] ? [pos + 1] : false;}const possibleNextPositions = [];for (const variants of rules[rule]) {let testPositions = [pos];let good = true;for (const testRule of variants) {testPositions = testPositions.map((testPos) => test(line, testPos, testRule)).filter((res) => res !== false).flat();if (testPositions.length === 0) {good = false;break;}}if (good) {possibleNextPositions.push(...testPositions);}}if (possibleNextPositions.length > 0) {return possibleNextPositions;}return false;}const result = groups[1].split(/\n/).filter((line) => {const matchSizes = test(line, 0, 0);return matchSizes !== false && matchSizes.some(matchLength => matchLength === line.length);}).length;console.log(result);
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();const groups = data.split(/\n{2,}/);const rules = Array.from({ length: 1024 }, () => false);for (const r of groups[0].split(/\n/)) {let [key, variants] = r.split(": ");key = +key;if (variants[0] === '"') {rules[key] = variants[1];} else {rules[key] = variants.split(" | ").map((variantRules) => variantRules.split(" ").map(Number));}}function test(line, pos, rule) {if (typeof rules[rule] === "string") {return line[pos] === rules[rule] ? pos + 1 : false;}for (const variant of rules[rule]) {let testPos = pos;let good = true;for (const testRule of variant) {testPos = test(line, testPos, testRule);if (testPos === false) {good = false;break;}}if (good) {return testPos;}}return false;}const result = groups[1].split(/\n/).filter((line) => test(line, 0, 0) === line.length).length;console.log(result);
7 * (7 + (4 + 5) + 4)2 * 6 + 7 * 35 * 5 + 8 * ((7 * 4 + 7 * 5 * 4) * 8 + 2 + 2 + 6 + 9) + 8 + 28 * 6 * 7 * 5 + ((5 * 7 + 5 + 4 * 3 * 5) * 7 + (3 + 3 + 3 * 2) * 7 + (4 * 3 * 4) + 3) * 97 * 4 * 8 + (2 + 5 * (8 + 9) * 7 * (9 + 8 + 4) + 8)((2 * 9 + 2 * 7 * 3) + 8 * 3 * 5 * 6) + 56 + 5 * 6 * (9 * 9 * 8 + (5 + 5 * 3 + 8 * 3 + 7) * 6 + 6) + 5 + (9 * 8 + (2 + 3 + 2 + 2 * 3 * 9) + 7 * (8 + 3 * 3 + 3 + 5 * 7))(5 * 4 * (5 * 9 + 6 * 8 + 4 * 3)) * 7 * 5 * 7 * (3 + 7 + 3 * 2 + 6) * (3 + 3)((8 * 8 * 9 + 4 * 5 + 2) + 8) + 32 * 6 * 9 + (7 + 2 + 5 + (8 * 3)) * (9 * 6 * 9 * 9) * 59 + 6 + 5 * 24 + (5 * 6 + 6) + (3 * 3 + 8 + 8) + (5 + 4) + (9 * 8 + (6 * 4 * 2) + 5) * 64 + (2 + 6 * 4 + (7 + 9 * 5) * 3 + 6) * 46 * 9((5 + 3) * 8 + 5 + 6) + 64 + 9 * 3 + 8 + 3 * (3 * (8 * 5 + 5 * 7 * 5 + 2) * 3 + 6 * (4 + 6 + 8) + 7)8 + (4 + 2 * 2 * 2 + 5) + 2 + (7 * (7 + 7 + 7 + 7) + 7 + 2) * ((8 + 9 * 6 + 6 * 5) + 6 + 7 * 4 * (3 + 8 * 6 + 5 + 3 * 6) * 7) * 5(4 * 7 + 4 + 6 + (6 * 5) * 6) * 6 * 84 * 3 + 9 + 2 * 4 * 25 + (4 * 3 + 8 + 6 * 7 + 9) * 24 * (3 + 3 + 6 + 4)5 + (9 + (9 + 9 * 8 + 8) * 3) + 6 + 5 * 2(8 * (3 + 2 * 5 + 5 * 4) * 6 * 3) + (2 * 8) * 6 * (3 * 8) + 9 * 45 * 4 + (2 * 7 + 7 * (4 + 3 * 3 + 5) + 9)(4 * 6 * 5 + 5 * 3) * 2 * 5 * 6 * 4 + 96 * 8 + (7 + 4) + 5 * (3 * 9)2 * 7 + 9 * 5 * ((7 + 4 + 2 * 6) * 3 + 5 + 4 + (8 * 9 * 4 + 3 + 7)) + 99 + 7 * (6 * 7 * 9 * 9 + 2) * (2 + 8 + 8) * 3 + 7(8 * 8 * 3 * (9 * 8 + 3 + 2 + 3 * 5) + 4) + 3 + 2 + (8 + 6)8 + 5 + 3 + 8 * ((2 * 8 + 7 + 7 * 4) + 7) + 89 * 3 * 2 + 62 * 9 + (9 * 5) * 5 + 34 * 7 * (7 * 6 * 8 + 8) * 6 * 4 + (8 * 2 * 5 * 4 * 5 * 3)((6 + 9 + 9 * 4 * 2 + 5) + 8 + 6 * 4) * 3 + 7 * 2 + 93 * 7 + 9 + 7 * (5 * 2 * (6 * 9 * 6) + 9) * 43 + 5 + 3 * (6 * (4 * 2 + 9 * 7 * 4) * 7) + 52 + 6 + 2 * 7 + (9 + 2 * 4 * (9 * 3) + 8)(9 * (9 * 7 + 2) * 4 * 7 * (9 * 4)) * ((2 * 9) + 6 + (7 * 7 * 4 * 4) * 4 + 5)(2 + (8 + 8 * 7 * 2) * 7 * 3 * 7 * 6) + 3 + (7 + 6 + 4) + 4 + 4 + 9((6 + 5 + 4 * 7) + 3 + 6) + 2 * 3 + 8 + 2 * 3(4 * (8 * 7 * 7) * (4 * 4 + 9 * 4) + (5 + 4 + 4 * 9 + 9) * (4 * 9 + 2 + 2)) * 2((2 * 3 * 8 * 3) * 4 + 8 * (2 + 6) + 9) + 5 * 7 + 6 + ((5 + 9) + 4)8 + (4 * 8 + 5 + 7 * 9 + 4) * 9 + (6 * 7 * 2 + 7)(2 * 5 * 9 * 2 + 5) + ((2 + 9) + 2 * (2 * 6 + 7)) + 6 + 8 * 54 + (4 * 6) + 7 * 3 + 6 + 3(3 + 4 * 4 + 3 + 4) + 2 * 29 * 3 + 5 * (3 + 5 * 9) + 5 + (6 + 7)6 * ((9 + 9 + 2 + 3 * 9 + 8) + 3 + 7 * (9 * 6 + 8 + 8)) + (8 * (6 * 2 * 6 + 9 * 5) + 8 * (9 * 3 * 4 * 9 + 2 + 9) * (3 * 7 + 2 * 8 * 2 + 9))((9 * 3 * 4 * 9) + 7 * 3 + (6 * 8 * 6 * 5 * 6) + 8 * 3) + 49 * 8 + 5 + 3 + (9 * 8 * 3 + 4)(8 * (9 + 5 * 8) + 9) + 5 + 4 * 7 + 6 * (6 + 7 + 4 * 2 + 8 + 8)(8 * (7 + 3 * 9 * 5 * 6 + 8) * (6 * 9 * 3) * (3 * 8) * 2) + 4 + 7 * 7 * 8 * 8(8 * 9) * 6 * 8((4 * 9 * 5) * 3 * 9) * 7(9 + 4) * (5 * (9 * 4 * 5 * 2 * 2) * 2 * (4 + 2) + 6 + 6) * (8 + 9 + 5 + 6)(3 * 4) * (8 * 3) + 5 * ((9 * 7 * 9 + 2) * 9 + (9 + 8) * 4 * (6 * 5 + 2 + 3 + 8 * 4)) * 4 + 89 * (2 * 5 * 3 + (2 * 9 * 8 * 2 * 2) + (2 * 6 * 2) * 5) * 3 + 59 + 4 * ((4 * 8 + 2 + 7 * 5) * 6)9 + 3 * (5 * 4 + 7 + 9) + (4 * (4 * 8 * 8) * 7) + 9(2 * 5 * 3 + 7) * 6 + 3 * 8 + (7 + 2 * 2) * 85 * 7 * (6 * 4 + 7 + 3 + 5 * 3) * (8 + 8 + (5 * 8 * 3 * 7 + 3) * 3 + (3 + 9 * 5) + 7) + (9 * (3 * 9 + 3 * 3) * 6 * 7 * 3) * 9(6 * 2 + (9 * 7 + 6 + 8 + 7 + 6) * 8 * 8 + 2) + 34 + ((8 * 8 + 6 + 6) + (5 * 9 * 5 + 5) + (6 + 3 * 4) * 4)4 + (9 * 4 + 6 + 7 + 5) * 2 * (4 + 7)7 + 8 * 3 + (8 * (9 + 9 * 9 + 9 * 8 + 4)) + (4 + 9) * ((9 * 7) + 2)4 * 4(4 * (9 * 9) * 2 * 8 * 6) + 4 * (7 + 4 * 3 * 9)(9 * 6) * 5 + ((2 + 4 * 2 * 5) * 5) * 2 + 58 * (7 * 4 * 6 + (2 + 6 + 9 + 7) * (4 + 7))3 * 2 + ((8 * 5 + 8 * 4 * 7) * 8 + (7 + 5 * 6 * 5 + 4 * 5) + (8 + 7 + 2 + 3 * 2) + 2) + ((6 + 3 * 3) * 2 + (2 + 2 + 5 + 8 + 6) + 6 + 9) * 9 * 28 * (4 + (7 + 5 * 9)) + 75 * 5 + 7 + 2 * (6 * 3)(4 * (9 + 6 + 5)) * 4 * 9 * 8 + 9 + 72 * (4 * 3 * 6)(2 * 2 + 2 + 7 * 3 + 3) + (3 + (5 + 2 * 2 + 8 * 5))(9 + 5) + 3 + 3 * 43 + 4 + 7 + (2 + 9 * 4 * 2) + 79 + 3 + 2 + (7 + (6 + 4 * 3) + 8 * 2 + 7 * 3)((4 * 7 + 2 + 8 * 6 + 9) * 8) + 2 + 2 * 3 + (8 * 8 * 6 + 9)(6 + 7 * 3) * 2 + 8 + (7 * 6 + 3)3 + 5 + 7 * ((2 + 8 * 5 + 4 * 4 + 9) * 4 + (8 * 3 + 8 + 5 * 2) + (9 * 8 * 8 + 9 * 5) * (3 * 3 * 3 * 4 + 7))(3 * 5 * (9 + 3 + 7 + 8 + 8 * 8) + (6 + 5 + 7 + 8 * 5) * 2 + 9) + 96 * 8 + 8 + (4 * (9 * 9) * 6) * 59 * 8 * 3 + (7 * 2 + 6)2 * (3 * 9 * 5) * (2 + 4 + (3 * 2 * 4 * 9 * 9)) + 9 * ((3 * 6 * 4 * 6 + 5) + (9 + 2 * 5 + 5 + 5) + 9) + 53 * 8 + (6 * 3 * 9 + 3 * 2) + 4 * (3 * 3 + 2 + 7 + (2 + 6 + 8 * 7 * 9)) * 54 + (2 + 9 * 9 * 2 * 2) + 3 * 4 * 8((6 * 6 * 5) + 4) + 9 + (6 * 3 * 4 + 6 * (6 * 6 * 4))(6 * 7 * 9) * 4 + 8 * 6 * ((3 + 7 * 2 * 9) + 2)6 + 5 * 2 * 6 * 2(2 + 6 + 2 * 6 + 8) * 3 + (5 + 7 * 5) + 2 + 9(2 + 5) * (4 + 3 + 2 * 5)((7 * 2 + 9 + 8 * 2) + 3 + 3 + 7 * 3) * 3 + 8 * 3 * 29 * 9 * 5 + 7 * ((6 + 8 + 5 * 4) + 6)7 * 2 + 3 * (2 * 2) * 87 * 3 + 27 * 4 + 7 + (3 + (9 + 3 * 4 + 5 + 8 * 9))3 * 8 + 6 + 5 * (9 + 8 * 9 * 3 * 8) * 53 * (2 * 6 * (7 * 2 + 4 * 9) + (3 + 9 * 9 + 4) + 7) + 7 + (4 + (3 * 8 + 7 + 6 + 5)) * 6 + 5(9 + 4) * 8 + 6 * 8 * 7 + 76 + 6 + (5 + 7 + 5) + 2 * 8 * 92 * (2 + 4 * (4 + 7 + 4 * 8 * 7 * 3)) + ((5 + 4 * 9) * 4) * 4 + 5 + 52 * 6 * 7 * (5 * 7 * (8 * 8 + 6) + 7 * (3 + 4 + 2 * 9))((9 * 6 + 4 + 8 + 7 * 6) + 6) + 4 * 28 + (8 + (5 * 6 + 8 * 2 * 5 + 3) + 5) + 7 * 2 * (4 + 6 + 3 + 7) + 66 * 6 + 4 * 5 * (2 * (3 + 9 * 3 + 6) + (3 + 8 + 4 + 3 * 3 * 7) + 4 + (5 * 5 + 2 * 8 + 7))(9 * 8 + 6 * 8 * 2) * 4 * 3 + 9 + 3 * (2 + 3)6 * 2 * 92 * 4 * 89 + (5 + 3 * (5 * 6 * 8 * 7) * (7 * 3 * 7 + 2 * 2 + 7) + 9 * 2) * 67 * 3 + 4 * (4 * 2 * (3 + 8 + 5 * 6 + 2 + 6) * (5 + 7) + (3 + 5 * 4 + 2 + 2 + 6) * 6) * (8 + 5 * 5 + 4 * 6)5 + (4 + 9)8 * (3 + 9 * 5) + 3 + 7 * 3(2 + 5 + 7 * 8 + 4) * (6 + 7) + 5 * 6 * 2((9 + 8 + 5 * 8 * 4 + 7) * 6 + 9) * 3 * 74 * ((6 + 6 + 4 * 5 * 7) * 6 * 2 + 5 + 3 + 7) * 7 + 3 * 6 + 36 * 7 * 4 * 7 * 32 + 4 * 5 * 4 + (9 + (9 * 7) + 4 * 6) * 3(2 + 9 + 7 * 3 * (5 + 5 * 7 + 3) * 4) * 6 * 2 * 9(6 * 2 * 2 + 3 * 7) * (4 + 8 * 6 + 5 + 2) + 4 + 65 + (4 + 6 + (9 * 5 + 6 + 5 * 2) + 4) + 4 * 83 + 6 + ((4 * 4 * 6 * 7 + 6) * 5 * 3 * 7) * (3 * 8 + 6 + 8 + 5) + 83 * 8 + (4 + (9 * 5 * 3 * 9 + 7 + 5)) + 24 * 9 * 2 * 4 + 4 * 8(6 + 2 * (5 * 5 + 2 * 3) * 5) * 7 + (2 + 2 + 2)7 * (3 + 3 + 9) * 78 * 7 + (4 + 9 + 6 * 6 + 3) * (2 * 2 * (9 * 2 * 6))8 + (6 + 2 + 9 + 2) + (5 + 7) * (6 + (8 * 6 + 9 + 8 * 6) + 7 + (2 + 2 + 9 * 3) * 4 + 4) * ((6 * 3 * 3 * 6 * 2) * (5 * 2 + 4) + (4 * 4 + 7 + 6 + 4 * 3) * 9) + 9((5 + 2 + 6 * 3 * 7 * 2) * 7 * 3 * (8 * 4 * 2 * 6 * 5) * 8 * 7) + 8 * 8 * 9 * 64 + 9 + (9 + 8 * 9 + 5 + 3) * 7 + 6 * 97 + 9 * (5 * 5 + 9 * 2 * 3 * 5) * 5 * 9((3 * 9 * 2 + 2 * 4) * 7) * 7 * 93 * 5 + 5 + (3 * 9 * 7 * 6 + 8 + (4 * 6 + 7 + 8 * 5)) + 8 * 49 * 9 + 5 + 2(7 * 8 + 6 + 5) + 7(5 * 2 + 2 + 7) * 2 * (8 + 4 + 9 * 6) * 2 * (8 + 6 * 3 * 3 + 9)6 * 2 + 5 + (8 + 8 * 6 + 9)3 + (2 + 7) + (4 + 4 * 4) + 5 * (9 * 4 * 4 * 3 + 5 + 8) * (5 * (8 * 9 + 9 * 7 * 4) + 3 * 9 * 2)6 * 42 + 7 + 5 * (8 + 2 * 2 * 6 * 6 + (5 * 6 + 9 + 6 * 6))7 * ((8 + 9) + (7 * 8 * 5 * 3 * 2) + 4) + 7 * 62 + (8 + 3 * 6 * (5 * 9 + 9 + 8 * 8 * 2) * 5 + 5) + 5 + 3((5 + 5 + 2 * 8) + 6 + (3 * 9 * 3 * 9 + 8)) + ((2 + 4 + 7 * 9) + 9 * 5 + 2 + 9) * 5 * 5 + (9 + 4) * 96 + (7 + 7 + 4 * 5 + 5) * (3 + (5 * 5 + 4) + (6 * 2 * 9 * 3 + 4)) * 42 + 2 * (8 * 6 + 5 * 9 + 7 * 3) * 2(2 * 7 * 2 * 2) * 4 * 4(3 + 5 * (4 + 2 * 7 * 4 + 4 + 9)) + 7 + 7 * 8 + 2 * 5(7 + 4 * 6 + 3 + (7 + 5 + 3 + 2 * 4) + (6 + 9)) + 6 * 8 * 7 + 4 * 94 + 2 + 8 * 3 + 5 + (6 * 5 + 7)(6 + 9 + 9 + 8 * 3 + 2) + 8 * 75 * 9 + 7 + 5 * (2 * (9 * 5 * 2 * 9 + 9) * 5 * (7 * 5 * 2) * 9 * 6) + 4(7 + 2) + 34 * 7 * 3 * (8 * 7 + 4) + 6 + (2 + 7 * 2 + (3 * 4 + 4 + 2 + 2) * 4)8 + (9 * 9 + (9 * 9)) * 9 * 9 + 6 + 9(2 * 8 * (2 * 6 + 2) * 9) * 3 + (4 * (9 + 6 * 9 + 6)) * 9 + 2 + 38 + (2 + 4 + 5 + 7 * 2) * 7 * 5 + 8 + 94 + 3 + (6 + (3 + 5 + 2 + 2 * 4) + (6 * 8 * 6 * 7 + 7 + 2) * 9 * 7 * 7)((6 * 4 * 7) + 5 + 8 + 8 + 6) * 6 + 9 + 34 + 4 + (5 + 7 * 9 + 9 * (4 * 4 * 4 + 6 * 2 * 5))5 + (9 * 3 + 2 + 9 + (3 + 9 * 4 * 7)) * (7 + 8) * 8 + 3 * (6 + 2 * 4 + 2 * 5)7 + (9 * 4 * 3 * 4 + (7 + 3 * 4 + 8 * 5)) + 8 + 8 + 63 + 3 * 7 + (5 * 8) + (6 * (8 * 7)) + 76 * (2 * 9 * 9 + 6 + 3) * (5 * 9 * 7 + 4 * 6 + 7) + (4 + 4 * (4 * 3 + 5))2 + 9 + 7 + (2 + 8 + 8) + 5 + 94 * 6 * (3 + 8 + 2 * 4) + 7 + 5 + (3 + 9 + 3 + 3 * 5)8 + ((5 + 5) + 2 + 3)(9 + 2 + 4 + 7) + (4 * 7 + 3 + 4) * 9 + 68 + 5 * (9 + 9 * 4) * 6 * 4 + (8 * 2 * 3 + 7 * 7)8 + (2 + (3 * 5 + 7 * 3) * 8 * 9 * 2) * (6 + 5 * 2 + 9) + 3 * 8 + 73 * (5 * 6 + 3 * 7) + 6 + 86 + (5 * 9 + (4 + 9 + 9) * 6 * (8 + 5 * 7) * 5)4 + (3 + 8) + 8 * 9 * (3 * (6 * 9 + 7 * 9 + 8 * 5)) + 6(2 + 5) * 4 * 6 + ((2 * 4) * (9 * 6 + 8) + 7) * 9 * 67 * 44 * 8 * 9 + (6 * 4 * 6 + 5 + 7) * 3 * (4 * 5 + 9 + 6 * 5)6 + (5 + 4 * 3 + 8 * 3 * (9 * 4 + 7 * 2)) * 6 + 5 + 54 + 8 * 7 * 2 + 2((9 * 6 + 2 + 8 * 2 + 9) + 7 + 3 * 9 * 6 + 9) * 45 + 7 * 8 + (2 * 3 * (3 + 3) + 8 + 3)3 * (8 * 2 + 3 + 3 + 6 + 2)8 + 7 * 6 * 2 * (5 + 5 + 4) * 6(3 * (8 * 2 * 9 * 8) * 6) + 3 * ((9 + 7 * 7 * 9 * 2) + 2 + 2 + 4 + 6 + 9) * 9 * (9 * 6 + 7 + 3 * 8) + (4 + (4 * 7 + 5))3 * ((9 + 2 + 6) * 3 * 9 + 9 * (8 + 4))((4 * 2) * (6 * 7 + 6 + 5 * 2 + 2) + 6) * 9 + (5 * 6 * 8 * 5 * (2 + 6 * 9 * 2) + 6) + 7 * 6 + (8 * 5 + 9 * (2 + 6) + 8)(6 * (3 * 9 + 5 + 7 * 4) + (5 + 8 * 7 * 5 * 8) * 6 + 2) + 2 + 2 + 6 * 5 + (3 + 6 + 3 + 9 * 9 + 8)6 * 4 * (4 + (9 + 9 * 3 * 3)) + 5 + 77 * (5 * 8 + 3) * 8 + 66 + 5 + 4 + (2 * (6 * 3 * 5 + 8 + 6) * 7 + 9 * 3) + (2 * 8 * 2 + 7)7 + 9 * 8 * 8 * (2 + (5 * 7 + 2) + 7)7 * (2 + 4 + 3 + 7 + (3 + 5) + (7 * 5 * 7 * 9 * 4)) + 28 * 2 * (8 * 8 + (3 + 2 * 9 + 6) * 3 + 8 + (2 + 2)) * (9 * 4 + (4 + 8 + 5 * 2 + 8 * 6) + 2 + 9 * 6) * 7 * (6 + 8 + (9 * 5 + 3))3 * (4 * 8 * 3 + 3 * 6)7 * 7 * (8 + 9 * 4 * 7) + 6 + 3 * 87 + (5 * (7 * 3 * 5))(4 + 3 + 9) * 9 + 7 * ((7 * 8 + 9 * 3) + 8)6 + 8 + (3 + 7 + 7 * 2 + 9) * 5 * 9((7 + 3 + 7) + 9 + 9 * 6) + 6 + ((3 + 6 + 8 * 6 * 7) * 2 + (7 * 5 + 8 * 8 * 7 + 7))(6 * 4 + 6) * 9 * 2 * 8 + 28 + 6 + 98 + 9 + 9 + 9 + (3 + 3 + 5 + 9 + 3 * 9)(9 + 4 + (7 + 6 * 3 * 9 + 2 * 2) * 7 * 8 * 7) * 3 + 4 + 73 + 3 * 6 + (5 + 9) + (2 * 9 * 7 * 3)3 * 6 + 8 * 2 + 38 * (2 + (2 * 2 * 9 * 4 * 8 + 4) * 2 * 2) * 3 * 5(3 + 9 + 4 * 5 + (7 * 6 * 6) * 9) + ((7 * 9) * 2 + 3 + 9 + 4) + 5 + (2 * 5 * 2 * 5) * 6 + 74 + (6 + 3 * 5 * 7) + 9 * 2 * (3 + 2 * 4 * 2 + (2 * 8 * 9 + 4))4 + 3 * (8 + 4)7 * 69 + 7 * (9 * 4 + 4 + 9 + 5 * 2)(7 * 7 + 8) + 3 * 5 * 3(6 + 7 * 2 + 5) * (4 + 5 * 6 * 3 * (4 + 4 * 5 * 2 + 6 * 2) + 4) + 9 * 7(8 + 7 + 5 + 8) + 2 * (7 + 4 * 8 + (2 + 2 + 5 + 4 * 5 + 4)) + 6 + (3 * 5) + 33 * 7 * (9 * (2 * 4 * 3 * 8) + 5 * 4 * 5 + 8) * 4 * 47 + 4 + (9 * 3 + 4 * 5 + 4)((5 * 5 * 4) + 9) * (3 * 6 * 6 * (9 + 8 + 7 + 4 * 3)) + 6(8 + 9 * 8 * 7 * 5 * 6) * 67 + 2 + 5 * (8 * 7) * 9 * 43 * 4 * 6 * 4 * 6 + 69 * 4 * 7 * 8 + (7 + 4 * (2 + 5) + (8 * 9 * 6 + 4 + 8) * 7)(7 + 6 * 6 * 7 * 3) * (4 * 7 * 6) + 8 + 9 + 77 + 9 * (4 * 9 * 2 * (7 * 6 * 7) + 3) + ((6 * 8 * 3 * 6 * 9) * 4 * 3 + 2 * (6 + 3))7 + (2 + (3 + 4 + 5 + 6 * 7 * 2) + 7 + 3 * (2 * 6 + 3 + 9 * 7 * 9))(6 * 5 + 8) + (4 * (8 + 9 + 6) * (7 + 6)) * 3 + 93 * 8 * (3 + 3 + 5) * 82 * (6 + 3 * (6 + 6 * 2) + 8 * (4 * 4)) + 9 + (2 * 3 * 8 + 2) * 7 + 64 * 4 + 5 * 5 * 5 * 62 * 8 + (5 + 8 + 6)5 * (6 * 7 * (6 + 8 + 9) * 8 + (3 + 8 + 2 + 2 + 7)) * 4 + 3 * 5((4 + 9 + 3 * 3 + 9 * 3) * 2 + 2 + (5 + 6) + 2) + (3 * 2)6 + 2 * (7 * (2 * 6 * 7) + 8) * 2 * 3 * 32 * ((8 + 2) + 5 + 3 + 4) * 7 * 7 * (3 + 6 * 7)(9 + 5 + 6 * 5 + (5 * 9 * 2 * 4 + 9) + (8 + 3 * 2)) + 7(4 + 2 + (3 + 7 + 3 * 3)) * 9 * (9 * 2 * 6 * 4 * 4 * (4 * 9))4 + (9 + 6 * 8 + (6 + 6 * 2) + 3) * (5 * (2 * 3 * 5 * 5 * 5) * 5 * 7) + (5 * 6)5 * 4 + 4 * 9(3 + 7 * 7) * ((2 * 4 + 8 + 2) * (9 + 7 + 7 * 8) * 4 + (8 + 4 + 2 * 4 * 5) + 8 + 6) + (9 + 8 * 6 + 4 + 2 + 5) * 6(4 + 7 * 3 + 7) + (5 * 9) * 6 + 75 * 3 * (6 * 6 * 5 + (5 * 8)) * 8((3 * 7) * 5 * 3) + 3 * 3 + 6(8 + 8 + 3) * (7 * 9 * (6 * 6) + 7 * 5 + 6) + 63 * (3 * 7) * 5 * ((4 + 5) * 4 + (2 * 5 * 7 * 4 * 3) + 5)(3 + 6 + 4 + 8) + 9 + (7 * 5 * 7 * 3 + 5 * 6)6 * (3 + (3 * 8 * 6 + 3 + 5 * 9))(5 * 6) * 4 * 4 + (3 + 4) * 77 + 2 * 95 + ((4 + 7 + 5 * 4 * 5) + 5 * 3 + 8 + (3 + 6 * 6 + 4))3 * 7 + (3 + 4 * 9 + (6 * 5 * 4) + 7)7 + (8 + 7 + 8 + 5 * 6) * 3 * 38 + ((8 + 3 + 9) * (3 * 4 + 7 * 4 + 3)) * 9 + 9 + 86 + (7 * 7 + 8 + 2 * 4) * 6 * (8 + 8 * 7 + 5 + 5 * 6) * 2 + 94 * 2 + 4 * (8 + 6 * (3 * 9 * 6) * 8 * 8 + 7) * 5((6 * 2 + 2 + 2 * 8) + 3 + 4 + 9 * 9 + 6) * 8 + 3(4 + 2 * 5 * 3 + 5) * 75 + 8 * (2 + 9 * 5 + 4 + (3 + 4 * 6) + 3) + 4 + 74 + 5 * 3 * (9 * 7)4 + (2 + (4 * 9 * 6) + 7 * 9 * 9 + 2) * (2 + 8 * (4 + 4 * 5 + 4 * 2)) * 3((6 + 7 + 2 * 7 * 3) * 7 + (7 * 7 + 5 + 3 + 6) + 2) + (4 * 5 + 3 + (7 * 9 * 2 + 8 * 9) * 9) + 5 * 76 + 2 + (6 * 9) + 33 + 3 + ((7 * 6 + 8) * (6 + 5 * 5 + 8) + 5 + (7 + 9) + 4 + 4)6 * 7 * 8 + (5 * 5 + 9 * 7 * 8 + 4) + 4(6 + 4 * 8 * 6) * (4 * 6) + 7 + 8 * 8 * (9 + 4 + 4 * 6 + 7)3 * 5 * (9 + 3) + 9 * 4 + 6(5 + 4 + 5 + 6) * (5 + 5 * (4 * 7 * 4 + 7) * 2 + 3 + 8) + 96 * 6 + (9 * 2 * (2 + 8 + 3 + 7 * 2) * (6 + 2 * 2))7 + 4 * (9 * 4 * 9 * 9) + 9 + (5 + 8 * (6 * 7 * 7 + 2 * 5 + 8)) * 2((8 * 2) * 8 + 8) * 8 + 38 + 8 + ((6 * 2 + 5) + (3 + 9 * 3 * 6)) * 6 * 83 + (2 * 3 * 2 * 6 + 3) + 3(4 + (7 * 9 + 9 + 2) + (6 + 4 * 8) + 2) + 6 * (7 + 8 + 6 + 2 * 3 + 8)5 * 6 + (3 * (7 + 7 * 6)) * 6 * 7(6 + 6 + 6 * 4) * 3 + 3 + ((4 + 8 + 8 + 2 + 3) + 7 * 4)6 * 8 * (5 * 8 + 9 + 9 + 9 + 4) * 2 * 2 + 99 + 8 + (6 * 7 + 4 * 6)4 * 9 + (3 + (7 + 8 + 5) + 9 * 4)2 + (4 + 7) + 3 * 32 + 4 + ((5 * 7 + 6 + 7 * 3) + 7 * (8 + 6 * 4 + 7 + 5) + 3 * 4 + 9) * 8 + 6 * 75 + 2 * (5 * 3 * 7 + (3 + 7) + (6 + 4))(3 * 9 * 7) + ((6 + 7) + (5 + 2 * 4 * 7 * 3)) * 8 + 89 * 5 * 4 * (5 + 4 + 5) + 2(6 * 9) + ((7 + 2 * 6 + 5 * 5 + 5) * 4 + 7) + (5 + 7 + 5 + 3 * 9 * 5)(3 * 3 * 2 * 6 + (6 + 6 * 4 * 7 * 5) + 5) + 8 + 3 + 5 * 5((9 * 3) * (5 + 9 + 2) + 5) + 4 + 3 + (8 + 7) + 7 + 9(4 * 9 * 2 * (9 * 9 * 2 * 6 + 4) * (8 + 9 * 4 * 6 * 3) * (3 + 6 + 4)) * 5 * (2 * 2 * 2 * 7 + 5) + 2 + 5(6 + 4 * 9 * 6 + (5 + 3 + 9 * 6)) + 5 * 33 * (8 + 7 * 8 + 6 * 7) * (5 + 2 + 6 + (2 + 7 + 5)) + 3 * 54 + 8 * 6 * (8 * 9) + 9 + (3 + 9 + 2 + 2 + 3 * 4)5 + (6 + 5 + 2 + 8) + 6 + 4 * 69 + ((7 * 9 * 7 * 9 * 5) * 8) * 93 + 6 + (9 + 3 + 7 + 7 * 8) + 5 + 7 * (8 * 5 * 8 * (4 * 8 * 8 * 9 * 9 * 7))5 * 2 * 4 + 7 + 73 * (8 * (4 * 8) + (5 * 5 * 8 + 9 * 9 * 3) + 9 + 6 * 5) * (4 * (5 + 7 * 6 + 6 * 3) + 6 + 3) + 4 * 4 + (6 + 3 * 7 + 3)4 + 4 + 2 + 3 * ((5 * 6 * 7) * 8 + 6 * (9 * 8 * 3 + 8 * 3 + 6) * 8)8 + ((5 + 2 + 9 * 3 + 8) + 3 * (6 + 9 * 5 + 6) * 8 + 2)(8 * 6 + 3 + 5) * 4 + 4 * 7 + (3 * 5) + 63 + (8 + (4 + 9) * (3 + 5 + 9 * 2 + 6) + 9 + 8) * 4 + 6 * 92 + 3 + 8 + ((8 * 6 * 5 * 2) + 9 * (4 + 5 + 6 + 7 * 3 * 7) + 7 * 3) * 2(3 * 6 + 3) + 6 * 5 + 7 + 2 + 46 + (5 + 6 * 2 + 3) * 74 + (9 + (6 * 7) * 3 * 9 + 6)9 * 4 * 6 * 5 + (7 * 6 * 9 * (8 * 3 * 6 * 4 + 2 + 7) * (8 * 5 + 3 * 6 + 3))(9 + (4 * 3 + 8 + 2 * 3 * 7) + 7 + (6 * 9 + 9 + 7 * 5 * 6) + 3 + 9) * 6 * 3 + 2 + 75 * 2 * 9 + (4 * 8 * 5 + (2 + 3 + 3 + 8 + 6) + 8) + 3 + 44 + 5 * (5 + 4 * 9 * (9 + 6 * 4)) + 3 + 6 + 49 + 4 * (5 * 8 + (8 + 7 + 4 * 8 + 2)) + 5 + 2 * 62 * 8 + (4 * (2 + 2 * 3 + 2 + 2) * (4 + 9 + 5 * 7) * 2 * (5 + 7)) + ((8 * 8) * (2 + 9 + 6 + 8 * 6)) + 6 + (7 + (5 + 2 + 9 * 6) + 7 * 7 * 6 * 5)4 * 8 + 8 + (5 * 3 + 2 + 2 * 7 * 3)7 * 5 + 2 * (8 * 7 * 6 + (8 * 7) * 4 + 2) * 72 + 6 * ((5 + 7 + 2 + 7 + 8) * 9 + (8 + 4) * 2)(2 + 7 * 3 * (9 * 8 * 3 * 2 + 7 * 2) * 5 * 9) * 7 * 9 * 5 * 4 + 86 * 6 * 4 + (9 * 7 * (2 * 5 * 4 + 8 + 2) + 4 + 3) * 32 + 7 * 4 * (4 * (9 + 5 * 6)) + 76 * (2 * 3 * 9 * 2 * 4 + (7 + 7 + 5 * 6 * 3)) * 3 * (8 + 6) + (8 * 9 * (5 + 6 + 4 + 3 * 3 * 4) * 2) * 5(8 + (8 + 6)) * 6 + 29 + ((8 + 5 * 3 * 2) + 4 * 6) + 8 + 4 * 5 + 34 * 3 + 4 + (6 * 8 + (6 + 3 * 9) + 8 + (3 + 6 * 3) + (7 * 8 + 9)) * 4 + 77 + (8 + 6) + 8 + 6 * 9(5 + (4 + 6) + 8 * 9 + (8 * 6 + 7 * 4 + 2) * 8) * 6 * 94 * 7 + (7 * 8 + 6 * 7 * 7) * (6 + 7 + 8 + (2 * 7 * 2 * 3 * 3))((3 + 7 + 3 + 6 + 6 * 4) * (3 * 6 * 7 + 5 + 3 + 3) + 7 + 2 * (4 * 4 * 6 + 5) * 6) + 8((2 * 3) + (2 + 2 + 3) + (2 + 5 * 4 * 4 * 2 + 5) * 4 * 6 + 2) + 5 + 5 + 58 * (5 * 9 + 5 + 4 + 3) * ((4 * 5 + 5 * 8 + 9 + 2) * (7 + 4 * 4 + 6 + 8)) + 6 + 9(3 * 3 + 3 + (4 * 9) * 5) + ((9 + 3 * 6 * 9 * 4 * 5) * 8 + 3 * 5 * 3 + 7) + 4 * 3(2 * 6 * 4 * 3 * 7) * (2 + (8 + 5 + 4 + 2 * 8) + (2 * 8 + 9 * 6 + 2 + 8) + 9 + 2 + 2) * 5 * (5 + 3 + 4)9 * (8 + 6) + 75 + (8 + (2 + 2 + 3 * 2 + 8 + 3)) * 9 + (8 * 8 * 2) * (3 + 8 + 6 * 7 * 9 + 2) * (4 + 7 * 9 + 8)((9 * 9 * 9) + (7 * 7 * 6)) + (5 * (8 * 4 * 4) + 3 + 2 + 5 + 6) + (5 * 9 * 8 + 2 * 2 * 5) + 8 * (7 * 2 + 8 + 3 * 3 + 3)(4 * 8 * 5 * 7 * 6) + (2 + 2 * (5 * 7 + 8 * 2 * 3 + 5) * 9 * 9 * 5) * 2 + 4 * 6 + 9(4 * 6) * (5 * 2 + (9 + 5)) + 7 + 8 * 2 * 3((2 * 3 * 6 * 4 * 6 * 2) + 4 + 5 + (8 + 8 + 5) + 6 + (7 * 6 + 9 + 3 * 6)) + 2 * 95 + (2 + 2 * 5 * (3 + 6 * 6 * 2) * 5 * (7 + 4 + 3 * 2)) + 6 * 9 * 8 * (7 * 6 * 8 + (9 * 2 + 3 + 2 * 6))(7 * 9 * 3 * 4 * 8) + 7 * 3 * (8 * 4 * (7 + 7 * 4 + 8 * 3) + (7 + 6 * 4) * 9 * 7)9 * (9 + 3 * (7 + 4 * 9) + (5 + 9 * 2 + 5)) * (5 + 8 * 8)8 * (6 + (7 + 8) + 8 * 4 + 7) + 72 + ((6 * 8 + 5 + 2 + 8) * 5 + 8) + 9(6 * 2 + 7 * 8 + 4 + 7) + 5 * 7 + 7 * 32 * 4 * 4 + (4 * 6 + (9 * 5 * 5 * 5 + 8) * 6)4 * 7 * 9 + ((2 + 3) * 2 + 2 + 6 * (7 * 2)) + 72 + (9 * 6 + (3 * 3) + 3 + 4) * 2 * (8 + 7 * 6 + 4 + 5 * 3) + 8 * 27 * 7 * (4 * 6 * 5) + 8 + (2 * 2 + 4 + 2 * 8) * 38 * 6 + ((6 + 2 + 3 * 4) + 8)5 + (4 + 9 * 3) * 4 * 9 + ((8 + 3 + 2 * 5 * 9 + 9) * 5 + 3 + (8 + 9) * 4 + 6) + 88 * 6 * 3 * (3 + 2 * 5) + (6 + 8 * 2 + 4) * 8(2 * (2 * 6 + 3) * 6 + 5 + 7) + 9 + 47 * 2 * 3 * (3 + (7 + 2) + 4 * 5)2 + 9 * 8 + (4 + 4 + 6 * 2) * (7 * 4) + 8(5 * 4 + 6) + (2 + 5 * 3) * 7 + 5 * 2 + 57 * 5 + 9 * 8 * 3 + (5 + 3)9 * (3 * 8 + 6 * 4 * (3 + 6 * 7 + 5)) + 8 * 36 * 4 * 9 * 6 + ((5 + 4) * (3 + 8 + 5 + 6))(8 + 8) + 2 + 7 + 5 + 99 * 3 + 3 + (2 * 4 * (9 + 8 * 2 + 9 + 3) + 2 + 9 * 9)4 * (2 * 3 + 9 + (2 + 3) * (6 + 2)) * 2 + 5 + (4 + 2 * 5 + 8 + (8 * 5 * 4) * 2) + 53 * 5 + 8 + ((9 + 4 + 8 + 4 * 5 + 7) + 6)4 * (2 + 3) + (8 * 6 + 6 + 7 + (9 * 3 * 3 * 8 * 3)) + 5 * 5 * (2 + 7 * (6 + 5 * 6 + 3 + 4) + 5 + 9 + 2)(9 * 4 + 2 + 6 + (4 + 8 * 8 + 9 + 3 * 5) + (8 * 8 * 4)) + ((8 + 2 * 7 + 9 * 4 * 7) * 7 + 6 + 3 * 2 + 8) * 2 * 9 * (8 + (6 + 8 + 8 * 5 * 9 * 8)) * 56 + 2 + (9 * 6 * 8) + (3 * 2 + (6 * 3 + 2 * 9))5 * 3 * 3 * 6 * (2 * 5 * 9 * 8) * 92 * 8 + 2 * 3 + (6 * 4 * 3 + (6 + 3 * 7 + 2 * 8) * 4)9 * (7 * 4 * 4 * 5 + 9 + 5) * 4 + 2 * (2 + 8)7 * 5 + 6 + 4 + 5 + 3(9 + 4 + 7 + 2) * 4 + 2 * 4 + (3 + 6 * 9 * (2 + 6 + 2 + 8) + 3 + 9) * 77 * 9 + (7 + 3) + 8 * (4 + 2 + 5) + 78 + 4 + (3 * 9 + 9 + (8 + 5 + 4 + 6 * 4) * 4 + 9)(4 + 6 * (3 + 9 * 6 * 5 * 9 + 4) * (2 * 9 * 2 * 7) * (7 * 6 + 9 + 3)) + 6 * (6 + (7 * 8 * 3 + 4 * 6))((7 * 9 * 4 * 4) * 8 * 7 + 8 + 9 + 5) + 97 * ((7 * 8 * 3) * 2 * (8 * 7 + 2) + (3 + 2 * 6 * 9) * 5 * 8) * 4(6 * 9) + (7 + 6 + (5 + 9 + 6 + 7 + 4 * 6))3 * 6 + 8 + 7 + (6 + (2 + 9 + 4 + 3))(9 * 5 + 6 * 5 * 9 * (5 + 2 * 2 + 3)) * (7 + 3 + 2 + 4 * 3) + (6 * 3 * 7 + (3 + 6) * 3) * (6 + 7) + 75 + 3 + 6 * ((9 + 6 + 8 + 6 * 5) + 6 * 6 + 5 + 3 + (5 * 9))9 + (5 + (8 * 8 * 8 * 5 + 8 * 9) * 5) * 7 + 8(7 + 2 * 7 * 6) + 6 + 9 + 77 + 8 + ((5 * 6 * 2) * (4 * 5 * 7 + 8 * 8)) * (9 * 5 + 8 * (5 * 3 * 3 * 5 + 3 * 3) * 9 * 9) * 9 * 6((8 * 5 + 6 * 6) + 2 + (4 + 2 * 2 * 9 * 7 * 7)) * (7 + 9) + (9 + 3 + 7 * 8 + 4) * 5
5 + (8 * 3 + 9 + 3 * 4 * 3)
let data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();let lines = data.split(/\n/);const re = /\([^()]+\)/;function calculate(line) {const parts = line.split(" ");let res = +parts[0];for (let i = 1; i < parts.length; i += 2) {switch (parts[i]) {case "+":res += +parts[i + 1];break;case "*":res *= +parts[i + 1];break;}}return res;}const re2 = /\d+\s\+\s\d+/;function calculate2(line) {let matches;while ((matches = re2.exec(line))) {const partialValue = calculate(matches[0]);line = line.substr(0, matches.index) + partialValue + line.substr(matches.index + matches[0].length);}return calculate(line);}let result = 0;for (let line of lines) {let matches;while ((matches = re.exec(line))) {const partialValue = calculate2(matches[0].substr(1, matches[0].length - 2));line = line.substr(0, matches.index) + partialValue + line.substr(matches.index + matches[0].length);}result += calculate2(line);}console.log(result);
let data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();let lines = data.split(/\n/);const re = /\([^()]+\)/;function calculate(line) {const parts = line.split(" ");let res = +parts[0];for (let i = 1; i < parts.length; i += 2) {switch (parts[i]) {case "+":res += +parts[i + 1];break;case "*":res *= +parts[i + 1];break;}}return res;}let result = 0;for (let line of lines) {let matches;while ((matches = re.exec(line))) {const partialValue = calculate(matches[0].substr(1, matches[0].length - 2));line = line.substr(0, matches.index) + partialValue + line.substr(matches.index + matches[0].length);}result += calculate(line);}console.log(result);
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();const lines = data.split(/\n/);const map = lines.map((line) => [...line]);function range(start, end) {return Array.from({ length: end - start + 1 }, (_, i) => start + i);}function nestedIterate(bounds, level, coordsBase, source, result) {if (level < bounds.length) {for (const i of range(...bounds[level])) {nestedIterate(bounds, level + 1, [...coordsBase, i], source, result);}} else {const active = source.has(coordsBase.join(","));const neighbors = nestedNeighbors(0, coordsBase, [], source);if (neighbors === 3 || (neighbors === 2 && source.has(coordsBase.join(",")))) {result.add(coordsBase.join(","));}}}function nestedNeighbors(level, coords, shiftsBase, source) {if (level === coords.length) {return !shiftsBase.every((x) => x === 0) && source.has(coords.map((v, i) => v + shiftsBase[i]).join(",")) ? 1 : 0;} else {return range(-1, 1).reduce((acc, i) => acc + nestedNeighbors(level + 1, coords, [...shiftsBase, i], source), 0);}}function run(dimensions, iterations) {let active = new Set(map.map((line, x) =>line.map((v, y) =>v === "#" ? `${x},${y},${Array.from({ length: dimensions - 2 }, () => 0).join(",")}` : null)).flat().filter(Boolean));const bounds = [[-1, map.length], [-1, map[0].length], ...Array.from({ length: dimensions - 2 }, () => [-1, 1])];while (iterations > 0) {iterations--;const next = new Set();nestedIterate(bounds, 0, [], active, next);bounds.forEach((b) => {b[0]--;b[1]++;});active = next;}return active.size;}console.log("part 1", run(3, 6));console.log("part 2", run(4, 6));
...#...#..##.#.####..#.............##.#..#.####....####...##...#
.#...####
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();const lines = data.split(/\n/);const map = lines.map((line) => [...line]);// TypeError: Cannot read property '-1' of undefined => increase size!const size = 11;const mapSize = size * 2 + map[0].length;const emptyPlane = Array.from({ length: mapSize }, () =>Array.from({ length: mapSize }, () =>Array.from({ length: mapSize }, () =>".")));let space = [];let nextSpace = [];for (let i = 0; i <= mapSize; i++) {space[i] = JSON.parse(JSON.stringify(emptyPlane));nextSpace[i] = JSON.parse(JSON.stringify(emptyPlane));}for (let i = 0; i < map.length; i++) {for (let j = 0; j < map[i].length; j++) {space[size][size][size + i][size + j] = map[i][j];}}function runIteration() {const bounds = { x: [mapSize, 0], y: [mapSize, 0], z: [mapSize, 0], w: [mapSize, 0] };for (let i = 0; i < space.length; i++) {for (let j = 0; j < space[i].length; j++) {for (let k = 0; k < space[i][j].length; k++) {let [f, l] = [space[i][j][k].indexOf("#"), space[i][j][k].lastIndexOf("#")];if (f !== -1) {bounds.x = [Math.min(bounds.x[0], i), Math.max(bounds.x[1], i)];bounds.y = [Math.min(bounds.y[0], j), Math.max(bounds.y[1], j)];bounds.z = [Math.min(bounds.z[0], k), Math.max(bounds.z[1], k)];bounds.w = [Math.min(bounds.w[0], f), Math.max(bounds.w[1], f)];}}}}console.log("bounds >", bounds);const extra = 5;for (let x = bounds.x[0] - extra; x < bounds.x[1] + extra; x++) {for (let y = bounds.y[0] - extra; y < bounds.y[1] + extra; y++) {for (let z = bounds.z[0] - extra; z < bounds.z[1] + extra; z++) {for (let w = bounds.w[0] - extra; w < bounds.w[1] + extra; w++) {let neighbors = 0;for (const a of [-1, 0, 1]) {for (const b of [-1, 0, 1]) {for (const c of [-1, 0, 1]) {for (const d of [-1, 0, 1]) {if (a === 0 && b === 0 && c === 0 && d === 0) {continue;}if (space[x + a][y + b][z + c][w + d] === "#") {neighbors++;}}}}}nextSpace[x][y][z][w] = neighbors === 3 || (neighbors === 2 && space[x][y][z][w] === "#") ? "#" : ".";}}}}let t = space;space = nextSpace;nextSpace = t;}for (let i = 0; i < 6; i++) {console.log("iteration >", i + 1);runIteration();}const result = space.flat(Infinity).filter((v) => v === "#").length;console.log(result);
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();const lines = data.split(/\n/);const map = lines.map((line) => [...line]);const size = 6;const mapSize = size * 2 + map[0].length;const emptyPlane = Array.from({ length: mapSize }, () => Array.from({ length: mapSize }, () => "."));let space = [];let nextSpace = [];for (let i = 0; i <= mapSize; i++) {space[i] = JSON.parse(JSON.stringify(emptyPlane));nextSpace[i] = JSON.parse(JSON.stringify(emptyPlane));}for (let i = 0; i < map.length; i++) {for (let j = 0; j < map[i].length; j++) {space[size][size + i][size + j] = map[i][j];}}function runIteration() {for (let x = 1; x < space.length - 1; x++) {for (let y = 1; y < space[x].length - 1; y++) {for (let z = 1; z < space[x][y].length - 1; z++) {let neighbors = 0;for (const a of [-1, 0, 1]) {for (const b of [-1, 0, 1]) {for (const c of [-1, 0, 1]) {if (a === 0 && b === 0 && c === 0) {continue;}if (space[x + a][y + b][z + c] === "#") {neighbors++;}}}}nextSpace[x][y][z] = neighbors === 3 || (neighbors === 2 && space[x][y][z] === "#") ? "#" : ".";}}}let t = space;space = nextSpace;nextSpace = t;}for (let i = 0; i < 6; i++) {console.log("iteration >", i + 1);runIteration();}const result = space.flat(Infinity).filter((v) => v === "#").length;console.log(result);
departure location: 31-221 or 241-952departure station: 27-780 or 787-957departure platform: 34-405 or 411-970departure track: 41-672 or 689-963departure date: 26-827 or 843-970departure time: 38-283 or 297-963arrival location: 50-250 or 259-970arrival station: 35-878 or 884-950arrival platform: 49-746 or 772-955arrival track: 37-457 or 481-954class: 28-418 or 443-970duration: 32-722 or 728-970price: 41-519 or 525-966route: 50-606 or 628-974row: 46-92 or 111-967seat: 41-112 or 135-972train: 25-540 or 556-957type: 39-574 or 585-954wagon: 32-699 or 719-957zone: 49-71 or 83-951your ticket:61,151,137,191,59,163,89,83,71,179,67,149,197,167,181,173,53,139,193,157nearby tickets:854,509,243,913,926,411,308,322,69,875,779,371,51,514,367,873,524,645,934,322358,885,814,800,197,363,388,50,138,820,854,793,89,738,733,306,796,334,387,8194,897,151,634,178,597,173,791,251,344,306,568,804,145,142,136,573,173,242,508793,667,856,328,284,596,215,70,873,507,777,948,851,922,694,153,743,250,926,142219,870,66,945,803,485,325,670,788,186,822,365,451,512,906,443,678,404,312,173329,572,654,409,804,563,847,330,265,148,875,904,173,411,927,259,945,536,148,920788,867,405,249,51,454,819,512,306,850,384,337,71,587,316,649,724,389,645,318271,143,266,447,322,187,650,254,497,155,860,405,655,946,635,862,517,937,729,721211,856,566,262,156,201,804,735,172,809,870,56,313,801,447,508,622,517,91,807312,334,928,657,776,276,319,893,163,162,244,206,446,719,568,856,391,831,722,931250,68,900,183,785,790,270,922,312,914,269,664,305,337,350,904,778,896,68,371516,650,391,333,604,730,406,779,341,354,447,162,884,53,803,327,861,721,321,328654,169,947,825,395,4,374,569,518,885,315,563,67,900,195,511,789,739,345,863909,871,876,874,194,141,151,54,805,381,943,413,556,553,268,305,629,774,179,540325,299,721,195,772,376,255,699,737,911,567,274,859,186,780,605,556,568,220,162482,799,304,784,495,136,949,938,140,58,773,152,855,342,884,393,276,445,557,821534,807,455,221,832,89,658,734,947,945,672,259,456,137,558,557,902,744,382,315274,775,797,928,940,299,821,653,216,918,163,814,162,63,929,640,321,456,362,257889,188,454,309,488,457,775,183,166,382,916,262,322,307,716,204,664,411,790,354366,894,820,567,180,641,146,859,517,497,735,186,310,362,203,381,824,885,718,51360,813,630,672,88,947,663,405,515,376,51,182,910,380,903,847,318,843,542,572447,300,897,602,55,918,664,272,623,245,368,411,699,157,735,587,722,641,574,356890,804,648,369,731,848,394,866,249,884,3,652,212,876,742,892,517,844,667,93289,524,529,628,324,944,860,449,887,392,112,805,592,181,905,929,323,787,140,54301,885,646,353,657,820,572,629,666,891,195,378,274,849,729,24,196,875,515,212709,197,454,827,733,742,91,175,366,572,508,314,170,282,744,316,164,69,178,801218,457,484,161,800,860,911,492,250,898,455,888,252,54,932,745,393,856,363,519207,923,189,314,182,483,179,730,174,186,324,481,658,494,294,167,492,854,803,778800,87,644,61,586,517,645,905,190,573,316,855,150,170,304,389,218,979,388,741846,482,84,326,798,745,926,725,362,176,340,197,165,572,268,912,481,558,335,632184,773,536,594,945,494,738,401,649,949,404,135,274,467,817,299,853,740,603,926843,855,551,798,443,586,481,721,809,340,142,570,774,938,150,485,154,299,822,857272,782,366,666,658,917,731,509,733,371,639,245,585,312,336,805,111,868,642,511447,888,511,822,822,940,527,909,274,938,867,984,193,274,527,449,487,888,515,560304,174,393,1,170,444,568,634,395,481,260,586,729,634,694,55,305,531,501,162629,585,932,813,572,945,598,369,743,375,178,411,397,648,221,805,648,72,817,698631,554,698,861,906,380,484,70,739,606,359,519,418,111,728,564,935,208,90,38390,500,825,163,899,532,392,641,571,484,220,877,530,351,368,918,229,337,367,50171,341,914,323,737,256,647,939,745,138,908,648,690,857,145,774,855,919,745,605179,906,324,91,365,322,843,512,857,324,139,69,902,823,332,313,776,254,653,457668,237,456,573,913,503,140,200,283,449,241,148,148,323,635,734,694,143,815,92484,195,63,216,356,730,457,67,923,654,269,173,646,400,65,664,641,455,400,294401,373,418,600,848,659,740,59,400,796,418,449,721,993,644,163,875,444,949,87628,934,497,657,336,325,398,62,384,150,672,335,785,170,305,241,167,361,502,571458,858,501,491,271,217,569,162,168,205,335,325,744,380,54,303,884,794,916,646280,498,728,358,587,171,891,525,935,819,843,398,515,671,729,418,257,512,871,591288,891,658,311,853,166,510,84,502,937,633,360,143,692,374,92,515,393,60,277447,153,383,332,260,447,694,299,531,490,636,534,166,137,892,858,817,498,654,784252,799,885,852,856,774,89,154,333,590,338,504,165,378,696,606,53,728,349,537221,281,278,179,737,813,522,798,355,283,193,570,921,928,264,745,585,241,351,808556,244,60,858,452,221,655,595,204,603,899,329,417,449,503,894,192,56,980,587875,780,350,728,889,527,671,790,589,857,520,936,180,942,818,448,558,664,920,819355,858,531,976,530,135,55,336,894,150,194,905,379,496,338,299,262,247,511,574182,637,184,865,7,933,55,826,733,738,820,245,566,655,632,564,529,900,538,342905,509,943,814,798,819,417,485,327,61,160,168,616,210,788,936,788,365,908,49750,946,380,527,894,203,267,810,906,198,569,803,888,170,555,694,659,70,371,590591,815,364,401,766,815,275,596,176,634,370,561,505,181,890,138,452,735,518,147827,683,52,534,656,510,328,323,52,278,815,930,743,137,53,190,903,741,660,875167,859,260,725,923,917,922,142,339,388,363,508,914,667,790,862,515,282,212,350161,882,443,265,517,483,776,650,661,499,887,794,302,516,150,412,485,698,820,185345,487,810,868,871,190,209,507,327,534,86,856,305,877,931,210,121,886,903,567843,875,362,560,320,17,869,64,948,561,896,248,778,174,54,947,792,386,630,366916,904,884,91,867,796,862,153,453,449,397,908,485,264,53,848,141,936,889,551569,740,646,200,792,649,213,719,787,456,933,414,361,526,340,732,63,135,469,865359,384,221,87,650,396,241,197,281,947,19,418,527,738,172,486,857,282,262,525854,603,494,532,160,329,162,537,358,887,415,913,487,531,172,177,393,521,940,698403,535,738,334,827,530,527,495,229,526,512,340,248,170,866,188,691,820,398,822654,241,630,740,920,485,532,722,479,348,90,51,87,158,241,389,301,531,496,350547,143,492,534,871,939,303,306,88,247,268,55,363,312,564,344,740,560,277,150915,823,90,651,852,416,668,207,905,563,249,308,84,338,216,67,346,112,523,924825,734,211,581,454,811,340,347,207,532,506,400,660,412,328,573,319,146,735,519540,875,176,220,355,184,885,854,780,572,83,142,181,387,371,603,925,514,654,9398,402,561,151,608,565,528,850,136,497,939,386,943,919,938,86,946,329,380,367390,912,651,811,563,63,20,368,146,187,173,538,658,364,938,264,869,194,573,845154,331,321,244,189,445,88,873,208,650,312,368,744,932,243,345,792,58,995,637172,813,638,66,859,161,915,921,928,383,587,644,388,183,868,358,319,681,602,567399,866,603,207,557,172,366,349,707,812,664,806,454,299,593,779,772,651,502,170310,777,312,917,406,670,874,187,559,945,58,505,393,393,418,666,158,297,811,66466,936,270,595,515,844,546,491,638,314,381,177,791,805,264,640,342,693,172,160521,270,906,822,273,269,448,905,456,304,176,330,249,211,492,780,515,539,802,640135,790,271,772,935,492,300,875,827,896,282,260,891,915,657,879,505,88,283,303443,275,414,237,888,596,729,938,161,514,147,275,854,497,652,629,366,910,264,922370,146,402,649,328,859,789,787,794,665,321,810,174,777,889,396,649,389,494,410642,629,221,538,400,591,84,983,815,692,267,267,266,179,667,564,566,359,689,159499,806,219,663,690,536,535,664,83,370,531,640,589,988,654,511,260,666,173,531670,733,900,881,635,313,281,449,179,695,513,397,915,774,532,209,343,375,889,661654,300,195,921,434,564,143,861,720,893,875,208,860,777,557,305,62,774,71,139342,916,201,899,741,357,645,363,146,317,630,380,287,370,773,649,174,358,876,667875,736,866,60,867,308,159,152,296,872,354,241,56,586,656,513,491,933,213,323564,632,648,503,190,728,270,272,850,666,348,663,263,201,406,206,697,249,504,164568,592,738,518,277,456,780,635,883,70,218,411,722,403,175,910,334,413,484,175827,198,282,832,53,111,414,411,329,388,909,208,602,531,745,734,195,52,502,938493,324,779,691,882,746,335,891,937,594,527,145,167,729,848,315,54,556,731,746163,153,806,795,246,398,312,505,52,897,880,780,590,519,70,487,533,53,498,896220,339,843,212,524,596,151,412,853,865,860,496,360,810,559,357,201,746,491,734137,822,270,870,852,53,730,761,648,165,481,801,414,370,399,519,944,305,343,814455,303,137,919,166,336,448,532,531,211,504,773,593,698,905,455,171,995,500,603851,631,742,789,332,205,818,350,386,495,528,544,361,210,693,827,305,870,689,506111,163,207,780,595,393,874,692,368,300,10,485,220,450,499,860,398,190,593,211631,871,733,921,864,599,170,653,361,362,211,746,219,258,313,370,193,321,207,188897,831,929,868,843,342,901,791,450,537,280,445,511,667,719,389,197,360,398,945375,906,876,211,457,361,373,557,65,164,170,184,794,728,692,22,503,325,395,142812,360,395,735,69,825,445,904,356,804,336,858,542,366,171,642,504,903,917,939156,309,731,695,723,450,940,632,793,262,62,638,728,378,186,446,919,263,247,821534,215,60,854,730,867,163,927,799,994,932,865,670,269,791,857,347,53,744,664507,373,844,729,451,264,455,283,923,366,514,212,272,378,307,814,410,662,557,531606,87,594,289,893,772,511,926,111,939,165,314,413,53,650,936,498,263,309,179788,153,740,318,856,444,337,183,178,632,50,180,245,490,792,443,163,723,489,510301,140,324,571,884,508,868,872,301,730,798,484,593,147,259,350,700,810,852,692416,943,853,178,827,565,279,566,317,892,251,857,817,217,538,271,348,63,264,140378,346,699,393,903,943,534,880,151,302,414,397,819,933,689,150,893,397,598,58277,311,645,525,904,141,112,697,347,151,877,376,149,643,358,793,929,773,881,310855,488,659,250,513,918,64,484,889,488,360,91,51,274,932,735,880,54,737,369732,89,976,659,299,772,494,185,268,369,891,513,305,342,188,264,86,945,657,732417,155,392,689,171,186,53,982,931,85,803,147,376,825,499,945,158,719,193,904206,397,910,722,591,359,315,268,194,356,606,948,728,822,805,198,63,292,791,140719,664,490,521,562,938,592,404,401,276,316,313,637,803,177,937,453,794,851,282587,530,400,165,944,873,350,696,389,930,636,260,780,879,383,825,660,655,305,656890,914,67,299,824,914,360,211,68,186,206,899,705,443,246,361,734,568,846,909379,976,403,160,939,737,817,777,263,742,416,506,325,111,597,213,887,405,330,507211,641,930,320,790,719,362,90,792,323,696,519,925,599,92,173,466,592,923,142495,529,164,911,505,668,357,390,88,731,628,630,170,519,910,416,69,335,667,473616,746,332,354,905,730,83,59,903,525,313,571,304,925,56,844,643,383,793,909556,668,601,848,397,175,260,152,727,672,787,664,788,281,369,199,453,573,574,149216,174,851,71,790,366,785,213,594,640,746,216,656,729,207,157,86,570,176,731384,606,204,809,199,303,285,779,509,493,52,217,391,451,596,69,885,629,69,929844,157,61,571,186,184,728,831,646,898,146,902,661,54,391,219,928,62,204,218271,391,809,504,852,157,986,853,889,413,940,791,137,271,628,221,493,813,932,365482,190,329,886,921,162,802,914,787,532,452,790,873,210,657,810,595,235,395,323821,339,199,325,414,150,16,259,566,730,496,799,445,371,249,177,936,511,88,135903,147,384,485,70,300,268,345,830,631,318,269,787,174,937,500,360,511,90,91084,322,277,178,280,153,915,191,92,571,327,822,646,65,413,638,540,715,886,245455,465,316,696,515,112,265,788,533,367,205,193,641,144,282,651,530,190,601,604218,802,398,351,142,886,357,932,210,638,152,734,90,53,787,343,531,873,17,737339,90,808,176,322,316,157,598,302,590,327,775,218,151,806,372,165,478,184,299900,527,921,413,884,573,380,221,482,942,566,778,879,668,144,161,567,208,659,326365,854,372,112,176,457,416,569,152,871,740,809,652,371,147,90,784,735,851,788386,388,573,919,277,69,608,803,813,933,905,855,862,337,326,719,733,563,667,450593,187,825,503,142,187,559,719,175,193,495,849,564,61,524,511,593,737,867,605199,395,635,487,910,822,944,864,415,661,988,55,153,375,248,187,196,641,819,160389,878,304,196,904,395,716,628,925,135,145,593,632,495,649,598,209,86,812,859653,406,798,497,806,556,84,320,202,278,363,787,594,824,305,585,208,192,213,39555,691,789,88,876,910,594,331,274,862,51,563,875,370,614,900,569,947,172,666149,736,926,525,16,929,263,52,444,645,935,83,452,347,815,509,806,454,152,868307,605,265,638,578,797,864,855,414,895,372,495,849,65,318,926,888,528,372,646189,941,53,531,699,415,342,635,633,244,805,193,794,180,976,339,54,456,196,316369,322,332,874,468,52,197,518,507,356,489,694,268,796,351,655,206,655,907,244347,382,161,675,628,745,689,349,662,776,893,787,210,854,411,376,855,510,111,155322,597,266,874,448,774,306,916,905,416,550,820,249,483,663,378,931,65,793,281357,149,598,734,873,344,802,943,745,850,218,61,479,873,58,203,268,371,279,348261,154,947,178,866,360,733,484,195,806,342,312,942,334,252,189,804,221,556,912245,338,858,532,804,565,892,445,491,889,329,190,264,599,347,567,901,879,321,929452,1,213,593,847,850,372,898,660,414,738,947,497,485,795,390,245,632,887,814152,362,445,694,860,272,848,363,2,944,334,926,450,823,943,249,142,318,190,907188,919,70,513,56,501,148,164,600,401,211,353,219,321,449,521,897,71,792,303989,592,493,60,369,655,86,263,772,779,181,537,263,180,450,173,370,84,596,344491,671,934,539,513,163,830,111,314,647,266,798,667,179,325,849,921,356,864,204331,491,181,921,193,925,644,178,411,532,643,874,68,87,601,555,788,343,890,217218,945,341,669,802,143,571,140,188,154,899,777,573,88,302,257,444,587,411,908559,572,365,448,179,930,668,636,58,354,142,7,403,318,387,382,157,388,188,447302,365,799,547,211,872,729,55,585,904,799,189,922,152,645,925,561,273,313,446892,213,531,257,539,855,316,242,349,886,242,248,153,822,670,176,586,670,386,310556,215,50,270,668,484,140,333,867,55,326,944,70,414,454,83,510,626,569,283179,455,501,670,902,185,536,574,376,900,195,919,982,629,148,884,662,487,845,33165,794,491,211,322,388,888,343,782,644,135,558,564,263,488,666,335,275,672,206281,252,887,594,52,203,194,587,606,155,777,843,451,412,851,56,196,194,794,498812,640,850,777,175,450,918,160,418,165,507,304,532,445,385,373,504,492,499,712451,153,209,486,153,500,645,328,324,912,979,691,657,490,381,572,199,931,86,336796,603,908,792,228,525,58,807,363,572,657,66,350,55,331,515,484,775,456,137280,265,910,174,128,343,356,775,200,372,112,598,447,56,154,516,859,268,265,938318,628,356,396,452,266,742,906,180,273,797,661,309,327,310,201,888,872,622,32084,50,311,898,363,320,208,341,358,672,354,995,818,731,199,791,176,810,740,327494,454,931,721,394,918,507,553,656,167,210,662,730,530,807,695,647,917,863,356737,193,215,937,53,347,54,381,793,271,632,389,69,526,162,374,699,324,7,333160,716,746,199,306,629,873,628,163,903,249,585,695,281,403,322,630,261,528,150327,797,533,660,669,638,924,532,307,53,495,24,396,691,908,185,516,283,720,845574,216,58,458,202,221,793,164,454,906,457,182,62,696,943,376,300,312,741,919344,358,691,566,794,316,592,298,361,654,731,189,819,573,493,250,296,894,194,744385,873,483,249,699,808,736,166,899,789,486,900,777,646,345,148,739,762,658,63662,923,853,888,256,259,242,87,589,332,821,876,143,516,367,213,91,935,330,794311,532,802,374,355,526,337,795,662,161,475,646,631,147,561,63,452,194,871,55216,165,263,561,268,896,283,699,327,495,869,332,527,701,260,729,245,145,698,742880,731,453,593,334,919,564,639,335,924,905,65,363,942,780,247,733,411,921,719373,908,601,315,914,656,825,928,351,902,859,734,986,537,639,823,816,634,181,859500,137,378,918,515,923,411,735,415,819,599,346,146,400,459,899,906,798,859,518670,622,590,346,793,518,396,571,810,790,168,866,486,948,602,91,221,283,337,849277,452,731,532,61,266,391,575,503,397,569,825,562,71,298,911,364,175,635,312265,322,849,816,501,821,910,928,909,15,512,539,205,396,564,516,538,851,851,642271,55,901,353,313,386,498,408,383,58,412,337,211,572,217,65,804,917,449,518283,364,187,806,153,891,279,372,350,502,195,338,454,412,538,446,854,864,721,609778,366,398,596,892,867,412,195,274,812,535,883,921,51,353,340,933,83,61,598788,404,934,21,246,888,654,539,145,418,150,658,510,91,281,930,788,932,910,282634,156,798,159,565,487,592,633,390,910,139,854,277,140,585,2,332,513,492,932380,198,209,696,417,385,50,329,804,745,935,516,591,735,719,694,768,731,508,111174,734,268,301,854,745,518,615,345,312,244,565,633,506,599,789,773,352,886,178891,216,324,184,527,449,572,535,378,911,339,659,979,928,560,823,773,318,814,386565,58,253,415,177,402,86,206,201,192,948,395,648,694,628,899,865,561,401,323863,340,557,324,136,986,245,167,482,354,596,56,89,374,178,690,242,849,637,346341,601,416,697,308,777,188,785,150,526,263,903,915,661,897,734,164,497,510,13792,599,932,895,325,499,199,139,561,191,668,697,511,329,315,815,833,887,813,443402,396,495,852,386,453,148,84,826,800,263,564,52,606,659,871,698,185,266,522645,878,352,812,865,776,881,902,262,917,810,205,165,314,606,368,739,644,853,559517,527,452,807,306,68,181,523,216,628,874,719,605,269,266,155,897,496,817,369507,927,927,220,378,775,865,380,339,631,366,917,491,643,156,574,391,543,51,515906,244,787,280,194,806,813,213,523,890,745,671,665,377,336,449,169,565,630,909259,791,87,329,191,275,540,71,155,176,362,874,217,320,827,517,774,782,398,70496,820,812,332,706,370,417,857,649,500,308,559,794,394,181,58,777,92,413,383651,368,357,324,153,244,385,868,70,667,280,372,742,314,556,800,298,578,492,561160,159,324,902,340,158,455,205,370,875,986,787,193,85,507,650,333,663,843,319744,391,514,399,936,65,928,197,678,450,586,662,732,632,654,359,640,203,272,443170,362,136,567,303,596,186,287,183,663,199,811,742,603,338,360,275,918,169,808402,330,894,481,802,218,199,906,147,492,364,315,697,821,842,150,665,720,728,45556,184,204,629,586,197,354,519,318,697,694,742,176,338,664,900,140,518,71,880483,932,861,559,212,503,663,394,863,918,560,887,745,322,881,940,896,60,167,344629,590,176,650,719,374,152,518,409,930,902,643,266,922,205,375,196,387,875,948556,63,800,148,78,886,169,697,516,663,158,185,341,889,499,802,167,851,342,871399,402,946,386,175,640,886,682,633,493,507,371,670,145,892,162,166,198,632,214560,915,526,498,923,305,667,216,602,864,519,186,924,326,241,905,329,407,824,163417,0,138,596,495,797,189,64,404,799,670,381,658,912,482,161,651,537,270,354139,815,530,914,592,318,337,447,449,911,809,184,263,264,781,826,328,731,538,338302,448,272,163,505,313,691,940,392,878,817,258,800,905,642,738,349,856,264,932493,307,64,283,86,925,153,815,600,850,511,698,280,520,305,904,493,179,531,367357,817,648,386,513,806,592,701,735,372,573,564,855,214,366,848,353,816,136,264201,631,313,145,538,912,447,363,194,796,561,668,777,306,780,488,323,646,251,451934,66,490,826,314,168,821,603,539,417,735,864,902,895,358,197,998,777,307,525170,60,858,249,557,197,476,396,416,810,932,737,396,929,602,198,529,657,450,87168,390,153,452,377,907,231,587,187,332,778,385,112,690,513,874,906,357,380,393492,822,261,729,548,138,655,283,485,640,497,920,482,897,320,810,183,175,488,698902,286,366,890,405,603,911,259,499,940,374,271,376,515,694,904,948,653,516,743595,506,741,630,948,401,915,884,549,386,847,166,914,694,690,569,368,371,777,388445,245,145,821,633,141,417,948,327,204,147,149,325,507,857,890,73,537,191,380506,734,638,342,534,55,719,473,369,322,945,894,365,803,889,404,405,179,663,145383,857,774,404,674,338,350,495,187,884,304,507,862,948,155,207,259,61,651,362147,338,892,348,629,210,488,243,299,451,162,161,689,657,280,365,581,302,518,137721,274,947,627,570,892,489,328,221,318,443,557,50,648,250,166,532,186,629,944539,532,191,984,112,282,801,200,913,336,948,739,815,777,161,50,742,804,159,21267,343,887,712,273,500,661,141,57,172,567,356,65,515,788,631,693,922,897,373196,512,803,383,864,802,694,348,417,826,591,8,797,194,191,794,206,862,159,739489,519,484,399,276,774,270,944,176,173,263,908,522,377,744,593,196,162,416,655269,384,55,177,142,699,741,225,807,497,908,314,744,586,221,778,395,276,390,151694,211,643,822,773,348,329,174,269,866,276,242,565,856,167,919,555,343,776,243
class: 0-1 or 4-19row: 0-5 or 8-19seat: 0-13 or 16-19your ticket:11,12,13nearby tickets:3,9,1815,1,55,14,9
class: 1-3 or 5-7row: 6-11 or 33-44seat: 13-40 or 45-50your ticket:7,1,14nearby tickets:7,3,4740,4,5055,2,2038,6,12
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();const groups = data.split(/\n{2,}/);const rules = {};groups[0].split(/\n/).forEach((rule) => {let [name, ranges] = rule.split(":");[name, ranges] = [name.trim(), ranges.split(/ or /)];rules[name] = rules[name] || [];ranges.forEach((range) => {rules[name].push(range.split("-").map((x) => +x.trim()));});});const rulesAll = Object.values(rules);const tickets = groups[2].split(/\n/).map((raw, i) => {if (i === 0) return;const values = raw.split(",").map(Number);const good = values.every((value) =>rulesAll.some((ranges) => ranges.some(([low, high]) => value >= low && value <= high)));return good ? values : null;}).filter(Boolean);const mine = groups[1].split(/\n/)[1].split(",").map(Number);tickets.unshift(mine);const allFieldNames = Object.keys(rules);let candidates = Array.from({ length: tickets[0].length }, () => [...allFieldNames]);tickets.forEach((values) =>values.forEach((v, ind) => {candidates[ind] = candidates[ind].filter((name) => rules[name].some(([low, high]) => v >= low && v <= high));}));do {const found = candidates.filter(options => options.length === 1).map(options => options[0]);candidates = candidates.map(options => (options.length === 1 ? options : options.filter(name => !found.includes(name))))if (found.length === allFieldNames.length) break;} while (true);const result = candidates.reduce((acc, [name], ind) => name.startsWith("departure") ? acc * mine[ind] : acc, 1)console.log(result);
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();const groups = data.split(/\n{2,}/);const rules = {};groups[0].split(/\n/).forEach((rule) => {let [name, ranges] = rule.split(":");[name, ranges] = [name.trim(), ranges.split(/ or /)];rules[name] = rules[name] || [];ranges.forEach((range) => {rules[name].push(range.split("-").map((x) => +x.trim()));});});const rulesAll = Object.values(rules);const tickets = groups[2].split(/\n/);let sum = 0;for (let i = 1; i < tickets.length; i++) {const values = tickets[i].split(",").map(Number);values.forEach((value) => {if (!rulesAll.some((ranges) => ranges.some(([low, high]) => value >= low && value <= high))) {sum += value;}});}console.log(sum);
6,4,12,1,20,0,16
0,3,6
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();const numbers = data.split(/,/).map(Number);const spokenLast = Array.from({ length: 30000001 }, () => false);const spokenBeforeLast = Array.from({ length: 30000001 }, () => false);numbers.forEach((n, i) => (spokenLast[n] = i + 1));let last = numbers[numbers.length - 1];for (let turn = numbers.length + 1; turn <= 30000000; turn++) {let next;if (last !== 0 && spokenBeforeLast[last] === false) {next = 0;} else {next = spokenLast[last] - spokenBeforeLast[last];}spokenBeforeLast[next] = spokenLast[next];spokenLast[next] = turn;last = next;if (turn === 2020) {console.log("part 1", last);}}console.log("part 2", last)
mask = X11001110001101XX01111X1001X01101111mem[32163] = 23587mem[59015] = 3487205mem[25831] = 33360mem[62711] = 224797mem[41307] = 1818mask = 1010001X010111X00101X1X101X1X01010X0mem[45083] = 11122937mem[3480] = 10mem[46489] = 4658914mem[10554] = 14018239mem[46503] = 702809mem[40599] = 21908484mask = 1X0X0111001X1X1000X11X11000110011000mem[27073] = 1598154mem[56277] = 895mem[64440] = 121221812mem[36973] = 803170mask = 01X0101101011X110X11XX0111111010X011mem[56954] = 862350849mem[56448] = 732mem[57698] = 10805529mem[9948] = 743476mem[54082] = 27464mem[26950] = 13890763mask = 1010001101XX11X0X10X000X00001X11X00Xmem[4270] = 361512mem[8603] = 140991mem[11543] = 11280669mem[48952] = 13983mem[23994] = 160573183mem[21654] = 16471299mask = 1X0011X0XX10001000X1011XX1X110X10000mem[54082] = 204797mem[2442] = 88978843mem[43594] = 10538mem[50284] = 1009918861mem[44229] = 496323mem[12926] = 20879mem[49547] = 4018180mask = 1010X0X1X10111X0X10X0X0000XX10011110mem[21387] = 1595920mem[49543] = 426267846mem[33458] = 232911215mem[12713] = 36660mem[25009] = 1531450mem[160] = 41645mem[62607] = 29094926mask = 10X1X1010011X0100X0X0X10X1X0X0111000mem[41099] = 556mem[35924] = 165390mem[4217] = 95434mem[29377] = 256242448mem[65298] = 219301mem[2150] = 513838120mask = 101000X1X1X1110011XXX000110001X01000mem[40639] = 152100mem[47089] = 234875mem[21980] = 108670mem[13822] = 351059mask = 1X1011110111X11100010X100001X00110XXmem[48992] = 3047mem[56444] = 201961239mem[21371] = 204mem[24671] = 3709mask = 101X10010X01111011010101000X0001X010mem[391] = 1771mem[9761] = 167201870mem[26810] = 35048mask = X1100111X001001110X1XX1X1101X110001Xmem[58134] = 62107560mem[1977] = 431050mask = XX1101110001X01XX0110111X11011X0X100mem[61811] = 3322mem[45400] = 126787711mem[11959] = 231430790mem[6529] = 50711275mask = 1010011100X110X10X010X011X10X001X101mem[35664] = 4018mem[51789] = 1147mem[9164] = 2673mem[3887] = 6903395mask = 1XX01101001XX0X10001X100X10X00011011mem[45588] = 44392mem[45672] = 130449mem[10651] = 199mem[13830] = 609557mem[16601] = 9139mem[39047] = 7390mem[15735] = 2200mask = X1100111X0011001001X10010100XX0X1100mem[47001] = 12904mem[60088] = 78mem[16541] = 35014846mem[36988] = 274445mem[64869] = 721mask = 111001101001001X1XX1010011X0111X1000mem[47089] = 484293694mem[32833] = 1324010mem[573] = 621230513mem[30223] = 4408118mem[21631] = 108617mask = 101X0101001XX0XX00011X10101X0111010Xmem[818] = 847mem[7536] = 12876mem[61097] = 637mask = X11X01110X0110X01011011X1011XX000101mem[1160] = 2769715mem[11521] = 389mask = 1X0X1X11X0X110110X011101100111001011mem[18913] = 2463mem[60014] = 22803235mem[37134] = 6832mem[62311] = 85539171mem[35150] = 1323288mem[48099] = 1648075mask = 10001X11X11110100X0101X01001X0001011mem[48089] = 20mem[4229] = 1868mem[51778] = 69531mem[6163] = 803954017mask = 10X000110011X0100XX1110X011001X00000mem[44294] = 12646mem[17281] = 484mem[19939] = 492mask = 0XX0X11100XX1X1100111110X1100X001100mem[47104] = 5349940mem[12968] = 633mem[27118] = 388686386mem[22054] = 1418mem[26460] = 3963mem[27686] = 324058mem[8678] = 406066094mask = X1001X1011X0001000X1X0001101XX111X11mem[34728] = 4733mem[19944] = 3955289mem[73] = 2844mem[5056] = 3114323mem[61113] = 3346mask = 0XX011100001101010X1010X101X11XX1000mem[13529] = 4870075mem[32746] = 30227mem[16882] = 5182mem[58506] = 3864mask = 101011X1001X100101X10X01000000001101mem[16135] = 1425313mem[59176] = 2841231mem[26460] = 54607mem[7136] = 12152mask = 1010X11X001X10X1000X100X000101X1010Xmem[23809] = 464mem[41790] = 25173055mem[19793] = 119mask = XX00101011000010001100000X11001XX00Xmem[34368] = 338852mem[1953] = 158mem[33469] = 240238mem[26651] = 39001013mem[52523] = 39414mem[43956] = 4612mask = 10110X11XX11101100001010101X00000110mem[50811] = 5113517mem[53419] = 58853mem[23534] = 234mem[27568] = 164916174mem[16184] = 967mem[56977] = 14248978mem[9076] = 338687637mask = 100011010010000XX0011001X1X110000100mem[49329] = 7872mem[62711] = 917801821mem[20767] = 9510mem[41836] = 9669mask = 011001X000X110110X111X01101X0X1110X0mem[58112] = 8759mem[59015] = 249132mem[2696] = 6617538mem[4055] = 322572mem[35039] = 14480645mem[33920] = 1480mem[24136] = 1072057057mask = 101011X1001XX0100001X00001X1001X0000mem[23619] = 1830mem[23927] = 29452mem[64905] = 150741701mem[60932] = 18507mask = 10X0011X011X10110X0XX100101X00010X01mem[54685] = 201370mem[18104] = 2839230mem[62384] = 7435156mem[63305] = 444204mask = 01101X01X0011011001111XX110X000X0XX1mem[23354] = 50190934mem[33372] = 2936904mem[51383] = 965780683mask = X11001X1000110X100110X011X101XXX0X00mem[22184] = 43654247mem[45672] = 88907038mask = XXX001110011X0XX1001XX01X01010010010mem[8280] = 44185mem[53900] = 276378856mask = 1010011101X1X0110X01001100X01X1100X1mem[31239] = 200025883mem[19233] = 22660998mem[54966] = 459709mem[21900] = 128456203mem[27568] = 45525987mem[18207] = 1317041mem[4755] = 1465553mask = 101XX111X01110X10X01X11100010000110Xmem[9761] = 6212379mem[6490] = 15160mem[32338] = 454253mem[21371] = 528675530mem[57305] = 149mask = 111X011110011001001X00110X01X1000001mem[5685] = 876mem[38670] = 90390560mask = 10100111X011X0110001001XX01100001XX0mem[19086] = 153283033mem[22316] = 982mem[9660] = 648mem[38272] = 7464642mem[23530] = 1073526128mask = 1X0011X0101X0010001111000100XX1110X0mem[61800] = 1612mem[25746] = 12896802mem[59222] = 402335mask = 10110111001110XX010101X11000X101X110mem[5330] = 38096565mem[48438] = 3312971mem[50454] = 213mem[51532] = 35683154mem[2857] = 162001059mask = X110X1X0001110110XX1XX01X00X10111010mem[35384] = 487mem[8386] = 4875mem[818] = 25314mem[9902] = 809mask = 01101X1000010010X01100X0X00111000101mem[11465] = 6937mem[9166] = 8060mem[30630] = 88490mem[35039] = 58041908mask = 1010X11001011X11010XX0X100X11X110101mem[31189] = 12546611mem[61841] = 10859mem[18402] = 3088mem[46169] = 298mem[42469] = 10635847mask = 111X1101X011X01100X11XX101X00X0X1111mem[9917] = 2696mem[8987] = 613809199mem[29213] = 462633736mem[3210] = 5696mask = 100010110111101001010100100XX00010XXmem[22919] = 1049mem[32274] = 1304246mem[50722] = 3730781mem[25729] = 473131mem[33167] = 255409mem[954] = 847404mask = XX1011X0000100100X11011110110XX01010mem[64019] = 453mem[33921] = 68992034mem[11994] = 5228mask = 0110XX1000010X101011100X11000XX0X101mem[35244] = 747081mem[2508] = 46321mask = 100011110111101001010110X001X0X00X01mem[33072] = 189542868mem[22582] = 495965mem[40368] = 152283413mem[12558] = 12822mem[28400] = 130947363mem[5692] = 50965428mask = 1X10X11100010011101111000111X10001X0mem[52617] = 3163mem[28750] = 3075mem[11316] = 18721092mask = 011X1011X101X11X00X110000X1001111011mem[36035] = 1783926mem[18174] = 89261mem[6538] = 434889mask = 011011100X011010101101X0111001X0100Xmem[25969] = 10970mem[2186] = 132591mask = 10101X0X01111110000111X000010101X01Xmem[7956] = 20198mem[32632] = 9868915mem[17009] = 616154170mem[33337] = 1948mem[28455] = 314mem[19300] = 437925314mem[53760] = 9859mask = X01X0X11010111X0010110111X1X0011X00Xmem[54194] = 60308mem[55677] = 10602mem[47982] = 6803mask = 1010011XX0X110111101111X11101X1X0000mem[12226] = 26775502mem[7654] = 1776936mem[25032] = 9029mem[63355] = 2515mem[44393] = 51402mem[19754] = 538701mask = 101001X1001110110011001100XXX0001XX1mem[17878] = 2952mem[28744] = 1204082mem[44294] = 167mem[54229] = 1360071mem[58603] = 5499mask = 1010011100X110X11X011XX01110101110XXmem[19454] = 484695mem[51120] = 2797mem[24926] = 2203mem[62232] = 2795361mem[4928] = 135948629mask = 101011X10111XX1X0001011X0000010XX00Xmem[51586] = 51038500mem[16550] = 10911116mem[39368] = 31165mem[49995] = 2240467mem[20935] = 58885075mask = 01X00110X0X1101X10111XX1000011000001mem[60395] = 14487mem[45597] = 58180mem[4169] = 20594mem[28774] = 3668360mem[46407] = 161563088mask = 10101X0101011X000100X0000X0010010110mem[21371] = 8802mem[32905] = 123119533mem[4770] = 106677838mask = 11X0X10100111011X0010011111000X111X0mem[43143] = 7717mem[9164] = 377145mem[39883] = 57mask = 1011X101001000100001001X10100X0100X1mem[43124] = 5241585mem[22122] = 960211786mem[31235] = 4256719mem[32461] = 560355mem[62468] = 18038mask = 1010011001X1X0X101X101010000X1010001mem[48307] = 186177048mem[11940] = 218581mem[44812] = 72594882mem[32461] = 794715mem[40357] = 142382mem[9612] = 7990mem[32943] = 2523mask = X110X11X0001X01X1011XXX011X011001000mem[4569] = 390383592mem[8258] = 223605244mem[14022] = 27470197mem[44813] = 1232213mem[15480] = 364141654mask = 1X1011X100X100110001X001001010101011mem[21024] = 32037758mem[38961] = 4442700mem[60415] = 478809mem[9366] = 1425318mem[18104] = 4027612mem[48952] = 1698mem[9164] = 3844mask = 1X10011X100XX001001XX0110110000X01X1mem[63362] = 961021193mem[61648] = 10624mem[8540] = 1240358mem[22072] = 180594mem[45028] = 48614278mem[51941] = 437953mask = X010001X011X10100101XX0X011101XX0100mem[28400] = 20048177mem[38442] = 42972mem[19202] = 137mask = 1110X10X0011001X00110000X00X101X101Xmem[45776] = 29115mem[46228] = 82002990mask = 0110011100X1X011101101X10100110X11X0mem[2178] = 1415mem[7573] = 59211mem[63355] = 14666328mask = 111111011X11001100010X1XX100X000111Xmem[36973] = 251101mem[45549] = 49149mem[11185] = 11173mem[36931] = 9105286mem[34000] = 191861mem[4112] = 5803908mem[46851] = 898742mask = 101010X10101X10011000X0000000001111Xmem[21952] = 58087941mem[7811] = 310568mem[12683] = 7296mem[40986] = 1593mem[4484] = 217102381mask = 111X01X00X011011101111001X0011000010mem[34000] = 42900698mem[29787] = 486803mem[16456] = 314970629mem[2178] = 127921mem[5330] = 3477920mem[41836] = 507753704mem[19939] = 1233mask = 10X11X1110X1X011010111X0000101011110mem[42088] = 43182mem[55372] = 7107mem[20352] = 707842mem[38160] = 4365mask = 10X101XX1011X0X1X0010101X0010100X011mem[57996] = 825mem[9164] = 38731mem[10590] = 1024mask = 0110XXXX0X011011001111X11010XX0X1000mem[43004] = 23865126mem[26521] = 62786105mem[58508] = 16251607mem[44915] = 6296mem[50928] = 15905704mem[28304] = 6883261mask = 10000X1X0111101000010001X01110X0110Xmem[38961] = 892mem[21387] = 654mem[40691] = 70505975mask = 011X10110001101XX0111011111XX0X00000mem[26664] = 190634mem[41638] = 58433745mem[33818] = 31913mask = 1110110000111X110101000X00X0X010001Xmem[21371] = 827mem[48330] = 554110094mem[4159] = 13842042mem[28294] = 10751539mem[4122] = 3155mem[56641] = 143543mask = 10X0110XX010X0XX0X01010010000001100Xmem[42088] = 28605mem[26003] = 2052146mem[2810] = 12539132mem[19177] = 873302110mem[45682] = 198549mem[53419] = 12015mask = 01101100000X0XX00001X110110000111X00mem[13216] = 42793mem[32720] = 1691682mem[61256] = 2824mask = 10100111XX111X0X01010001001XX1010101mem[9076] = 33mem[35540] = 2369998mem[56213] = 472mask = 0X0010X011000010X0111000X10100001001mem[33599] = 292mem[48557] = 63mem[61148] = 84252mem[21382] = 4805mem[21707] = 599022397mask = 0110X1110X01X011101100X0110101000001mem[2445] = 15421mem[22230] = 421726mem[31424] = 179041731mem[64905] = 287710mem[46793] = 19157238mask = 10100110X10X00X10101111X11X10100X101mem[388] = 231948622mem[21332] = 55144051mem[25129] = 24447mem[2442] = 458mask = 11101100000X001X000101X01010X1011010mem[19300] = 1121636mem[48626] = 4127847mem[37338] = 2796197mem[22754] = 385623mem[3467] = 12303468mask = X11011X0000X0010X0X100010X00111100X0mem[20168] = 46314mem[30633] = 7925538mem[32746] = 7822mem[37513] = 22922mem[9366] = 8809mask = 11100X1100010011101100X0101000011XX1mem[21371] = 544068236mem[65001] = 127152183mem[9112] = 4281720mem[33376] = 54760474mem[27066] = 47706947mem[10567] = 20664563mask = 10X00X11X01110010X010X11011001010100mem[41952] = 16538323mem[44409] = 127mem[32732] = 88470340mem[39136] = 1209mem[52852] = 4841355mem[57307] = 18767970mask = 10100X110X111X100101X1X010010X0000X0mem[60932] = 43059mem[38522] = 266295mem[14489] = 257072mem[56504] = 4614424mem[47257] = 103706mem[51586] = 11495785mask = 101XXXX100111011000X10100011X101010Xmem[954] = 515172677mem[53419] = 2673mem[34982] = 737mem[4945] = 23383mask = 001001X1001X111100X110X011X0X0000100mem[55053] = 1024580mem[55436] = 18571176mem[22582] = 1874mem[39435] = 78890341mem[31752] = 4058mem[4134] = 1478mask = 10X0X1110X11101X0X01X10110X01X001X01mem[24668] = 15910647mem[35266] = 766999241mem[57305] = 145297mem[7722] = 249220230mem[11092] = 35301mem[47089] = 5070mask = 0110011000011011X011XXX0X0001100X0X0mem[43956] = 78016mem[3712] = 87083821mem[36931] = 3887mem[50618] = 38029mask = 101001X0010110110101X11X0X01X101010Xmem[4168] = 66691mem[51120] = 276061mem[7259] = 8999648mask = 11000XX1000X001X1X111010010X00000X0Xmem[26947] = 6243mem[14746] = 166248mem[59885] = 723042mem[45400] = 53392mem[44876] = 749mem[59029] = 1815mask = X0101X010011X01X0001X1100011111011X0mem[6490] = 1443315mem[9164] = 900mem[29237] = 868260102mem[53419] = 893281mem[61685] = 1369185mem[4228] = 739257mem[45110] = 4469052mask = 11X0011XX0X100111011100X1X0XX1001001mem[19944] = 33579152mem[9221] = 53082mem[12164] = 85657mem[18757] = 6173mem[9612] = 38383098mem[41658] = 441286882mask = XX10011100X11011X0X111X1XX1X10011000mem[15544] = 380788mem[19086] = 141583mem[34269] = 9666mem[22877] = 1051665868mem[32360] = 7mask = 1X1011110011X011000X1010X0111X1010X1mem[13883] = 5817mem[4217] = 15681mem[8703] = 171924
mask = 000000000000000000000000000000X1001Xmem[42] = 100mask = 00000000000000000000000000000000X0XXmem[26] = 1
mask = XXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXX0Xmem[8] = 11mem[7] = 101mem[8] = 0
let data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();let lines = data.split(/\n/);const re1 = /^mask.=.(\w+)$/;const re2 = /^mem\[(\d+)\].=.(\d+)$/;let memory = {};let mask;function shiftify(values) {return values.map((v) => v << 1n);}function oneify(values) {return values.map((v) => v | 1n);}lines.forEach((line) => {let m1 = re1.exec(line);if (m1) {mask = m1[1];} else {let m2 = re2.exec(line);let base = Number(m2[1]).toString(2).padStart(36, "0");let v = BigInt(m2[2]);let addresses = [0n];[...mask].forEach((digit, index) => {addresses = shiftify(addresses);if (digit === "X") {addresses = [...addresses, ...oneify(addresses)];} else if (digit === "1" || base[index] === "1") {addresses = oneify(addresses);}});addresses.forEach((a) => {memory[a] = v;});}});const sum = Object.values(memory).reduce((a, v) => a + v, 0n);console.log(sum.toString());
let data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();let lines = data.split(/\n/);const re1 = /^mask.=.(\w+)$/;const re2 = /^mem\[(\d+)\].=.(\d+)$/;let memory = {};let maskAnd, maskOr;lines.forEach((line) => {let m1 = re1.exec(line);if (m1) {maskAnd = BigInt(parseInt([...m1[1]].map((x) => (x === "X" || x === "1" ? "1" : "0")).join(""), 2));maskOr = BigInt(parseInt([...m1[1]].map((x) => (x === "X" || x === "0" ? "0" : "1")).join(""), 2));} else {let m2 = re2.exec(line);let addr = m2[1];let v = BigInt(m2[2]);memory[addr] = (v & maskAnd) | maskOr;}});const sum = Object.values(memory).reduce((a, v) => a + v, 0n);console.log(sum.toString());
100034013,x,x,x,x,x,x,37,x,x,x,x,x,401,x,x,x,x,x,x,x,x,x,x,x,x,x,17,x,x,x,x,19,x,x,x,23,x,x,x,x,x,29,x,613,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,41
9391789,37,47,1889
9397,13,x,x,59,x,31,19
let data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();let lines = data.split(/\n/);let requirements = lines[1].split(",").map((v, i) => (v === "x" ? false : { modulo: +v, remainder: (v - (i % v)) % v })).filter(Boolean);// bigger steps firstrequirements.sort(({ modulo: a }, { modulo: b }) => b - a);console.log(requirements);let val = 0;let step = 1;for (let pos = 0; pos < requirements.length; pos++) {while (val % requirements[pos].modulo !== requirements[pos].remainder) val += step;step *= requirements[pos].modulo;}console.log(val);
let data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();let lines = data.split(/\n/);const wait = +lines[0];const buses = lines[1].split(",").map((x) => (x === "x" ? false : +x)).filter(Boolean);let bus;let minWait = wait;buses.forEach((busInterval) => {const busWait = busInterval - (wait % busInterval);if (busWait < minWait) {bus = busInterval;minWait = busWait;}});console.log(minWait * bus);
F41N2L270S3F85R90E4R180E4L90F78R270F63W2R90F40R90E3S4F44W3F6S3F21N1F47L180F96S5F7S4E4S2F46L90R180W4N4F11N3W1F51S4L90W4F93R90N3R180F66W3F93W4F20W5S4E4S4E2S3L90N5F93E5N2F50L270F10W4L180N4E2S5F17E1N5F99R90F47R180F43W3L90E3N3E5S1F89W5F73R180S3L90F81N4F17L180W2F56W5N1F81S1F7S3E4F26S2W2F71W5F10L180F3E1L90F54E5N4R90F81W3F73N5F38S1L90N1L270F51R90N2E1L90F12L90E2F69S5L90F17L90W4S4L90R90F80W5N1W2F16S5F66E3F39W4F89N5W1F37N4E4R270E2L90W2F99N3E5N2F38W4S5L180F9S4W1F8W5L90W3F60W2N5F41W2L90F75N4L90N4F5W3S2F22R90S2W4F61S1L90N1L90W4S1W3S2F94E3N4F41N1W3N4R180E4F90W1S1E5N5R90W3S1F42R90F18S4E2R180E5N2F70W5F39N3W1N5W2L90N5L90S4W2L180F62S1E4F89S2W5W4S1F86F12N5F76S2W5F32R90W2F81R90W5F6S3W5F21E4F11R90S5N5W3L180W4N4L180E2F71L90E3N5R90W3R90F1W3F67R90N5F64R90N4F2E3N4R90S2F73W4R180S5L90W4F60R90W1N5F44R90S5E3F74N5F92W3R90F65N3E3N2R90F43R90F53N5L90F75W2R90F66N4F25R180N2W5F57E4F77E5R90S5F99N3F54N5F37E5F48S1F17F49L180S2R180N3L180F100E4R90E3R90F49L180W4S3E2L90N4S3F60S5F86L90E5L180F96L90W4F30S1F31S4F78E3F51S2E5S4F5S1F45R90W2S3E5F46E4R180F9W1S5W4S1R90N1W5F87N3W2F10W1L90F34S1E2L270F98N2R90F48S4F54R90N3W3R90E4S4F93N1E2F42W4L90F29E2F51S2L90F60S4R90L90S1F58S4F81N2R90S1F28S3W5F50L180S4E4F3E2R90W4F21E2S4F99N2W1F42R180S1F9L90S4W3L90F61L90F80E2N4E1R90F62W1F59R90W4N3W1L180E2R90S1F24N1R180W5F26E4N4R90E1F19W3S2L180F18L90W2F91R90E3F88N4W4F13W4F66R90E3F33L90F24L90F17S2E1F47S4F61S3R270W1L180N2E1L90F42E3R180F58W3R90W4S3F54N3L90F49L90F49E2S3F76W2N2R90F20N4R180F34N2F44W5N3F50R180F13L90F76R270F18N2F12L90W1S5L180F72N3E3W4F36E4F74S5R90F86L90F63L90S2W4F63N3E3E3S3R90W1S3L90N1E4F4E4R90F82N3F58S5R180N3F98R90R90F29S2R180W5N1F61N3E5S3E2F30N2F66W2N2F32W4R90F2E5F90R90E2R90F7R180N5E1R90S2L90F68W3F84S4E4S4E2L90S3F83R90E4R180S2L90F92F6W5R90F5R270F85E1F9L180N5L90W1N3L90E5F10R180S3W1W1L90E1F24E5F63E4F10E3F73W3F68N5W3F90R90W2F79N5R90F71E4F51E4F11W4R90N5F41L180S4L90F18R90N3W5F38S5F24S2F25W4N2E2F36N2L90F30W1F56L90W5S2E3R90F63W2F63S4W3F81R90S1L270N5L90W2F6W4L180E2L180W3R90S3R90F49N4F23R90W4N5L90F8R90F12E2L180F95
F10N3F7R90F11
let data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();let lines = data.split(/\n/);let pos = [0, 0];let wp = [-1, 10];for (let i = 0; i < lines.length; i++) {let a = lines[i][0];let v = +lines[i].substr(1);if (a === "R") {a = "L";v = 360 - v;}switch (a) {case "F":pos[0] += wp[0] * v;pos[1] += wp[1] * v;break;case "N":wp[0] -= v;break;case "S":wp[0] += v;break;case "E":wp[1] += v;break;case "W":wp[1] -= v;break;case "L":do {wp = [-wp[1], wp[0]];} while ((v -= 90));break;}}console.log(Math.abs(pos[0]) + Math.abs(pos[1]));/*+2,-1 +++ 1,2+++++++++++++++++++++++++++-1,-2 ++++*/
let data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();let lines = data.split(/\n/);const dirs = "ESWN";let pos = [0, 0];let dir = 0;for (let i = 0; i < lines.length; i++) {let a = lines[i][0];const v = +lines[i].substr(1);if (a === "F") {a = dirs[dir];}switch (a) {case "N":pos[0] -= v;break;case "S":pos[0] += v;break;case "E":pos[1] += v;break;case "W":pos[1] -= v;break;case "L":dir = (dir - v / 90 + 4) % 4;break;case "R":dir = (dir + v / 90) % 4;break;}}console.log(Math.abs(pos[0]) + Math.abs(pos[1]));
LL.LL.LLLLLL.LLLLLLLLLLLLLLLLLL.LLLLL..LLLLLLL.LLLLLLLLLLLL.LLLL.LLLLL.LL.LLLLLL.LLLL.LLLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLL.LL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LL...LL.L.L....LL..LL..L.L.L..L.....L...LL.....LLL..L..L..L.....L.L..LLLL...LL.LL.L.......LLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL..LLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLLLLLLLLLL.LL.LLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLL.L......L...LL....L...L.LL.L.....L.LL.L....L...LLL....LL.....LL.L.LLL...LL.L...LLL.L.L...LLLLLLLLLLLL.LLLLLLLL.L.LL.L.LLLLLLLLL.LLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLL.LLLLLLLLLL.LL.LLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLL.LLLLLL.L.LLLLL.LLLLLLLLLLLL.LLLL.LLLLLLL..LLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLL.L.LL.LLLLL.LLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLL.LLLLLL.LLLL.LLLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLL.LLLL.LLLLL...L..L......L..L.L.......LL...L.LL.L...LL...L..LL....L....L.L..L...L...L.L.....LL.....L..LLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLL.LLLLLLLL.LLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL.LL.LLLLLLLL.LLLL.LLLLLL.LLLLLLLLLLL.L.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLL.LLL.LLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLLLLLLLLLL.L.LLL.LLLLLL.LLLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLL.LLLLLLL.LLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLL.......LL.L.L...LL..L....LL....L.L.L....L......L..LL...LL.LLL..L....L......L.LLL.L.....LLLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLL.LLLLLLLLLL.LLLLLLLLL.LLLL.L.LLLL.LLLLLLLL.LLLLLL.L.LLLLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLLLLL.LLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLL.LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLL.LLLLLLLL.LLLL.LLLLLLLL.LLLLLL.LLL..LLLLLLLLLL.LLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLL.LL.LLLLLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLL.LLLL.LLLLLLLLLL.LLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLL.LLL.LLLL.LLLLLLLLLLLLLLLLL.L........L..L.L.LLLLL.......LL.......L..L.L..LL.L......L.......LLL..LLL.LL...L.L...L.LL.L.LLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLLLL..LLLLL.LLLLLLLL.LLLL.LLL..LLLLLL.LLLLLLL.LLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLL..LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLL.LLLL.LLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLL.LLLLLLLL.LLLLLL.LLLL.LLLLLLLLLL.LLLLLL.LLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLLLLL.LLLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLL.LLLLLLLL.LLLLLLLLLLL.LLLLL..L..LL.......L.LLLL.L.....L...L.LL...LLLLL.L.....L..L...LL.LL..L..LLLLLL..........LL.....LLLLLL.LLLLLL.LLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLLLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLL..LLLLL.LLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLL..LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LL.LLLLLLLL.LLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLL.LLLL..LLLLLL.LLLL.LLLLLLLL.LLLLLLLLLLL.LLLLLL...LL....L..L..LL.........L.L...LL..LL.L....L...........LL.L.......L.L.L.......L..L..LL..LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LL.LLL.LLLL.LLLLLLLL.LLLLLL.LLLL.LLLLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLL.LLLLLL.L.LLLLLLLLLLL.LL.LLL.LLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLL.L.LLLL.LLLLLLLLLLLL..L.LLLL.L.LL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLL.LLL.LLLL.LLLLLL.LLLLLLL.LLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.....L.LLL...LL..LL.....L....LL.......L...LL..L..L...L...L.LL.LL.LL...LL..LLL.L..LLL..LLLL.LLLLLLLLLLLLLLLLLLLLL.LLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLL.L.LLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLL.LLLL.LLLLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLL.LLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLL.LLLLLLLLLL.LLLLLLLLLLLLLLL.LLLL..LLL.LLLLLLLLLLLLLL.LLLL..LLLLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLLLLL.LLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLL.LL.LLLLLLLLLLLLL.LL.LLL.LLLLLLLLLLLLL.LLLLLL.LLLL.LLLLL..L..LL.........L....L.L.L.L...L....L...........LL....L..L...L.LL..L..LL.L..LL..L..L.L..L.LLLLLL.LLLLLL.LLLLLLLL.LLLL.LLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLLL....L............L....LL......L.LLL.LLL....LL.....L..L.LL.L........L..L......L.LLL..LL..LL.LL.LLLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLLLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLL.LLLLLLLL.L.LLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL..LLLLL.LLLL.LLLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL..LLLLLLLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLL.LL.LLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLL.L.LLLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLLLLL.LLLLLLLLLL.LLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLLL.L......LLL...L.L.LL.L.....LL.L..L.L.LLLLL....LL..L...L..L.....L.L...L...L.L.LL.LL.L.......LLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLLLL.LLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLL.LLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLL..LLLLLLLLL.LLLLLL.LLLLLLL.LLLLL.LLLLL..LLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLL.LLLL.LLLLL
L.LL.LL.LLLLLLLLL.LLL.L.L..L..LLLL.LL.LLL.LL.LL.LLL.LLLLL.LL..L.L.....LLLLLLLLLLL.LLLLLL.LL.LLLLL.LL
let data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();let state = data.split(/\n/);function get(row, col) {return state[row] && state[row][col];}function replace(line, pos, char) {return line.slice(0, pos) + char + line.slice(pos + 1);}function seatingRound() {let changed = false;let nextState = [...state];for (let i = 0; i < state.length; i++) {for (let j = 0; j < state[i].length; j++) {if (state[i][j] === ".") continue;let occupied = 0;for (let a of [0, 1, -1]) {for (let b of [0, 1, -1]) {if (a === 0 && b === 0) continue;let aa = a;let bb = b;while (get(i + aa, j + bb) === ".") {aa += a;bb += b;}occupied += get(i + aa, j + bb) === "#";}}if (state[i][j] === "#" && occupied >= 5) {nextState[i] = replace(nextState[i], j, "L");changed = true;}if (state[i][j] === "L" && occupied === 0) {nextState[i] = replace(nextState[i], j, "#");changed = true;}}}state = nextState;return changed;}while (seatingRound());const result = state.reduce((acc, row) => acc + [...row].filter((seat) => seat === "#").length, 0);console.log(result);
let data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();let state = data.split(/\n/);function get(row, col) {return state[row] && state[row][col];}function replace(line, pos, char) {return line.slice(0, pos) + char + line.slice(pos + 1);}function seatingRound() {let changed = false;let nextState = [...state];for (let i = 0; i < state.length; i++) {for (let j = 0; j < state[i].length; j++) {if (state[i][j] === ".") continue;let occupied = 0;for (let a of [0, 1, -1]) {for (let b of [0, 1, -1]) {if (a === 0 && b === 0) continue;occupied += get(i + a, j + b) === "#";}}if (state[i][j] === "#" && occupied >= 4) {nextState[i] = replace(nextState[i], j, "L");changed = true;}if (state[i][j] === "L" && occupied === 0) {nextState[i] = replace(nextState[i], j, "#");changed = true;}}}state = nextState;return changed;}while (seatingRound());const result = state.reduce((acc, row) => acc + [...row].filter((seat) => seat === "#").length, 0);console.log(result);
840459314764901251491451111269146389710361223418359686116295911810226661774945114128175471415865100631253251061361582221172807913978112919528711513214088109627346246910111016951487613514289507241394256515712783121333223
2833184231144620484724234945193839111322535817794234103
16101551117196124
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();const lines = data.split(/\n/).map(Number).sort((a, b) => a - b);// inputs only have differences of 1 and 3const input = [0, ...lines, lines[lines.length - 1] + 3];// lengths of found contiguous blocks of valuesconst contiguous = [];for (let i = 0; i < input.length - 1; i++) {if (input[i + 1] - input[i] === 1) {const start = i;while (input[i + 1] - input[i] === 1) {i++;}contiguous.push(i - start + 1);}}// variations[i] = 1 + 1 + 2 + ... + (contiguous[i] - 2)const variations = contiguous.map((v) => Array.from({ length: v - 1 }).reduce((acc, _, i) => acc + i, 1));// answer is all numbers of possible variations multipliedconsole.log(variations.reduce((a, v) => a * v, 1));
let data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();let lines = data.split(/\n/).map(Number).sort((a, b) => a - b);let input = [0, ...lines, lines[lines.length - 1] + 3];let diffs = [0, 0, 0, 0];for (let i = 0; i < input.length - 1; i++) {diffs[input[i + 1] - input[i]]++;}console.log(diffs[1] * diffs[3]);
17421839116133135324711402329303384327419191446444205610712178132511374915162221182324321991426272076282936303133384234572558403744508210947237145817555485470536156606985849410587671411071231018376216142103130121109165143136116224187160151150154183226159330177184185192179295212282225230328339266252267362301304305329414429549336363356369391371404641494905455572518621785519705142460566573468590988872769297376074011189749221099949102712581184239812111224112420061270129014192335137714321452164922971500186424262160187120212283241428093885230823482394249434303398270926672796538537974840310141673364337137356379389250799750484246564702474250157902488852035505848653765463589714281859469936465825267357263107858548863493581688695449444163519630990311273100911383718725108392068811360181381320017182267721372815515225581581119333179061799218902203832935235907378701972146105598332093022199240392508824560325332692880216405002924339716383694825433717376273680841920386235339140651431294376044281449694675947858462384859951488538037016056171697436296083780734339531182596856807543110919811535379274844111216488925015584090519912071047701582711306491000871052911527562108982774881327031363931527071488642183831547051817261598421697931636852269391736611797691804572307364572572327903144294511732528432053782379943472912690963331642852574671366209663035693145473183903867814550504495533906243602263534305563843858357331264744746184217984644433724582216875479062235543535726656637951021489618116678616621959130950667182071365673926574405490778374606182790418658901478888170624715796031145768901593112201610125742614030112701811724691285754128191116470481459717129377914833192360704141587415671691916523149011515739651758635172949719141672023609202861122944853196078297343426941873595780273963827758692454380292895925756902709653294303628991933057284290598929830433064080321961232487505543235348813236436644208652405222043230964870175568267461930465285343503007051640335766937584222954748835558733560884658051825882236722908558890326468362628369212661408120820787131796867373498913261135707912725954116942149900245113171121019410313703804212173572698429411033616110837291136391511167579114140281235059811771268121727241235739412752054208464581702312223764626158055301856506019791571213142732325645322581607200943482136168221608131322688642697310922117345224977572353663922531494229388473681469323943992347101153131711425109448397251633786958032828652464754863792287538356631582902234140862141456030417024794520379644615102437254764464883945029251476409425636529179304138622566574688283982571714490534406297902868834924579381009366854281648351711852838005911076279506797652528286465183111100831585098542795588374315883405789153167810762786716250346613853616315131960616095248995936279104820939141049200106991540137997210126773024129123383147464789151244393159525861156044758229389778162876352165975751166269609168586464173768533176714893179872256333294394236751250200757218255896407211812479202927819222709303231593963342984502233764564264770234318921110276588172315570619307289151322020509322314367399740315328852103522856758397863572342354997350483426356587149498793366434521782403685037532484579933315148414740298436692383665298869685339499587084601498534798541358406598902539583877323622859770707029466644334876672797793106503918476337388569283842383455595569894214670707057511977355121256675116871214165818425335157824363114334584948514326819352271811039893204108241212110974373371121394568124838787212282121991462316031126719464613171326691365636216103834791713917805691803267089152549591017536525161558503256157828474016896395001858318539218834683416698580162135785254282795224744062369871975120385207824112121207600382286735789248703078425155825182266560116230554256333879546846381357372279200043328416150062917276479353362364133121557723136787996363674437732481427563359497516352817655547737665734053361506428066294840958804236305231163426185617441990011594387320154455329590553571975245147157569616541923566076402726887880856563361543910024668852844068166060540644757920943795741285902295344777236996241893677631931110441384629758153806182948815828149241929963786047289406160598460857333875229706411800179176122412557111152261675912035038425144603008171240993475015145483822116876799141593685795212830383786130503063681346692349715291123475192692179751377256120418578476531143578573721573077999015876419643164441235111690153899317213154397233227959352498954025634515334483261479807312457292312723557655184237227183392409761466435010475849275640995572473798628225880690154262973072832651722986527239484701309857156014351046168028130418576511217547413008863736255969327516341146933904400822306842202694653405359503324688045111947280373523857131563334765526984848130578311478203330034960340849348835600946506186764369648385961251035293565763173880435353679198454647648441553699032777229133201564203330752975450150521123339090638193502639380995144509746506437228273864498587416401451878163238551031902362801792225045971251529889899547560285118496141650396655933949110017551718994542773821045720855491919594624631532864765241081844404251356427929501363650477861195732340291364946627671461383571451556457882311942238777511688114683641573892887071620670451731701550464362874350653141832919267061921315368001949298802331961102113312040263629312012280194983244572565952076387178072551000656132720078407362277576744542438272333753057978393862552160269793262007570712560678967962921404509983609430051643194563338803389665148003586173082053275443351434253710734154512102769443754234635065598453277033870614170335608979049994998951301714052543824294088667373055271079063494628547447864715849078296780736420854829737014335632835672551011055604647511283923775810551422629767351820571611596784878792315799462702967798649666510849943686161643348946906744736762484880539875318593677780677845935795928154338814121119734107176523237286810912721587172148209114703196192209344396526151406024560444123893672840011974455671231046257268688117488035213314952835981111635460947786173983060930616676343931391278107634821135267249329122509974651551428995730482180874214922716305940077541543162726474193987435958715766060002731610049274072168223024694919179787507793304025747338180616113470622125472874362109320004748254154086679922211376208212626441297605239892976197937941601916293084268769527285471363509426307801281123614903283933270710336530327816682237733111225977431336887009006931197687267474880631747611354992363365965758284154023186655274345329227952102144595196175785910410956868489098822852139154811394544321867292184433045762556962309947041784620067382800502970989009158928942012045974482361841108510620869785337883493415541244835188554887715890767912346903821590143695052062978812517761059454974464164120482477687751799138599102322782490526478934795366710213641379910223351826773988996350129582373484316381039441593482089419346749848652324917753895052500836918875676744526964977727289116263510438863151385488619671640412405635210750331845300113138853024051277681604714211390208539596121993182022961231348519828814535229683414128909830431341351418466156713581071209165154208694703501533948484543725354649064721168896733493911717928310662220436666633934280494143449812779433259594817602849926122197008568536692040010911819122540760316025236413148884343395085129550122064217147705289205560546024789540938074633213482681076245128034005842937860130891825204468241422264051677047013329109216132527095255870732429574989908435175981676942259618650385777340689564560133449252327551338002959044313422416171696943730370677979139667067073827889972516946954010096597186042464326265896446049774637305256187094303646577020548289491594730184377986811270961486023818090478497172716420061355742722429845160963594612360386348032057
let data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();let lines = data.split(/\n/).map(Number);const range = 25;let f;for (let x = range; x < lines.length; x++) {const test = lines.slice(x - range, x).sort((a, b) => a - b);while (test.length >= 2) {if (test[0] + test[test.length - 1] === lines[x]) break;if (test[0] + test[test.length - 1] < lines[x]) test.shift();if (test[0] + test[test.length - 1] > lines[x]) test.pop();}if (test.length < 2) {f = lines[x];break;}}const window = [0, 1];while (window[1] < lines.length) {const slice = lines.slice(...window);const sum = slice.reduce((a, v) => a + v, 0);if (sum === f) return console.log(Math.min(...slice) + Math.max(...slice));if (sum < f) window[1]++;if (sum > f) window[0]++;if (window[1] === window[0]) window[1]++;}
let data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();let lines = data.split(/\n/).map(Number);const range = 25;for (let x = range; x < lines.length; x++) {const test = lines.slice(x - range, x).sort((a, b) => a - b);while (test.length >= 2) {if (test[0] + test[test.length - 1] === lines[x]) break;if (test[0] + test[test.length - 1] < lines[x]) test.shift();if (test[0] + test[test.length - 1] > lines[x]) test.pop();}if (test.length < 2) return console.log(lines[x]);}
let data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();let lines = data.split(/\n/);const vm = {nop: (acc, pos) => [acc, pos + 1],jmp: (acc, pos, val) => [acc, pos + Number(val)],acc: (acc, pos, val) => [acc + Number(val), pos + 1],brk: () => {throw false;},ret: (acc) => {throw acc;},};function run(prog) {let pos = 0;let acc = 0;prog.push("ret");do {if (pos >= prog.length) throw false;const prev = pos;const [ins, val] = prog[pos].split(" ");[acc, pos] = vm[ins](acc, pos, val);prog[prev] = "brk";} while (true);}lines.forEach((line, i) => {const t = [...lines];const [ins, val] = line.split(" ");if (!["jmp", "nop"].includes(ins)) return;t[i] = ["jmp", "nop"][+(ins === "jmp")] + " " + val;try {run(t);} catch (e) {if (e !== false) return console.log(e);}});
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();const lines = data.split(/\n/);let pos = 0;let acc = 0;const vm = {nop: (acc, pos) => [acc, pos + 1],jmp: (acc, pos, val) => [acc, pos + Number(val)],acc: (acc, pos, val) => [acc + Number(val), pos + 1],brk: () => {throw false;},};try {do {const [ins, val] = lines[pos].split(" ");const prev = pos;[acc, pos] = vm[ins](acc, pos, val);lines[prev] = "brk";} while (true);} catch (e) {console.log(acc);}
acc +8acc +37jmp +328jmp +574nop +321acc +17jmp +450acc +46acc -15nop -5acc +48jmp +358jmp +29acc +23jmp +11acc -14jmp +561acc +9acc +17jmp +136jmp +394acc +24acc +37acc +19jmp +241acc +38acc +44acc -5jmp -8acc +50acc -9acc +5jmp +424acc -15nop +93acc -1jmp +414jmp +548jmp +454acc +39jmp +490jmp +103jmp +214acc +37jmp +164acc +34jmp +362acc +24acc +32jmp +375jmp +500acc +23nop -1nop +463jmp +108acc +14jmp +106acc +20nop +298nop -39jmp +321jmp +1jmp +515nop +6acc +3acc +18acc -10jmp +353jmp -43jmp +1acc +0acc +7jmp +507nop +396jmp -62acc +30acc -13jmp +466jmp +137acc +6jmp +211acc +33acc +4jmp +269acc +50nop -65acc +18jmp -54jmp -68nop +38acc -6jmp +165nop +342acc +31acc +30nop +465jmp +273acc +35jmp +201acc +13acc +18acc +28acc +40jmp +244nop -63acc +25acc +16jmp -32acc -6acc +17jmp +298jmp +358acc +28jmp +1acc +27jmp +204jmp +4acc +17acc +47jmp +83acc -14jmp -42acc +0acc +14acc -9acc +13jmp +108acc +1acc -8acc +44jmp +420acc -1acc +24jmp +101acc -10nop +493nop +140acc -12jmp -134acc +21nop +385acc +38acc +4jmp +349jmp +225nop +432jmp +421acc +33acc +11jmp +462acc +21acc +11acc +5acc +15jmp +260nop +308acc -6acc -14acc -3jmp +178nop -33jmp +80acc +33acc -11acc +39jmp +145jmp +64acc +49acc +47acc +13jmp +331acc +1jmp -10acc +37nop +276jmp +259acc +16acc +38jmp +121acc +11nop +301acc +2jmp +94nop +186nop +255jmp -106nop -171acc +35acc -1acc +44jmp +129acc +27acc -6jmp -150acc +12acc +19acc +15jmp +247nop +309nop +429nop -131jmp +410jmp +187acc -4acc +45acc +3acc -16jmp -166acc +41jmp +276acc -2nop +23acc +11acc +19jmp +271acc +35jmp +136acc +46acc -9nop +189jmp +1jmp -201acc -11nop -190acc +9jmp +175acc +25acc +10acc -12jmp -50acc +44jmp +132acc -14jmp -71acc +47acc -9jmp -125jmp +1acc -5acc +47jmp +184nop -26jmp -48acc +24acc +33acc +38jmp +246acc +38nop -114nop +42nop +131jmp +256acc +48nop -126acc +20jmp +189acc +39nop +206acc +2acc +8jmp +279acc +31acc +8acc -14jmp +221acc -14acc +4jmp +161jmp +188acc +13acc +50acc -10acc +42jmp -169acc +25jmp +292acc +40jmp +53acc -1acc +29acc +20jmp -240jmp +4acc +28acc -9jmp -158jmp +305acc +47nop -250nop -155jmp +321acc +24acc +48acc +41acc -2jmp -61acc +40jmp +1jmp -209jmp +231acc +28acc +13jmp +45nop +147nop -35jmp -36acc +33acc +12acc +7jmp -62nop +1acc +3acc +18jmp +320acc +9acc -19acc -3acc +11jmp -151acc +11acc +31jmp -296acc -10acc +21jmp +104acc +46acc +22jmp +29jmp +1jmp +187acc -7acc +28acc +1acc +8jmp +74acc +45jmp +114acc +21nop -204jmp -327acc +5acc +36jmp -148jmp +285acc +2jmp +1jmp +197jmp +271nop +137nop +279acc +41jmp +1acc +43jmp +214nop -307jmp +245acc -13nop -210jmp +56acc -7acc +18acc +12jmp +88acc -18acc +32jmp +1jmp -199acc -9jmp -317acc -17acc +2nop +202acc +20jmp +227jmp -44jmp -28acc -9acc +12acc -10acc +3jmp -115acc +19acc +22jmp -340acc -7acc +7acc +32acc -11jmp -19acc +7jmp +1acc +14jmp -89acc +39jmp +75acc +32nop +215acc +40jmp +83jmp +204acc +1acc +29acc -2jmp +70acc -15acc -1nop -381jmp +27nop +65acc +40jmp -299acc +16acc +13jmp -24acc +26jmp -20acc +36acc +10nop -274jmp -394jmp +165acc +33acc -7jmp -419jmp -386nop -298nop -406jmp -108acc +10acc +46acc +0nop +50jmp -343jmp -5acc -8jmp -233acc +13acc +43jmp +87jmp +24acc +35nop -421acc +46jmp -35jmp -55acc +24acc +17acc -16acc +26jmp +128nop -11jmp +167acc +25acc +14nop -59jmp -108acc +50acc -18acc +45jmp -390acc -2acc +16jmp +123acc +41jmp -242nop -338acc -15acc +44jmp -227nop +159acc +10jmp -298jmp -338acc +10acc +9acc +24nop -173jmp -330nop -453acc +2jmp +1jmp -138acc +21acc +50jmp -451acc +19acc -7nop -454jmp +85acc -11acc +19jmp -394acc +27acc +4acc +42jmp -491acc +36acc +33acc -5acc +39jmp -425acc +46acc +10jmp -452acc -1acc +36jmp -339acc +26acc +24acc -8jmp -376acc +35jmp +1acc -4acc +24jmp -71acc +46acc -4acc -8jmp -289acc +11acc +32acc +32acc +26jmp -214acc +46nop -485acc +16jmp -287jmp -95acc +36nop -376acc -13jmp -406nop -278acc +22acc +21acc +33jmp -463jmp +11nop -346acc +33jmp -86acc -17nop -350nop +83jmp -299acc +31acc +28jmp -516acc -13acc +15acc -19jmp -338acc +21acc +10jmp -309jmp -473nop -150jmp +44acc +45acc +41acc +41nop -139jmp -448jmp +1jmp -103nop -433acc +1acc -1acc +0jmp -289jmp -531jmp -134acc +21acc +14jmp -51jmp -520jmp -275acc +6acc +42jmp -256acc +26acc +36jmp -17acc +11acc +32nop -244acc +42jmp -546jmp -565acc +31acc -12nop -496jmp -531acc +25nop -196acc -18acc +10jmp -22nop -231jmp -41jmp -555acc +37acc -14acc +43jmp -462acc -11acc +43acc +15jmp -229acc +0acc +20acc -18nop -3jmp -240acc +37jmp -520nop -424jmp +1jmp +1nop -158jmp -19acc +0nop -591acc +29nop -192jmp -24nop -55jmp -364acc +5acc +33jmp -176acc +25acc +6acc +21acc +16jmp +1
let data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();let lines = data.split(/\n/);const vm = {nop: (acc, pos) => [acc, pos + 1],jmp: (acc, pos, val) => [acc, pos + Number(val)],acc: (acc, pos, val) => [acc + Number(val), pos + 1],};function test(testLines) {let pos = 0;let acc = 0;let was = Array.from({ length: testLines.length }, () => false);do {if (pos === testLines.length) return acc;if (pos > testLines.length || was[pos]) return false;was[pos] = true;const [ins, val] = testLines[pos].split(" ");[acc, pos] = vm[ins](acc, pos, val);} while (true);}lines.forEach((line, i) => {const t = [...lines];const [ins, val] = line.split(" ");switch (ins) {case "jmp":t[i] = "nop";break;case "nop":t[i] = "jmp " + val;break;default:return;}let result = test(t);if (result !== false) return console.log(result);});
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();const lines = data.split(/\n/);let pos = 0;let acc = 0;let was = Array.from({ length: lines.length }, () => false);const vm = {nop: (acc, pos) => [acc, pos + 1],jmp: (acc, pos, val) => [acc, pos + Number(val)],acc: (acc, pos, val) => [acc + Number(val), pos + 1],};do {if (was[pos]) return console.log(acc);was[pos] = true;const [ins, val] = lines[pos].split(" ");[acc, pos] = vm[ins](acc, pos, val);} while (true);
wavy bronze bags contain 5 striped gold bags, 5 light tomato bags.drab indigo bags contain 4 pale bronze bags, 2 mirrored lavender bags.pale olive bags contain 3 faded bronze bags, 5 wavy orange bags, 3 clear black bags, 1 striped purple bag.faded white bags contain 5 vibrant violet bags, 4 light teal bags.mirrored magenta bags contain 2 muted cyan bags, 3 vibrant crimson bags.dull purple bags contain 1 striped fuchsia bag.dull lime bags contain 2 posh green bags, 2 muted gold bags, 1 light bronze bag, 2 pale teal bags.pale indigo bags contain 5 drab blue bags, 3 posh fuchsia bags.dull lavender bags contain 5 plaid orange bags.pale teal bags contain 2 dark silver bags, 1 faded silver bag, 1 dotted brown bag.clear lime bags contain 5 bright crimson bags, 2 dim chartreuse bags.faded coral bags contain 5 muted silver bags, 5 plaid gold bags.dull blue bags contain 4 mirrored turquoise bags.muted salmon bags contain 2 dim chartreuse bags, 2 mirrored tan bags, 2 plaid tomato bags, 3 clear cyan bags.dim orange bags contain 5 light purple bags.posh chartreuse bags contain 5 pale red bags, 2 pale gold bags, 3 dotted brown bags.pale red bags contain 4 mirrored green bags.dotted turquoise bags contain 2 posh maroon bags, 1 striped silver bag, 2 pale blue bags, 4 drab lime bags.light blue bags contain 4 muted fuchsia bags.shiny teal bags contain 5 faded brown bags.drab gold bags contain 1 dull purple bag, 2 wavy magenta bags, 1 faded red bag, 1 wavy silver bag.plaid maroon bags contain 3 dark gold bags, 2 dim silver bags, 1 vibrant plum bag.shiny beige bags contain 3 mirrored bronze bags.wavy chartreuse bags contain 1 muted bronze bag.posh teal bags contain 5 dark cyan bags, 5 posh green bags.faded chartreuse bags contain 3 muted yellow bags.clear crimson bags contain 2 striped gold bags, 4 bright crimson bags, 1 dull red bag.plaid turquoise bags contain 3 wavy crimson bags, 5 light gold bags, 2 mirrored olive bags, 1 posh white bag.dotted gray bags contain 4 posh teal bags, 5 dotted lime bags, 4 clear fuchsia bags.drab purple bags contain 2 shiny blue bags.dim black bags contain 3 vibrant white bags.muted cyan bags contain 2 light bronze bags.dim aqua bags contain 5 striped brown bags, 3 bright white bags, 1 dark purple bag, 3 wavy aqua bags.light violet bags contain 4 wavy lavender bags.light tan bags contain 4 dim cyan bags.muted chartreuse bags contain 4 drab blue bags, 4 dim yellow bags, 4 vibrant red bags, 2 faded violet bags.faded purple bags contain 4 clear salmon bags, 4 pale white bags, 3 dim indigo bags, 2 bright fuchsia bags.shiny violet bags contain 1 dim aqua bag, 3 shiny coral bags.dim green bags contain 1 pale cyan bag, 2 faded purple bags, 1 light gold bag, 5 shiny fuchsia bags.dotted teal bags contain 4 muted lavender bags.drab green bags contain 3 pale aqua bags, 5 striped chartreuse bags, 5 mirrored gray bags, 2 mirrored salmon bags.pale orange bags contain 3 bright teal bags, 2 dark green bags.wavy lavender bags contain 3 wavy aqua bags, 5 dull purple bags.shiny gray bags contain 1 light blue bag, 3 drab beige bags, 1 vibrant blue bag.dull yellow bags contain 5 dark teal bags, 1 dull teal bag.muted lime bags contain 3 shiny aqua bags.pale yellow bags contain 3 dull silver bags, 1 shiny green bag, 5 muted silver bags.dark salmon bags contain 3 mirrored fuchsia bags, 1 light blue bag, 4 mirrored green bags.faded fuchsia bags contain 5 dotted lavender bags, 4 clear bronze bags, 3 muted white bags.dark blue bags contain 3 mirrored orange bags.striped red bags contain 3 dotted lime bags, 4 mirrored orange bags, 2 dim yellow bags, 1 dull silver bag.faded lime bags contain 2 faded beige bags, 5 dark coral bags, 5 dark maroon bags.dim salmon bags contain 5 dark indigo bags, 4 dull aqua bags.light plum bags contain 2 dotted tan bags, 5 mirrored plum bags.pale tomato bags contain 1 posh violet bag.light olive bags contain 1 clear blue bag, 5 clear purple bags.faded bronze bags contain 1 mirrored lime bag.mirrored orange bags contain 3 shiny green bags, 2 vibrant white bags, 1 dull black bag.vibrant purple bags contain 2 dull gray bags, 2 dark magenta bags, 4 wavy green bags.dull green bags contain 5 shiny tomato bags.plaid magenta bags contain 4 dim plum bags, 2 dull tomato bags, 2 drab violet bags.bright magenta bags contain 5 dim plum bags, 3 mirrored teal bags, 5 dim red bags, 2 plaid maroon bags.dark beige bags contain 4 shiny aqua bags.dark orange bags contain 1 dark violet bag, 4 mirrored green bags.dim violet bags contain 5 shiny yellow bags, 1 dark lime bag, 2 vibrant coral bags, 3 mirrored turquoise bags.light cyan bags contain 2 mirrored gold bags.striped turquoise bags contain 3 mirrored aqua bags, 3 faded violet bags, 1 plaid maroon bag.dull plum bags contain 4 posh gold bags, 3 light salmon bags, 4 dull silver bags, 1 dark salmon bag.posh green bags contain 3 clear blue bags, 3 dull silver bags, 2 drab turquoise bags, 2 light silver bags.faded salmon bags contain 2 faded black bags.dull violet bags contain 2 plaid lavender bags, 4 plaid crimson bags, 1 bright crimson bag, 4 striped bronze bags.posh coral bags contain 4 plaid gold bags.shiny green bags contain no other bags.mirrored turquoise bags contain 3 vibrant crimson bags, 2 faded turquoise bags, 4 muted aqua bags, 4 drab lavender bags.dim yellow bags contain 1 dark tomato bag, 4 mirrored orange bags, 1 bright blue bag, 1 wavy red bag.vibrant orange bags contain 1 drab turquoise bag.muted black bags contain 3 dotted purple bags.faded brown bags contain 2 vibrant white bags, 1 dim silver bag.posh gold bags contain 5 bright green bags.pale salmon bags contain 3 faded gray bags, 2 posh tan bags, 5 pale cyan bags.dull brown bags contain 5 drab lime bags, 1 plaid lavender bag.dull fuchsia bags contain 4 dim silver bags, 1 shiny gold bag, 1 faded violet bag.mirrored chartreuse bags contain 3 dark gray bags, 3 muted teal bags, 2 mirrored black bags.dotted gold bags contain 1 mirrored red bag, 4 dim indigo bags, 4 faded cyan bags.striped tomato bags contain 5 dull gray bags, 4 light tomato bags.clear lavender bags contain 1 clear coral bag, 4 wavy turquoise bags, 5 dark maroon bags.dark chartreuse bags contain 2 clear beige bags.dark brown bags contain 4 bright white bags, 4 faded turquoise bags, 1 clear black bag, 1 wavy lavender bag.clear gold bags contain 5 vibrant gray bags, 5 wavy white bags.plaid cyan bags contain 5 dotted salmon bags, 5 vibrant cyan bags, 3 dark black bags, 4 shiny aqua bags.dark tomato bags contain 2 muted white bags, 5 bright silver bags, 5 posh red bags, 3 dull black bags.pale bronze bags contain 2 wavy coral bags, 2 drab blue bags, 5 clear purple bags, 4 vibrant blue bags.clear tan bags contain 1 dull black bag, 2 drab fuchsia bags.dotted aqua bags contain 5 striped brown bags, 3 vibrant bronze bags, 1 wavy brown bag, 2 plaid red bags.wavy blue bags contain 1 dark aqua bag, 2 striped purple bags, 2 dark coral bags, 5 plaid red bags.clear indigo bags contain 4 shiny gold bags, 4 bright blue bags.mirrored plum bags contain 3 striped gold bags, 5 dim fuchsia bags.faded tomato bags contain 2 wavy green bags.dark cyan bags contain 1 dim yellow bag, 4 dark silver bags, 5 drab aqua bags.striped blue bags contain 4 dull magenta bags, 5 plaid maroon bags, 5 plaid crimson bags.posh turquoise bags contain 2 pale silver bags.vibrant lavender bags contain 3 faded plum bags, 1 dark tomato bag.mirrored lime bags contain 1 faded lavender bag, 5 light silver bags.drab fuchsia bags contain 5 faded lavender bags, 2 muted silver bags, 3 pale indigo bags.clear olive bags contain 1 dotted green bag.dim gray bags contain 4 pale tan bags.light aqua bags contain 5 mirrored lime bags, 2 dim white bags, 1 dark gold bag, 5 faded black bags.striped lavender bags contain 4 faded green bags.plaid brown bags contain 4 vibrant turquoise bags, 1 posh violet bag.bright lavender bags contain 1 faded black bag, 2 posh tomato bags.pale purple bags contain 4 light silver bags, 4 plaid gold bags.posh gray bags contain 1 drab lime bag, 2 dark chartreuse bags, 3 dim fuchsia bags, 3 vibrant red bags.dull turquoise bags contain 5 vibrant fuchsia bags.shiny plum bags contain 2 striped fuchsia bags, 5 dark red bags.posh purple bags contain 4 vibrant gray bags, 1 plaid turquoise bag.muted teal bags contain 3 mirrored lime bags, 5 shiny tomato bags.shiny silver bags contain 2 clear cyan bags.bright green bags contain 4 plaid gray bags, 4 dull black bags, 1 clear blue bag, 1 dull red bag.clear orange bags contain 5 bright plum bags, 2 shiny red bags, 2 vibrant lavender bags.muted coral bags contain 5 dark brown bags.posh lime bags contain 2 dim silver bags.clear maroon bags contain 4 dotted chartreuse bags.dim red bags contain 5 muted yellow bags, 3 dark violet bags, 3 light tomato bags.faded red bags contain 1 striped lavender bag, 3 mirrored gray bags.bright maroon bags contain 2 posh crimson bags.muted gold bags contain 5 vibrant tan bags.dotted lavender bags contain 3 shiny green bags, 2 muted fuchsia bags.shiny magenta bags contain 4 shiny red bags.clear salmon bags contain 2 faded fuchsia bags, 4 posh crimson bags, 2 wavy fuchsia bags.dim lavender bags contain 1 posh magenta bag, 1 drab silver bag.vibrant aqua bags contain 5 dim teal bags, 5 bright blue bags.dim maroon bags contain 4 light white bags.striped tan bags contain 1 light aqua bag, 4 dim chartreuse bags.drab lime bags contain 2 dim blue bags.mirrored purple bags contain 5 striped tomato bags, 3 wavy tomato bags.dark violet bags contain 2 vibrant red bags, 1 dim silver bag.wavy beige bags contain 2 muted violet bags, 1 bright white bag, 5 vibrant red bags, 1 faded lavender bag.dim gold bags contain 1 wavy turquoise bag, 5 dim plum bags, 3 shiny silver bags.dotted magenta bags contain 2 vibrant white bags, 4 vibrant tan bags, 2 muted orange bags.plaid coral bags contain 5 dark brown bags, 2 posh coral bags, 2 dull crimson bags, 4 vibrant violet bags.wavy silver bags contain 2 dim chartreuse bags, 2 bright crimson bags, 4 mirrored green bags, 5 striped turquoise bags.mirrored olive bags contain 1 light purple bag, 4 muted silver bags.muted violet bags contain no other bags.bright red bags contain 1 muted red bag, 2 posh indigo bags, 3 shiny purple bags, 4 clear salmon bags.dotted fuchsia bags contain 3 muted gold bags, 3 mirrored yellow bags, 1 plaid maroon bag, 1 dull purple bag.mirrored cyan bags contain 1 muted fuchsia bag, 2 pale lavender bags.plaid beige bags contain 4 dotted violet bags, 1 mirrored salmon bag, 5 mirrored plum bags.pale magenta bags contain 3 vibrant indigo bags, 4 drab blue bags, 1 wavy violet bag.dim olive bags contain 2 drab indigo bags, 4 clear turquoise bags, 2 plaid tan bags.wavy fuchsia bags contain 1 muted silver bag, 3 striped red bags.drab olive bags contain 3 striped turquoise bags, 5 dim brown bags, 4 vibrant crimson bags.dull crimson bags contain 1 dotted tomato bag, 5 light silver bags, 1 dull black bag, 1 mirrored orange bag.faded beige bags contain 4 mirrored aqua bags, 2 faded plum bags, 3 posh aqua bags, 2 muted violet bags.posh black bags contain 1 muted chartreuse bag, 2 faded salmon bags.shiny turquoise bags contain 3 striped plum bags, 4 dull purple bags, 3 pale red bags, 4 dim brown bags.bright beige bags contain 3 drab white bags, 2 plaid olive bags.dim silver bags contain 5 mirrored yellow bags, 5 dark gray bags.muted bronze bags contain 3 pale black bags.clear black bags contain 4 dark gray bags, 2 drab magenta bags.posh violet bags contain 1 muted gray bag, 4 dark blue bags.light gold bags contain 1 mirrored silver bag.faded magenta bags contain 3 light gray bags.dotted crimson bags contain 3 clear crimson bags, 4 bright white bags, 5 bright green bags.striped coral bags contain 1 pale beige bag.drab brown bags contain 3 mirrored white bags, 4 clear crimson bags.clear tomato bags contain 5 dim magenta bags, 3 dull magenta bags, 4 dim turquoise bags.pale maroon bags contain 5 dark aqua bags.dark silver bags contain 2 bright blue bags, 2 pale yellow bags, 3 mirrored lime bags.striped purple bags contain 2 wavy red bags.wavy violet bags contain 2 dark gold bags, 1 plaid red bag.clear coral bags contain 5 clear violet bags, 2 clear crimson bags, 4 vibrant white bags.striped brown bags contain 2 posh red bags.pale brown bags contain 5 posh cyan bags, 3 clear salmon bags.dotted red bags contain 3 wavy aqua bags, 1 mirrored bronze bag, 2 dark silver bags, 1 pale tan bag.faded plum bags contain 2 striped brown bags.posh olive bags contain 5 muted white bags, 3 mirrored tomato bags, 4 dull olive bags.faded violet bags contain 1 mirrored yellow bag, 1 vibrant white bag, 3 mirrored orange bags.light silver bags contain no other bags.striped aqua bags contain 4 dull gray bags, 5 dark lavender bags, 4 shiny cyan bags.vibrant fuchsia bags contain 3 drab beige bags, 2 dim beige bags.shiny white bags contain 2 posh aqua bags, 4 faded gray bags.muted green bags contain 4 dim coral bags, 4 wavy turquoise bags, 3 clear lime bags, 1 striped black bag.dim tan bags contain 5 pale chartreuse bags, 1 mirrored cyan bag, 1 light maroon bag, 5 muted chartreuse bags.faded olive bags contain 1 light salmon bag, 2 wavy blue bags, 3 drab lavender bags.drab cyan bags contain 1 faded cyan bag.muted magenta bags contain 3 clear purple bags, 4 pale aqua bags.wavy maroon bags contain 1 wavy bronze bag.faded green bags contain 2 mirrored gray bags, 4 wavy gray bags, 3 dark salmon bags.wavy purple bags contain 2 posh red bags, 5 bright white bags.vibrant black bags contain 4 plaid silver bags.wavy white bags contain 3 dim chartreuse bags.dark magenta bags contain 2 dim lime bags.dull tan bags contain 1 posh red bag, 2 shiny green bags, 3 pale yellow bags, 2 faded salmon bags.pale lavender bags contain 4 dim red bags.mirrored black bags contain 1 plaid gray bag.posh silver bags contain 4 wavy purple bags, 4 vibrant blue bags, 1 dull fuchsia bag, 5 faded brown bags.plaid blue bags contain 5 pale yellow bags, 5 vibrant salmon bags, 4 wavy cyan bags.plaid purple bags contain 1 bright bronze bag, 2 vibrant blue bags, 1 shiny salmon bag, 5 faded magenta bags.striped orange bags contain 5 mirrored black bags, 2 clear cyan bags, 2 wavy yellow bags, 5 dim aqua bags.pale chartreuse bags contain 1 shiny blue bag, 4 shiny tomato bags, 1 bright lime bag, 5 dim blue bags.mirrored lavender bags contain 4 shiny gold bags, 3 dull crimson bags.bright blue bags contain 5 mirrored yellow bags, 5 light silver bags.dull teal bags contain 1 drab aqua bag, 4 dim coral bags, 3 muted yellow bags.mirrored indigo bags contain 3 dim brown bags.dotted coral bags contain 1 light lime bag, 5 mirrored indigo bags, 5 wavy indigo bags.light white bags contain 1 vibrant coral bag.faded yellow bags contain 3 light white bags.plaid black bags contain 5 dim indigo bags, 2 dull olive bags.dim cyan bags contain 5 shiny blue bags, 5 drab black bags.plaid tomato bags contain 4 dull crimson bags.bright yellow bags contain 5 mirrored green bags, 2 dim yellow bags.clear magenta bags contain 4 dim cyan bags, 4 bright orange bags.vibrant olive bags contain 4 pale turquoise bags.dull orange bags contain 1 mirrored yellow bag, 2 clear purple bags.drab tan bags contain 5 dotted salmon bags.dark black bags contain 4 bright magenta bags, 3 striped lime bags.faded teal bags contain 2 dark red bags, 3 plaid teal bags, 2 vibrant red bags.posh magenta bags contain 3 dark tan bags.dim indigo bags contain 2 dotted brown bags, 2 dull tan bags, 1 dark indigo bag, 3 dim fuchsia bags.vibrant red bags contain 2 muted fuchsia bags, 5 bright blue bags.mirrored tomato bags contain 4 shiny tomato bags, 1 dull orange bag.dark lime bags contain 3 plaid tan bags.vibrant silver bags contain 5 pale yellow bags, 2 faded lime bags.faded tan bags contain 4 pale violet bags, 3 muted gold bags, 3 vibrant red bags.pale beige bags contain 5 dark blue bags, 1 drab white bag, 3 faded crimson bags, 3 dull gray bags.wavy teal bags contain 1 posh maroon bag, 2 clear violet bags.bright turquoise bags contain 2 pale aqua bags.striped chartreuse bags contain 2 striped tomato bags, 2 dark red bags, 3 posh coral bags, 4 mirrored fuchsia bags.wavy yellow bags contain 5 striped gold bags, 1 striped maroon bag, 4 dull fuchsia bags, 3 shiny gold bags.dull salmon bags contain 5 plaid cyan bags.shiny bronze bags contain 5 pale indigo bags, 1 mirrored orange bag, 1 vibrant bronze bag.dull red bags contain 5 wavy beige bags.dotted green bags contain 2 clear indigo bags.plaid fuchsia bags contain 2 vibrant salmon bags, 1 light silver bag.striped crimson bags contain 3 dotted bronze bags, 2 shiny coral bags.mirrored teal bags contain 2 clear purple bags, 5 muted yellow bags.plaid gray bags contain 1 muted silver bag, 2 pale yellow bags.pale gray bags contain 5 drab lavender bags, 4 mirrored aqua bags.clear plum bags contain 3 dull blue bags, 5 clear chartreuse bags.light salmon bags contain 3 bright silver bags, 3 clear black bags, 1 bright crimson bag, 4 bright white bags.dark tan bags contain 4 shiny bronze bags, 1 mirrored chartreuse bag, 5 bright silver bags, 4 clear black bags.vibrant bronze bags contain 4 vibrant teal bags, 3 dark silver bags, 2 mirrored green bags.light teal bags contain 5 drab blue bags, 4 clear red bags, 1 drab aqua bag.plaid plum bags contain 2 faded yellow bags, 5 striped maroon bags.dull silver bags contain no other bags.mirrored beige bags contain 4 dotted blue bags, 3 clear indigo bags.pale aqua bags contain 2 shiny blue bags, 1 dim red bag, 1 posh teal bag.wavy orange bags contain 5 pale red bags, 3 wavy purple bags, 5 shiny aqua bags.dotted silver bags contain 3 dim beige bags, 5 striped silver bags, 2 pale brown bags, 1 muted white bag.dotted orange bags contain 3 plaid violet bags, 1 pale salmon bag, 4 dull bronze bags.vibrant turquoise bags contain 2 drab silver bags.clear cyan bags contain 5 shiny green bags, 4 dark chartreuse bags.dotted tan bags contain 4 vibrant blue bags.mirrored brown bags contain 3 faded olive bags.bright bronze bags contain 4 light yellow bags, 1 mirrored orange bag, 3 light silver bags.plaid lavender bags contain 1 posh violet bag, 4 muted yellow bags, 3 bright gold bags.bright coral bags contain 3 posh teal bags, 5 wavy purple bags.faded aqua bags contain 1 faded black bag.posh yellow bags contain 1 vibrant violet bag, 4 drab blue bags.plaid red bags contain 3 mirrored orange bags, 2 muted gold bags, 5 faded black bags.muted silver bags contain no other bags.bright black bags contain 4 plaid teal bags, 2 wavy lavender bags, 5 posh tan bags.dim white bags contain 1 mirrored orange bag, 1 dotted lavender bag, 4 muted yellow bags.posh brown bags contain 2 dark purple bags, 3 plaid lavender bags.dotted plum bags contain 4 bright teal bags.plaid silver bags contain 1 dark coral bag, 5 shiny coral bags.vibrant chartreuse bags contain 1 shiny magenta bag, 4 muted crimson bags, 2 dull tan bags, 2 striped cyan bags.drab red bags contain 3 drab aqua bags, 1 dark yellow bag, 2 mirrored gray bags.dull gold bags contain 5 dark coral bags, 2 dark blue bags, 5 bright orange bags, 5 muted lavender bags.dull cyan bags contain 3 faded tan bags, 3 muted teal bags, 1 muted orange bag, 4 striped bronze bags.drab lavender bags contain 4 faded lavender bags, 2 light blue bags, 3 posh fuchsia bags.bright tan bags contain 1 faded tan bag, 4 vibrant coral bags.shiny indigo bags contain 2 dark silver bags.dark turquoise bags contain 3 dark purple bags.drab magenta bags contain 2 bright white bags, 5 muted silver bags, 5 posh red bags.vibrant coral bags contain 5 plaid orange bags, 5 pale gold bags, 1 dark yellow bag, 4 dim yellow bags.clear yellow bags contain 5 plaid lavender bags, 1 vibrant coral bag, 1 posh coral bag, 4 vibrant brown bags.bright indigo bags contain 5 bright black bags, 4 plaid crimson bags, 2 dim fuchsia bags.plaid violet bags contain 1 drab crimson bag, 4 dotted cyan bags, 4 shiny green bags.dim blue bags contain 1 dotted lavender bag, 5 clear purple bags.vibrant plum bags contain no other bags.clear bronze bags contain 5 dull tan bags.striped green bags contain 1 wavy bronze bag, 4 light silver bags, 3 posh aqua bags.mirrored gold bags contain 1 pale tan bag, 1 shiny bronze bag, 5 dim beige bags.plaid lime bags contain 1 mirrored fuchsia bag.posh salmon bags contain 3 dim brown bags, 4 mirrored silver bags.wavy coral bags contain 4 light orange bags, 4 shiny orange bags, 4 dark blue bags, 1 bright yellow bag.clear teal bags contain 2 posh white bags.mirrored aqua bags contain no other bags.light green bags contain 3 posh chartreuse bags, 3 shiny red bags, 1 dim silver bag, 4 faded crimson bags.muted aqua bags contain 1 shiny green bag, 3 shiny gold bags, 5 light blue bags.posh maroon bags contain 5 pale yellow bags, 2 dim red bags, 5 wavy beige bags, 1 bright blue bag.faded gray bags contain 3 faded orange bags.plaid orange bags contain 1 dark brown bag, 4 dotted salmon bags, 4 clear violet bags, 1 clear indigo bag.striped indigo bags contain 2 muted gray bags, 4 dim brown bags, 4 clear black bags.bright salmon bags contain 3 dark tomato bags, 5 pale tomato bags, 2 dim magenta bags, 3 dotted cyan bags.wavy aqua bags contain 5 dark violet bags, 4 dim yellow bags, 2 dark blue bags.plaid olive bags contain 2 dull red bags.bright teal bags contain 2 shiny green bags.vibrant beige bags contain 5 dark teal bags, 3 plaid turquoise bags.dull chartreuse bags contain 4 pale blue bags, 2 drab violet bags, 2 dotted beige bags.dotted brown bags contain 5 posh lime bags, 5 muted gray bags.muted plum bags contain 4 clear violet bags, 2 shiny green bags, 1 dotted fuchsia bag.muted blue bags contain 5 drab tomato bags.dull bronze bags contain 3 bright magenta bags, 3 muted purple bags, 2 striped red bags, 1 clear gray bag.shiny red bags contain 1 shiny green bag, 2 muted white bags.shiny purple bags contain 1 wavy red bag, 1 drab magenta bag.plaid tan bags contain 4 wavy bronze bags, 3 clear fuchsia bags.drab orange bags contain 4 shiny salmon bags.faded gold bags contain 2 pale bronze bags, 5 striped plum bags, 2 muted violet bags.light magenta bags contain 5 bright tomato bags.light yellow bags contain 5 posh gold bags, 5 faded lime bags.mirrored maroon bags contain 5 posh plum bags, 5 pale gold bags, 5 vibrant maroon bags.dark coral bags contain 3 shiny red bags, 3 posh fuchsia bags, 1 striped gold bag.dark teal bags contain 2 striped red bags, 2 striped turquoise bags.dark purple bags contain 1 clear blue bag.plaid gold bags contain 2 posh teal bags, 4 dim yellow bags, 3 pale red bags.dim coral bags contain 4 dull plum bags, 5 faded violet bags.vibrant salmon bags contain 4 plaid silver bags, 5 faded green bags, 5 clear indigo bags.bright brown bags contain 1 shiny plum bag, 1 dim magenta bag, 5 shiny turquoise bags, 4 dim yellow bags.vibrant crimson bags contain 4 pale red bags.posh crimson bags contain 4 plaid olive bags, 3 plaid orange bags.faded indigo bags contain 1 clear red bag.wavy red bags contain 1 vibrant plum bag, 5 dotted lime bags.faded lavender bags contain 1 mirrored yellow bag, 4 vibrant plum bags.drab silver bags contain 3 dark gray bags, 3 muted fuchsia bags.pale black bags contain 4 posh white bags, 3 pale blue bags, 5 shiny plum bags, 1 posh salmon bag.posh tan bags contain 2 mirrored yellow bags, 3 striped bronze bags.drab aqua bags contain 1 dull silver bag, 1 dark tomato bag.wavy plum bags contain 3 clear violet bags.shiny crimson bags contain 5 drab lime bags.shiny lime bags contain 5 vibrant teal bags, 5 faded black bags, 1 dull black bag, 5 clear purple bags.dark maroon bags contain 3 dull black bags.faded blue bags contain 4 bright blue bags, 1 mirrored lime bag, 5 shiny green bags.clear turquoise bags contain 2 dim silver bags, 4 muted coral bags, 3 clear bronze bags, 4 light orange bags.striped yellow bags contain 1 dotted brown bag, 2 plaid coral bags.pale coral bags contain 5 faded crimson bags, 3 drab tan bags, 2 dotted olive bags, 3 shiny blue bags.wavy black bags contain 1 mirrored yellow bag.muted indigo bags contain 3 dim coral bags, 1 shiny lavender bag, 1 drab aqua bag, 5 faded blue bags.dull aqua bags contain 4 dark gray bags, 3 mirrored orange bags, 3 pale red bags, 4 drab turquoise bags.striped violet bags contain 4 posh red bags, 3 wavy violet bags, 1 pale aqua bag.bright crimson bags contain 4 bright silver bags, 4 wavy beige bags, 5 striped fuchsia bags.wavy tomato bags contain 4 dim turquoise bags, 2 mirrored chartreuse bags.pale fuchsia bags contain 3 pale violet bags, 4 shiny turquoise bags, 1 drab white bag, 3 mirrored green bags.mirrored gray bags contain 4 dim chartreuse bags, 4 bright chartreuse bags.mirrored bronze bags contain 4 drab olive bags, 5 drab white bags, 2 clear crimson bags, 1 dim aqua bag.light crimson bags contain 5 plaid teal bags.light lime bags contain 2 faded salmon bags, 5 dim indigo bags, 1 dotted lime bag, 5 striped green bags.clear silver bags contain 4 vibrant cyan bags, 2 dotted olive bags.striped magenta bags contain 5 faded aqua bags.dark gray bags contain 2 bright white bags, 2 posh red bags.pale crimson bags contain 4 dark teal bags.dotted cyan bags contain 1 striped brown bag, 3 shiny green bags, 1 dull crimson bag, 1 bright crimson bag.clear violet bags contain 5 drab magenta bags, 2 striped brown bags, 2 striped fuchsia bags, 5 mirrored aqua bags.drab white bags contain 3 bright blue bags, 3 wavy purple bags, 4 mirrored lime bags, 4 dotted salmon bags.plaid yellow bags contain 3 dull violet bags, 1 striped turquoise bag.clear gray bags contain 1 dim chartreuse bag, 2 dotted chartreuse bags, 5 dull plum bags.pale cyan bags contain 2 striped tomato bags.pale turquoise bags contain 1 faded coral bag.shiny aqua bags contain 3 dotted magenta bags.dull tomato bags contain 5 vibrant indigo bags.light orange bags contain 1 posh lime bag, 5 bright yellow bags, 5 faded magenta bags, 2 pale beige bags.dull white bags contain 1 dotted lavender bag, 1 pale beige bag, 5 posh black bags, 3 light silver bags.drab yellow bags contain 2 shiny orange bags, 4 faded green bags.bright gray bags contain 3 muted red bags, 4 dull orange bags, 5 mirrored yellow bags.dim crimson bags contain 2 bright white bags.dim fuchsia bags contain 1 light silver bag.dim bronze bags contain 4 light blue bags, 1 light gray bag, 3 faded crimson bags, 2 posh tan bags.muted tan bags contain 1 dark blue bag, 5 clear crimson bags, 1 striped silver bag.dark gold bags contain 4 posh red bags, 5 drab blue bags.light tomato bags contain 3 wavy olive bags, 3 dark maroon bags, 5 shiny gold bags, 3 muted yellow bags.shiny fuchsia bags contain 2 faded lime bags, 5 drab beige bags.striped gold bags contain 1 dim blue bag.light lavender bags contain 3 wavy fuchsia bags, 2 shiny salmon bags.shiny tomato bags contain 1 striped turquoise bag, 5 light gray bags, 2 dark tomato bags, 1 dull aqua bag.dotted indigo bags contain 2 dark indigo bags.shiny blue bags contain 2 shiny red bags, 2 posh salmon bags, 5 dotted tomato bags.vibrant blue bags contain 2 plaid teal bags, 3 dim silver bags.pale blue bags contain 1 striped tomato bag.dull magenta bags contain 1 striped chartreuse bag, 2 dark silver bags.drab blue bags contain 2 dark gray bags, 4 dotted lime bags, 3 shiny green bags, 3 wavy olive bags.light bronze bags contain 3 wavy silver bags, 1 wavy coral bag, 4 faded green bags.muted beige bags contain 4 dull coral bags, 3 dim chartreuse bags, 3 pale blue bags, 2 plaid lavender bags.bright plum bags contain 1 plaid indigo bag, 2 dark purple bags, 5 dark indigo bags, 5 vibrant crimson bags.plaid salmon bags contain 3 dark gold bags, 1 dotted lavender bag, 5 wavy red bags, 1 bright olive bag.dim lime bags contain 4 wavy brown bags, 5 wavy fuchsia bags, 1 dark tomato bag.dark aqua bags contain 5 wavy beige bags, 3 pale yellow bags, 2 bright white bags, 2 muted violet bags.light coral bags contain 4 dotted coral bags, 1 pale indigo bag, 3 dull brown bags, 4 plaid white bags.clear purple bags contain 4 dark aqua bags, 5 vibrant white bags.striped plum bags contain 2 plaid gold bags, 1 dim silver bag.mirrored yellow bags contain no other bags.shiny olive bags contain 5 dotted lavender bags.pale gold bags contain 2 plaid orange bags, 5 bright yellow bags.dotted violet bags contain 3 dim orange bags.mirrored blue bags contain 2 mirrored coral bags, 5 posh green bags, 1 wavy teal bag.plaid green bags contain 3 wavy red bags.wavy cyan bags contain 4 dull crimson bags, 2 dim chartreuse bags.dull beige bags contain 1 shiny black bag, 5 posh green bags, 2 pale gray bags, 3 posh gray bags.dark indigo bags contain 3 drab plum bags.striped black bags contain 1 bright green bag, 4 muted silver bags, 1 plaid crimson bag.plaid indigo bags contain 2 drab lime bags, 1 faded plum bag, 5 bright yellow bags.shiny maroon bags contain 3 dark cyan bags, 1 dotted chartreuse bag.dotted lime bags contain 5 light silver bags, 1 shiny green bag, 1 mirrored aqua bag.posh beige bags contain 4 mirrored aqua bags, 2 mirrored black bags, 3 wavy blue bags, 1 plaid cyan bag.bright cyan bags contain 4 mirrored aqua bags, 5 dotted fuchsia bags, 1 wavy plum bag.plaid white bags contain 5 vibrant lime bags, 5 dull magenta bags, 2 pale blue bags, 5 plaid cyan bags.drab maroon bags contain 1 clear violet bag, 5 posh green bags, 3 dotted bronze bags, 2 dark silver bags.plaid bronze bags contain 4 shiny plum bags, 5 dim brown bags.dim magenta bags contain 2 muted chartreuse bags, 4 wavy lavender bags.clear blue bags contain 1 muted yellow bag, 5 muted fuchsia bags.dotted salmon bags contain 3 muted silver bags, 4 mirrored yellow bags, 1 vibrant red bag.posh orange bags contain 2 pale violet bags, 3 posh maroon bags.mirrored red bags contain 5 posh crimson bags, 1 light green bag, 1 striped black bag, 2 dark black bags.vibrant green bags contain 5 faded fuchsia bags, 4 faded orange bags, 3 clear turquoise bags.pale violet bags contain 2 bright teal bags, 5 faded crimson bags.clear brown bags contain 3 posh coral bags, 2 vibrant maroon bags, 1 drab olive bag, 5 mirrored cyan bags.vibrant violet bags contain 4 dark purple bags, 4 striped olive bags, 5 faded fuchsia bags.pale green bags contain 4 posh green bags, 2 striped lime bags.light maroon bags contain 3 dull cyan bags, 4 dim red bags.wavy salmon bags contain 4 drab lavender bags, 5 bright gray bags.dotted yellow bags contain 4 mirrored black bags, 1 dim plum bag.drab crimson bags contain 5 striped fuchsia bags, 1 pale indigo bag.vibrant tomato bags contain 1 dotted lime bag, 1 dotted green bag, 5 light teal bags, 2 light indigo bags.wavy olive bags contain 4 muted white bags, 5 muted silver bags.wavy lime bags contain 2 vibrant bronze bags, 3 vibrant gray bags.striped lime bags contain 1 faded brown bag, 3 vibrant red bags, 4 mirrored gray bags.wavy crimson bags contain 1 striped silver bag, 5 pale magenta bags, 1 wavy gray bag, 5 vibrant plum bags.wavy indigo bags contain 3 shiny cyan bags, 5 light orange bags.posh fuchsia bags contain 5 dark aqua bags, 1 muted white bag, 2 shiny green bags, 5 dull black bags.striped maroon bags contain 5 striped fuchsia bags, 5 muted chartreuse bags, 5 dark purple bags, 4 shiny gold bags.dull gray bags contain 5 dark tomato bags, 3 shiny purple bags, 5 faded violet bags, 1 dull silver bag.dotted bronze bags contain 4 dark blue bags.muted olive bags contain 4 mirrored lavender bags.dark plum bags contain 2 faded lime bags.drab tomato bags contain 2 posh chartreuse bags, 4 vibrant indigo bags.plaid teal bags contain 5 dark gray bags, 4 light silver bags.drab teal bags contain 3 pale salmon bags.wavy brown bags contain 5 plaid red bags.mirrored violet bags contain 4 vibrant brown bags, 4 dull crimson bags, 4 shiny violet bags, 1 dim magenta bag.faded silver bags contain 2 bright teal bags, 2 shiny green bags.dark bronze bags contain 3 muted violet bags, 5 plaid cyan bags.dim tomato bags contain 3 dotted black bags.muted tomato bags contain 3 posh crimson bags, 2 muted yellow bags.bright orange bags contain 3 pale silver bags.dotted tomato bags contain 5 posh tan bags, 3 dotted lavender bags.bright white bags contain no other bags.dotted white bags contain 1 dim yellow bag, 5 plaid orange bags, 1 bright chartreuse bag.vibrant teal bags contain 2 vibrant red bags.light beige bags contain 5 wavy crimson bags, 5 mirrored aqua bags, 5 light yellow bags.drab black bags contain 2 dotted lime bags, 2 mirrored fuchsia bags.drab salmon bags contain 5 pale indigo bags.bright silver bags contain 4 wavy red bags.pale lime bags contain 1 dark indigo bag.dark red bags contain 4 vibrant white bags, 1 dark violet bag.dull coral bags contain 3 dark indigo bags, 3 bright plum bags, 2 wavy silver bags, 4 clear bronze bags.vibrant white bags contain 1 dotted lime bag, 3 mirrored aqua bags.posh red bags contain no other bags.muted fuchsia bags contain 1 bright blue bag.bright aqua bags contain 1 shiny blue bag, 4 dark red bags, 2 wavy fuchsia bags, 4 pale gold bags.vibrant magenta bags contain 5 clear red bags.light indigo bags contain 4 dark red bags, 3 vibrant salmon bags.mirrored tan bags contain 5 muted teal bags.dim teal bags contain 1 drab lime bag, 2 drab bronze bags, 4 bright lavender bags, 5 posh salmon bags.shiny black bags contain 2 faded yellow bags, 1 shiny blue bag, 5 dark teal bags, 2 light crimson bags.drab plum bags contain 2 muted fuchsia bags.muted turquoise bags contain 1 faded plum bag, 3 plaid red bags, 3 dotted lavender bags.muted brown bags contain 1 dotted magenta bag, 4 pale red bags, 4 posh violet bags, 3 muted yellow bags.dull olive bags contain 2 drab magenta bags, 2 plaid crimson bags.drab coral bags contain 1 dull blue bag, 2 striped white bags, 1 plaid indigo bag, 2 shiny violet bags.mirrored white bags contain 1 dull fuchsia bag, 3 muted white bags, 5 faded lime bags.shiny gold bags contain 1 pale indigo bag, 3 pale yellow bags.vibrant tan bags contain 2 dull fuchsia bags, 1 faded bronze bag, 5 shiny orange bags.dark olive bags contain 3 bright green bags, 5 wavy beige bags, 4 muted tan bags.light chartreuse bags contain 4 dark turquoise bags, 2 striped gold bags.mirrored salmon bags contain 1 plaid lavender bag, 5 dim white bags.mirrored crimson bags contain 3 dark teal bags, 1 striped silver bag, 3 clear blue bags.wavy gray bags contain 3 plaid maroon bags, 5 clear crimson bags, 1 dull purple bag, 2 drab brown bags.mirrored green bags contain 4 vibrant white bags, 3 shiny cyan bags.vibrant gray bags contain 2 dotted salmon bags, 5 drab black bags, 4 shiny red bags.dull black bags contain 1 dark gray bag, 1 mirrored yellow bag, 4 dark aqua bags.dim plum bags contain 2 clear blue bags, 3 shiny turquoise bags.posh aqua bags contain 4 bright white bags, 2 pale yellow bags.muted yellow bags contain 4 dark aqua bags, 3 muted silver bags, 3 bright white bags, 3 mirrored orange bags.dark crimson bags contain 5 wavy salmon bags.bright gold bags contain 3 drab lavender bags, 2 dotted magenta bags, 5 dim chartreuse bags, 1 plaid gray bag.dim purple bags contain 4 clear silver bags, 1 faded purple bag, 2 faded blue bags.light gray bags contain 4 dotted bronze bags.bright chartreuse bags contain 3 vibrant white bags, 1 wavy red bag, 1 faded violet bag, 5 dull fuchsia bags.shiny tan bags contain 3 dim red bags, 1 shiny orange bag, 4 clear violet bags.shiny coral bags contain 1 dull black bag.dull indigo bags contain 3 drab blue bags, 2 light gray bags, 3 dim turquoise bags.dim brown bags contain 1 drab turquoise bag, 5 dull black bags, 1 posh aqua bag.bright fuchsia bags contain 3 bright olive bags.light brown bags contain 2 muted tan bags.posh plum bags contain 5 striped fuchsia bags, 5 shiny cyan bags, 5 shiny violet bags, 1 shiny green bag.drab bronze bags contain 4 dotted aqua bags, 5 shiny orange bags, 3 dull aqua bags.dim beige bags contain 3 striped bronze bags.dark lavender bags contain 1 posh salmon bag, 5 dotted teal bags, 5 dim blue bags, 4 pale beige bags.light black bags contain 1 clear orange bag.clear white bags contain 3 vibrant aqua bags, 2 pale aqua bags.pale white bags contain 5 faded magenta bags.vibrant cyan bags contain 5 light lime bags, 4 bright purple bags, 4 clear black bags.bright lime bags contain 5 dim silver bags.bright olive bags contain 5 striped magenta bags, 4 dark turquoise bags, 2 dark chartreuse bags.vibrant lime bags contain 3 mirrored coral bags.faded turquoise bags contain 2 dark gray bags, 1 dull black bag.muted red bags contain 3 muted coral bags.vibrant indigo bags contain 3 posh tomato bags.striped olive bags contain 4 plaid orange bags.posh blue bags contain 5 plaid teal bags.striped gray bags contain 1 mirrored purple bag.posh lavender bags contain 5 plaid maroon bags, 2 dim lavender bags, 1 bright maroon bag, 4 dark coral bags.dim turquoise bags contain 2 posh tomato bags.light purple bags contain 1 shiny green bag.vibrant yellow bags contain 5 pale brown bags, 5 vibrant crimson bags, 2 plaid aqua bags.pale silver bags contain 3 pale tan bags, 1 vibrant lavender bag.posh bronze bags contain 5 pale lavender bags, 3 dotted indigo bags, 1 striped olive bag, 5 mirrored green bags.striped white bags contain 5 faded plum bags, 5 striped indigo bags, 4 pale gold bags, 4 plaid gold bags.striped cyan bags contain 4 faded salmon bags, 5 dull coral bags, 1 drab bronze bag, 1 mirrored bronze bag.shiny yellow bags contain 2 faded aqua bags, 1 striped black bag, 4 pale cyan bags, 3 clear red bags.muted white bags contain 5 mirrored aqua bags, 2 muted fuchsia bags.bright violet bags contain 4 dark turquoise bags, 5 plaid crimson bags, 2 clear lavender bags, 2 dim red bags.light red bags contain 4 dim lime bags, 3 vibrant red bags.drab gray bags contain 2 drab tomato bags, 1 shiny blue bag, 2 vibrant tan bags, 1 striped fuchsia bag.pale tan bags contain 2 striped green bags, 2 dark maroon bags, 4 drab turquoise bags, 3 posh lime bags.faded crimson bags contain 4 clear crimson bags, 5 dull purple bags, 1 clear violet bag, 4 wavy beige bags.shiny orange bags contain 3 dark gray bags, 5 dim silver bags, 3 bright green bags.clear fuchsia bags contain 4 pale indigo bags.shiny salmon bags contain 4 dull coral bags, 2 muted crimson bags.dotted black bags contain 1 vibrant cyan bag.drab turquoise bags contain 1 shiny green bag.shiny chartreuse bags contain 5 faded violet bags.wavy magenta bags contain 5 plaid lime bags, 4 bright chartreuse bags, 2 clear lime bags, 3 plaid orange bags.wavy tan bags contain 4 dark brown bags, 3 clear turquoise bags, 4 muted fuchsia bags, 5 clear gold bags.dotted maroon bags contain 2 dim gold bags, 4 posh tan bags.striped silver bags contain 3 dark coral bags, 4 dark turquoise bags, 1 pale beige bag, 1 bright silver bag.dotted blue bags contain 3 drab blue bags.striped bronze bags contain 1 light blue bag, 3 wavy olive bags, 5 dark tomato bags, 4 dark blue bags.dotted chartreuse bags contain 2 dark salmon bags, 2 striped magenta bags.muted orange bags contain 2 clear crimson bags, 3 mirrored fuchsia bags, 2 drab blue bags.light fuchsia bags contain 2 dim cyan bags, 4 pale lavender bags, 1 dark teal bag.wavy green bags contain 5 faded turquoise bags, 1 faded lavender bag, 3 faded silver bags, 2 dark tomato bags.muted maroon bags contain 5 vibrant red bags.drab beige bags contain 2 clear red bags, 4 faded blue bags, 1 dim beige bag.light turquoise bags contain 3 dim violet bags, 3 light teal bags.striped beige bags contain 4 vibrant brown bags, 3 dull red bags.drab violet bags contain 4 dotted gray bags, 4 striped chartreuse bags.clear red bags contain 3 posh crimson bags, 4 wavy green bags, 3 dotted brown bags, 3 wavy violet bags.clear green bags contain 3 vibrant gray bags, 5 dim orange bags, 4 posh magenta bags, 4 dim tan bags.posh indigo bags contain 4 shiny coral bags, 2 bright green bags.dotted olive bags contain 1 striped bronze bag, 1 dim silver bag.striped fuchsia bags contain 4 light silver bags, 4 dark blue bags, 1 bright green bag.dark fuchsia bags contain 5 shiny turquoise bags, 5 shiny maroon bags, 3 dim gray bags, 1 dim cyan bag.faded cyan bags contain 3 pale gold bags, 3 wavy fuchsia bags, 2 wavy orange bags, 2 drab violet bags.drab chartreuse bags contain 5 muted blue bags, 5 wavy orange bags, 2 mirrored beige bags, 5 wavy tan bags.mirrored silver bags contain 3 drab lavender bags.faded black bags contain 3 drab turquoise bags, 3 muted yellow bags.muted lavender bags contain 5 light crimson bags, 5 bright gold bags, 4 dull orange bags, 2 striped crimson bags.shiny cyan bags contain 5 drab plum bags, 4 drab aqua bags.dark white bags contain 4 mirrored fuchsia bags.plaid aqua bags contain 1 dark cyan bag, 4 drab tan bags, 3 drab blue bags.muted purple bags contain 4 dim turquoise bags.clear chartreuse bags contain 2 vibrant gray bags, 3 striped teal bags, 3 dim tan bags.clear beige bags contain 4 plaid tan bags, 1 dark teal bag, 4 dark cyan bags, 2 posh brown bags.posh white bags contain 3 plaid red bags.posh cyan bags contain 2 dull teal bags, 3 posh indigo bags, 1 dotted aqua bag.mirrored fuchsia bags contain 4 mirrored aqua bags, 3 striped fuchsia bags, 1 faded violet bag, 5 wavy red bags.striped teal bags contain 4 dark purple bags, 1 pale teal bag, 3 clear violet bags, 2 shiny yellow bags.dull maroon bags contain 1 dull beige bag, 3 dim crimson bags.shiny brown bags contain 5 striped red bags, 5 dotted magenta bags.vibrant gold bags contain 4 bright lime bags.wavy gold bags contain 5 vibrant white bags, 3 dim orange bags, 1 dark gold bag, 5 bright tan bags.muted crimson bags contain 1 plaid chartreuse bag.mirrored coral bags contain 5 mirrored teal bags, 5 shiny cyan bags, 2 dull purple bags.dark green bags contain 2 dark gray bags.dotted beige bags contain 5 shiny gold bags, 1 drab turquoise bag, 2 plaid lavender bags.plaid chartreuse bags contain 2 clear cyan bags, 1 bright blue bag, 2 dark violet bags, 1 dark chartreuse bag.dotted purple bags contain 3 bright crimson bags, 1 striped black bag.bright tomato bags contain 5 pale lime bags, 2 shiny aqua bags.plaid crimson bags contain 5 dull orange bags, 3 dim chartreuse bags, 4 wavy aqua bags, 5 muted gold bags.muted gray bags contain 3 posh aqua bags, 1 faded blue bag, 4 striped brown bags.vibrant brown bags contain 5 shiny crimson bags, 4 mirrored orange bags.clear aqua bags contain 3 drab magenta bags, 1 drab crimson bag, 3 dull plum bags, 4 faded magenta bags.posh tomato bags contain 2 clear black bags.dim chartreuse bags contain 5 bright green bags, 3 shiny gold bags, 4 vibrant red bags.striped salmon bags contain 1 faded purple bag, 4 wavy fuchsia bags, 5 vibrant chartreuse bags, 5 posh tomato bags.faded orange bags contain 4 pale beige bags, 4 dim blue bags, 2 faded silver bags.shiny lavender bags contain 3 dotted olive bags, 3 dotted gray bags, 4 shiny yellow bags, 1 dim cyan bag.wavy turquoise bags contain 5 wavy lavender bags, 4 striped red bags, 2 drab aqua bags, 3 shiny aqua bags.pale plum bags contain 4 drab silver bags.faded maroon bags contain 3 posh fuchsia bags, 5 vibrant teal bags, 1 dull violet bag.dark yellow bags contain 3 faded black bags, 2 dark salmon bags, 2 vibrant lavender bags.bright purple bags contain 5 light lime bags, 1 pale gray bag, 1 faded turquoise bag, 2 faded magenta bags.vibrant maroon bags contain 5 vibrant lavender bags, 3 wavy black bags, 2 striped magenta bags, 2 pale green bags.
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();const lines = data.split(/\n/);const rules = {};lines.forEach((line) => {const re1 = /(\w+ \w+) bags contain/;const re2 = /(\d+) (\w+ \w+) bags?/g;let match = re1.exec(line);const current = match[1];rules[current] = [];const children = line.substr(match[0].length);while ((match = re2.exec(children))) {rules[current].push([match[2], +match[1]]);}});function getFor(type) {let count = 0;if (rules[type] && rules[type].length > 0) {rules[type].forEach(([t, num]) => {count += num + getFor(t) * num;});}return count;}console.log(getFor("shiny gold"));
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();const lines = data.split(/\n/);const rules = {};lines.forEach((line) => {const re1 = /(\w+ \w+) bags contain/;const re2 = /\d+ (\w+ \w+) bags?/g;let match = re1.exec(line);const current = match[1];rules[current] = [];const children = line.substr(match[0].length);while ((match = re2.exec(children))) {rules[current].push(match[1]);}});let lookup = ["shiny gold"];let result = new Set();let lookupNext = [];do {lookupNext = [];for (const y of lookup) {for (const x of Object.keys(rules)) {if (x !== y && rules[x].includes(y)) {lookupNext.push(x);result.add(x);}}}lookup = lookupNext;} while (lookupNext.length > 0);console.log(result.size);
fekdcbayqxnwvhfycwqktvxandebkqbafvcxyewrdnakwqcvenxfydbsewbaxdcvnkyfqtimjneyhbvxkfagdpzrousgsumijvxoheptbafnkyzrdyxtbnupramvdezhkfojsigsoaruhxnpiemjvytzbfdkgvfanlgjoiskzmubtxhceyprddhgabzfspkltqpflzsbtaxhqdkgkzpbfgasthldqxeuuoetnpeoxevrdzwglecbknucwlhnmxfqvkfubtzpovrdlwvdjmblrztpkosfgkavpdbgfzreolqpdzfrvokibcyyhknrqpubeolzixtvsjtlysdjzovxhnuqreimkbclpmatwbtqmcwcvwtbmbmwctctmwbqmooqmsussssztfmocgiesxdqfpjmthksidlbosmzbnbmnzesskzmnbmbsznkibmrznqcyladupvumnbkdpievlqcyaridavpbmnrklqucyfavynhqocijkmtbzsrulpycbzrmkuvlhnpfqsitjaoujbomprktafvliqhycnzsnymjkczihqbpfvutosalrtdevvhwvavagzvdddejrmqwgmerjguwjmreugwmjrgwtiewxiqgpuguxqiwppuigxqwpugqwxiealugrzsvhpxfmjdbqknoydoyhvplkjqarnbeutxsgfmzuhvxjaklmzoyqdbegrpfsnivosoamtlennpzvbfxystqknsxyqubtvftppoxtzptzftxujttprsqdfanmkpzidewynukmzacyacfmdwuizkeieuamdczkywficzwymuekadadwekumycizagnqgngnognivkmnxugftlyhuvajxsribwknlgmtanayaaleqqqjsxrwiisrwxwrsixiwsvxjrrixwbspppppunvlyxripzbmaedwjsfqthuvefyibspxrzjdlwtqhnamhnbapqzflsvxreiutmydwjnwdefhtzrxuqpsvljabyimrazbwymsdfpnlutqxveijhzfihqcvwdbsmsufwpahczlbvdtqjanyicszeodpmkljmtwvkrcfghdqbuydxnthpazbskufcqtxymsjdfhwuqbzvhyuqsfjbxdrtzgsmyvegtwiuimyqtuesvidrluzhjatkvpcpzacgljupzulcagjjcalgupzrgzbvefacswvafbrezcwwegjvrczfqbazwrvabpfcerlhekwzyfbacovmhfqufqkywvrsxgiojpxosvigpkwyjrirwkjfvmxpsyogpvxyrwiksjgoynebghqmrkcjlpiuftdoazreaqjoyngdbiltkmuphcfynobfdgluriphskejcqtamuaccafmxawgkrinxfrnbigoksfighjeckruxgirxkflgaxirnfksmoyaxbkuuobkxysamkyszxumojbauocvgjrhjponwcuzgfobhkeascqluwrzmhzcolfipysnrjaguwkeqezwlhkcfsoxqruablnosjgezuqcrvxwmcmeznoglqxubwjrsvzxnqvwoubpremsjcglumxrlsgqoczwbvnejcuxanesjkivzrmlboqgwdewtyuqjlvucvazfmkbmimltbjydqnxlmbouvaztcgvhrkwxjzfnpisyejqeadkcibtgflszltbxqifjedsawkzcgzdfqgkijestcljczfqdektlsigscdgufyjeizlkqtwwwwswygptcygctpwgcptywtpycgwxaqicwhtdpvkaixdcpkzhvqwtqkcdhxpwaivtwtxtrowmwtwttwsncqcuszehxbtxeexumaexzepjgfknhvuwmrnkwrmfhjegprjkpynefgmwhehfprjkgndmwmewkfdnrgjhphgyckgcghccgxjzlevsloumleosvmumejvuzoxdslevmolsufugckqhymrxbtvdpnosebeyorulcqxgdkzafhsssqwtjfgezdhsxckibrqyunvpouaonrpkmidbgftwlsjzmrylewxsgvfodhusfdxoyghwlrvmudungfohvlwrxsymulmsoghvxfrwdyuoifgdlwrsvymhxtbgbtdgtbgtgbbtgpukhthukfhkquhykcfuhedvmgubskdxycvosnrxcsdyrgmapfqoyrsxdcuedsxtyrcucdrsbxymxzmgcjsybuhrotmdojcsubhprtopmgsudhejmjceogdsuhpdjpgmoushejgeptsluhfomakdvyqjugocetyrzwfbhpipvqwcozxbsdugybprkmznowultcajipcaunjuzmidpiudjpdigjupspajiudzxnugrosjvlcphwmqbdytbvtlmqnudzrjwysxcohagptdxhyuwemcvbrpzgnoqfjlshoefmguvxyiazwcpbrjkumlbagzxeowthjfpikhmxeziglfbwjupjgxbspifzwqhneummgvupskezwcuiadczjnguyqygnujdacqzohricgqjfurqgucfhojivygwkszidxqaonxkejczsguywqvstvzbqypwmxkgydjmfpbustykxyrqryvjphnnpvhjphvnjbryndzmekuioathqpcvyczewurklaxnfdhoqbtrlyhawcdunqeofxkzbtlhbsqfkxctyonwrdzueazltnhdkqybaxufoerwccjwarkogjoawgrkcwcjgkraowrcjogakcoerwgsajkumwjqsetdgsjwmetjbteyhownvsaxmdmuspcztjrewxtswpceahncvzqxkgmolcixybdrsuftpcrfwszodmqnjvrcylgbirucbqigzouxryndpajaixybnrooabixhnjrypbznrxrbbdntxqecbyizbvhxyfmvxmbyfpzvbxzmyfhnfcqwuhsrxojkjrqvokfscnxuhnxqiaulkrojszchyfdkwqfbwdhwdnhwddnwvjtpxorsdyzbwhqikirdlmofpnectxqwuzynzxtvqogrdhwlyhdjomktnhqwnhnwqhnqwhwnqgosxzxoggfomxaogxdwctesuhxonyloxwhtecynuslcslwxehupytonprsprprprmaqfseovdhzjsqodparevimfzjldxosqmafejvzdqzojehfasvmawsicurgfmxeqjylnvktbddywmreaitvjgcnbklxswmvbnqtxurizhbuwefypzlkadqasjcpwmllcasmjpwajspcmwlcmslwjapunkrlnnyyannvzrjwsxduiejswxrziundexrujwhsidzeqnluncxhtdjbvfomauiswxvoqihatsegsetwqgiewgstqcifetwqgiswqtfgkiesdvmpikgfsarbnxqudwjtohbdovpatjgnxkqufsihmrwbjhnrtaokxudmfqpigwvsckaqbvihwmsnxjpgrtoufdfmabtdgkuhxpwrivsoqnjeazsitkjronmlotmrenjakzsisamrojenitzfktkzenmrjoaistszkioaejrnmrrbqrrlwbrfsuahoqyjawifugdtrvsrfbaswucfsarlknupwistaykccukdmbkubkvasxktwmyfaldbnymkbnfpdltxxbyftnmkdldlkfetbimxycncjrurcjurjuclkcjrumauzcjrtnvkinfzqbrledrinldvbqfzerqizebfvldnaciqrfbsnelvxdzigiggigirskzxocuqkcovqsnzturskzocrnyuqvourxysqzkcopescqukrhjziuxqfviycpuzjbwknlnxbfkpcyqdawmxofypnwkbcqvwbvxcfkqtnprybnoixpfqgkcwyziwlofkdgpcqzayrwjvkskrybecrykyrkkyryrkxkhdreqfbyipmzalcowiepqtyhxflvcomabjdszjpgankzcvbtwkxzugtvnbjpgknqpjxzvtbkbtjpvzgmnbptzvmjknghdaxwiypslzndbylwxdkwtflpyqszwlrvcdyjgmlfewsqodyuccocmahagwaheczudoqwmvtyabacevwozyqtdumhbverommorromiromuxdjdppmdbtdtpzeykhpkdhryzetuzdkhtpyacqanetkhrcndlhkceqofkhbfjlnacvzcmavfjlknaynljofvqkgctlkjcnavfmejcbnlmbgcoiuhsflqblycblyjevcvgqlcfhnxxwgonucpystigbcacnqlgmdkrlfcwgnazyhitgcjrnytgizahwprjczjcgrinmahytnrcdhzgjyatixtljebqpgbpjewtgngjtpebxgmoipkebtcsjptwejlbngeexahnohegchivbgpdisfglyvbdodgvbibdivuggvikbdwyjmpxghiqfeoctdnbuarqetnaimxlgsfcbrpjkbcrhxgjnqpadefzimwtkindbwqlusyhtpzryjgehaucfmovwzgouugoguovougndwhzsrugpjmltxiqofvkbyclgirqyotwjbmvuspfnxhdzckjbqzgwcvhxofkrmsdlytpunixrqzfjolsywtcghdbmukpivnoqryngdmhljvctxwkbfusipzsawassamsajvsfaoxtrnhvfqyswldbtmzwgrakccoqyrbzjhsmwivanepxkshzgfthszslzhzglhdtusogwfmpkzvbxnjwheaqdciywbgcyqhrztvdxwnvqtanbyurxczowdgkmjxyvnbqztfgcrwdvospejybinmfiosvkbnjepjohqpznbeisviysbokmjvepnnxsrfohagwbagblosrxwnhfxgircuhsaobfwhfxpgosarnbwbgqurkeumkrnvxqggkrqhspafuocqtogubkrbxlapnmnptixoqxpnnpxrytbpswaezlufdqxoimazhtjqnglcencpqudzigamorvvamkeznqirdcgpopvrglqsmcindzaempvncrisdezaqgikxqemunzadbkqjtxneykenmpxuoqvjdqxfyhckrptonhmngcfpytkdxqvoohdvuywpstzkcaqftepjteecvtyjqotiphkmsexvfugdgwpyfuhlevkdiotjqxtjkfvghibocaqxeudponexjzpgthuidfkvqsltfqlqtsoqtlnqsyglepwzhmtiojbuvxfwihkgaoydpzvfxclsenqjmtfqxmtbsgtmxqyrjfdvtfqmxitmhqwfxqtmxfrgvvjwonlekpaldytkguwhazeqpbpqzaytglhbmfuedkidqbatkpyezhgluztgyqjebhkdvpualkpalzeytqghudbxsynhrhsnuryqyjukdtmnwhrczvolsbymsutqrchdblznowvjmpwwmqtdwmwmdnnnnovnutqbxrygmjwhksrhoalixstfyuqjeyfhsotcsetchyojhcyoejstylhpvfiawoekjbqpkroabqvljiyefhwakqbyjpziglmfedwwjdbyeaqpzligmkflfikyqwzbmadjegpaswgkzdyfrqpmnlibjefqpmyedjklgzibawqeeqojbxoeqoikdecnjjjrfhrhfrfyhrhbfqfrhhokvgpxyunambmpyogvhunlwmorevjuznhydgitohnsnhosohnshonshsnokxclzyqpanaexnyqzkpcpakcqnxzygkytwmgtwgptmwfixsozjwykhupqmvtbrcsyimxhzbpwcktrofuvjqxuiwfjvzcpykqhbrosmtmwrbvqjtkcsipxfolyhzubzhxpyfmkyfzxmakphbmkzpxbhyofhbmzfkxpwyupxzhkoybmfosdypdbsroysydojyterzphvxdmvtxrmyhzedpvymperdhxtzmpxrvyhedztesakncseakhxasgeenkstaugfzuajsymddmxjyjmdyxymjdsezfhlvxmaqtdajvtmqsecyghfixzwlksbhxzvafqpmuetzfeqytxhadmsvcnextsvazhmyfqruclaauclyruticraplakizsuwdmnhpxbgyceftgwxpfeoyihcklbndaszzwhsbigdynkpxceafzagvmisayphkcantjdmabianplydbkoqoasptkqgldnbeydoypnqklbcyblkodncpuqlqkynpdobhmjjmgniearxpdbjlkfmqdvjluteomsihqlnwzbtblzmhisnqoftwonqlmwsetzbphijzoxcwdfwdcjzifxqykdshgzwjfecimnpjhipmsaftezkocziaspcjfmkhvetttfzmevcjhbsainxoquwpftkydlrcygwbtvxemnzfjhrqkdspaoluefdtnrlwczymxqvpsoukjbahoujkhnlzydsirvadxgzjsuptaohqvnkicaoiujdlnkzehvsuriadhksjyoznviydmovnzakhfusjycajzrtiezctyriesappxiacrztehbyqaenyxtzircsaecrytzixrnjkgdpuzqvcmndqkvuxczjpgrmucgmzjpqrnxkvdnpqxkumdcezvgrjthymlxwaozylhowtmazxnwaisrejbtqfmhmbwhqnrfjesahfnrqebjasmwjecwhfgrsqodanmbqasbhnjwfermnynyynelgkmfbthwaouscxpznvyrdinhlmtpwyrojfvbuaczxkgdsaskbuvdozmnxhfygrlwctpfytznqhlbmxgrwcdoupavkswcplxyvsrdjnfgkmuzbtahofklceuikclfiueklefiucclfekiuiklcufeyavcmhwbpcapvymhbwwhypmabcvpbzmcywvhjalbevjzgnvefbuwebvdewzcqndmjhvyjevrqnymguqpiotaevsbmynljvqmekjynfnefqmjxvyakgwyjfigiwfyljakpdejrjerdredjliwtkkiwlwiklrbwvoxbxvnorvbwxrovkrxobxbvirwontsbkwqefjphronqdvgxihopwcdnndndjfgkjtfsulusftlovvwtjslgdlufaesvuagvdvudagcbegxmuiwkzookrmgbfwvnecpuybxehawmgqkocyloqmbwgtczkejmsymsfjolmsuiwheydsmkwgckujsdirpzgeulsjvimptdaxrqnkzbxtefdmvganulqprikjsptslznrjqkxemagiudvfqtbqpaqqqhrkzcibhwkpidxtflcuehkicchkikcjhivgisrakewmostbfvjzgibegtioavfrkzjmzoeikjtbfagrvmxnbhdlctmbgfhwlxsaqnkovpelmnhuxrybeqrjhvhtwuokdqpajfaniksczbeymrngedtljsvybxkmhfuzwtbzedwsjgknvhlmfulzbgdsuhkjtvermwfnsmizqluwdetfavbnhjgblwtngusvdjzhefmlxaiqvkohfeioxvwbsrlfyyfbqlmfyyfyfcuygpzdkvkvantpnatukkuuktdjbrirdwezgjtlckstvfhapyxpsuspypspksybpsqdbooyiiqpmxiioxtatoxtxownsgzthbmynqayxvhzuvhyzxuhvzuyxcxoygklttokyovkpytvoystpkyqtjwifbvsnvstyfbxjqwinvsjtinqfwbyqxysnitjwfvbbjfynsthqiwvzobnyzynobozbynnoybzonyzbinpdmtkblgqrvaowzxuzhrbpuwiqdomgvlnttopveguwzrcbndmqlieapmtqrskiislukrmpesevcbzfngxpcblvxqwekytpqzfobkhdlpnrxezivulztsfxpgknhoknwlxmzjhpytitaoqtsbtomwkeowmwmowmoosbtmxwddwgpvjemitbcnuhrvyjlitenkbpmuhqwxdiedvbwjczstunpmhgyfakujntsriwgxmrfatigyjkxusnmuyxitmkagnjfsisjafytxumgnektiknjmugxsyafpahkyfojrvenxmdsehnkcrshkrchcwxilkruskgchrfpjtzdcvpantnizclpmtgbvjtcpnzvphtnscvzaazcntrowvpdativhgmyedozwnvztmiahewguhaimgzventwtxiqfmzglphvwaeehmgiwtzavqdpreikohtyjcihtydekrocpqjdjkoticqhperyjcorkdepqyihtkgwunqmqgjunwkoinqruwzykwtkqceimludrmkhpwdcqleurztmqweldutkcrkdtmwceulrqrqlutcidwmkekhkkkirbarbibriirbfbxvriumpkngqmnugpksbdxmlzacjsbzlcamjxdcajmslzxdbfwndcxrxbmusnttghptzovqiwdhuaslkjxrbcntflhnkoxvadiqrwpzbjsgqkisrxodznabjwvlhpkoqlswdahnzjvbrmyxieapecofvgshiyqbjicegjhasytobfpvqocsheqagjfpyivbpewjncobqiysgzrfahvwzomnlgyxjthazprgirywgaemsubhvkqcozpnxlavehbwolxnzmqyprguqyrgpxhazluvenobmwjhtrzywlnmbeoxvgpiaqugavmwzrponyxhduqbletwwttwqpzxrctfiqpunlsawtcykmxbdvgfzjrvnwdruyptakbgqxjimlzcfsfgizdmcblparnsvtuqwxkjypxwylavndgqtjbicfksmzruxtpdfrbkcglzvqjuminayswxkyvhtdwpjnulighvegnyitdwxjzvthsnxjaywdigwhdagyqvxjtniwjvgytdaxnhiygduevclqoaqxcxazfcrzeqvofasyhjgxwkmtcudnvkuogexmwhznrycdqftzupwcondeklthrbvxgmyfqimtredznxcnozebtrmdelzrmwtundemtdnrztedmzorntlbunpqygzxmehasrifvwjhoskgitlwowrailhtfkgwigbjvhtolktbhivwgsuklofxnachtsdmiwvuzkghacwldskfgvuixmtznxghufdizawvnmsctkgnauvfizjdortqrinjautyqdzvggiunqazvtdrjmcwndhjzuqviatgrvtpsysptvysvptyptksyvyaskcexdtvyjnqmafaoybpsyfalbxounjlijrmoxnbmioybjnxafbjnvopxschbjlzoknxvqmsgwjfkzdbthaljszvlwthkmqfgdbaakmfjzgldswvqthtuswfahjmdqkgvlczjvatqgfmnwzhdksluqyfkzdwtahctzeiywabpgvlqonmufzyurtaqwsxfwyruzjaqftrwltyhqdecxagbovazthexlkoqmvrdngcwfscorjvwqhutexadlglecogwrhavqdtxqpdvrgctyaohwlexegsilhdhxmijgtzdmnvsyiwjrhakbgpwmzhsctpdrbnagvyeibvwtaylgdnzhsmiprrhmlswzvpandgtybiqriopbacexhnlwfvsmdkwblaondrszhcfpeipdnahlrjseiwfcobcerwaoshjldbfnipzuoalsrdienwcfhpbxcpepcxcxplnbpyzixclpecxxyfcgdaewjdlcopnaixqbvehkcdraxdcytarmuhgxewsbqozpsdpqzosdzgqdopocqzdfpuxyszjjzlfhvkmuzmomycviimtuxslkmbzarnfeoaxmndjpsqzelrbkfoeykroszbaxlmhfnrszrzqkzrithkmqiydpzlosuanvwjczsjklbvwaidhnxpuejvwqmatlkziundhpsudgjnfoepkwilrhsvazczlnqtdybcvcvgahvcbaclcmytwdeqifzakjhuonmdqxhfgpzykvteajnemfpxqnhbykzdatjrtgmujleneguclrkmtnjnpjgemtrluuntmegrjlolykizorxyswdtkaqelnhyijmfxtvbsgwehwrcvjcediawtnrmohlvnhmabrxcjwetajmkbntrvchlegwyicrxeztbdpjuqlfgnvksmahrayjtgdsfhexiqvpcznlkubmcrxijflabsgkhtqmdeunpvyzgpbklvxypybxgypwgxbdgpxybvossvvshqiktnmezpvacbyuekhvegskvhkvehogmyhoetiwlqrpdkpgfkbqleywmhtictezpslhymwkiqtvxhgtgjimnijugmnnjmgidrojlynvsnrysdjvlolydosnjvrsjylnrodvnyjrdvolsvjrclekvuljbckqftedscihklevgjrqbvniflxuvgpywjntefcmcnoaetmyjpgdmpeynjcgrbnpymcgexzhqjicjumnegpwyhchhhhzrqoybiwynqkcmlduaezqybhitnoqrtinoqtqhlinimtbqmoetialxhyqkznjwscgdpvqwcagyzjvtoednmixlsphkkxqajsiotvnlhcgwdzympeynejvlhsopakcmzdtxgiqwyaxdpiqktjsozmgvncewlhqyrlgevbzsutwmxjhindcaokpvtdjrqaocngwehspylbukmzaevveabyqgycfvpamkhliotwmckyrthxusfqiedjlazatcmhkboiylfsfqkmlhdcmlhkscqdffcqsdhmlkkqfhcdmslkqslzfdmhocdgveoupsmhabyfkrztcljvedwkmptusfhzaygqolcrtfoaevgbiyfusfwqhkpfxljduflmlwhbjvgtzpjzpszwipyjlarkxcqsbpeuivfharycntpzilsympnqbojnlpjmobqysnjoslbqpymqsnodjtlmbyplnosbmpjyqjpovmflgikracyqunwthehawgrlcyvpnmkjeofuitpltojwgrcfkhaneuivmyklaoumwtfgejnhcripvyhmvxakwrtundglzmkacvnhwrlxbzdugasvoizlprxjefycmthugnqwzohmwpxdaiyvrfnulecgjtqnatmhjdgzctmdalgvbiamufqvhxbajdokyndkvxonyhmabhnexvbdaoykgyjfnmgmfnyjjfygmnbjqnbnqjnqbjqbnjhawjpsxeolrrwlqenjhpsobgamxtovhgbwjdckpqnifzlmleysuzraxskykymgfpwkzxhictgzzsjitmlijorjmwabyitnbzmjabvfwrdncsnbmhdqyskiywvclhdsqhsqbyxdjmtmtsuhxjzklafijltpsjbtfiegzqcohangwnfpqbpnwfwpnfwfnpnwpfirgkabhkhgibarakgirhbemonkbuycsznoyzscmukejsqzftblaxscomdrxgibwafdjtiyvgqorsmnhubweplkxzcfmznscjliqbyevhxwoktdugrapcgyxhiubmptdokesrjzlafqpmdqvjuygbeslzatokxfrhyawtwhwhwhvojuxeinqpvnjgmxksluctqzfrdoadzxxdddwpscgknxkwxcxcwkwxkciqipbildpziacprpbdixxbxxxfenqcuwiniczkhxeqmcejqnxitiycrngpqeluyjyjuyujujybbdeeeefeitncbizahupsdwlogoclbqdskwnaymxatloswndebjcrivmsojaeqnphzylgdbcebmzlphcgyjoadqapehlztozlmebaekyflazqpnhfgjdzymlctkrbslmbhkqpfyngzjmlpqjyzbghnkfnmzghjyblkfpqbngqfhymkzpjlapgvczsfuybdiklqgmhxdubftesavzlpjcqyiaswyzugkicpfvqldboylsvgbcnuqzdafpincrkhnhkrckncrhhkrnchcknrnvrjtzamfuhqxpebdigavktsywflmcoevrabhcmxkonlvlcxmbnkrheocxloknrmebpkclmerbonxlbkoryunexmczdmhgatfpqcwrsuberavdksglywfofwbfwhkpzlhbtjfiwfjwpzhkblibfhpkjzwilpjwoikhzlbfyworadadsyratqhenzlswmufgkojrblfoanzusbhgtjkyeqwmnsgajlhqeobkfztwmumlcisaozwkhetnqfjgbduxhqkmdutfzasylbwhqubgdwxlztkmsyfaepfhuacyitsqxmbwlzkdtqbpnosumljjdtpqbyoliulobptqjntfqlvwzopbajcjxpeobqtulisawgwagawgkczbledyavgwqukffbhgmtjldmlspgzfeauxnqtzweppwzewpzeewzpjptngbzhktgnkrpzxdjhghjznktpofrbuieszcakqtsnomauqcerdpbtnbjxhyvtpltbxzgovhjyyhbtxjovizkbytvxhjpibogfjnfogbinjlbonqgfjibanjisugcmwfvoeiobghfjntzttaqnrafqrxfqfrezroqfiachtzfemxwbsgzsfycehaqwkmtwmhzcsbrafezmafhcewxsgqoznmrlxvudwehfuvzrohmlgdnwqxeffrgvqedxohmlnuwzfqledmnvwghruzxorxcvnyjbqgmcjygxmrvbqnvuybxmkcrnqgipgrxvnobcmeyqyvqnbmrgcxayayayyaaynpxabaibrcmtxqvyaedvycdaeitmbxqrdvqiytmcxabredvbaicqeyxrtmhgzdzdlhozhdzdhzdhhcipnzchnipbrwptzvymoedzaltscubdwmjecyqxltipzfnmvfulhydqewjtzpncinajhotpuyrsxdlqbkwxetrjaobduqpznklsycjwcgbxoipeyfmkvhrcmblwpoudxteyfvnhkrgqzseparbjxvykfocghwmeqvwroycibpxmfghkxwedaqgiznjkhubyeatiravgncxeljzmsoifzfffhtbcrstkmrrmtvebzsciggdijgvijhgiesfduipkhlzizdplfupdculaojmwsqebvghzmhjsdwlefgoucrpvybzwagcdeuhsqpmlonimffltfnxlhmpdyieobmlxpyhideomixkldhpoyelwthjcvgnmxuyposvixqojmyevrxmoyjymkajoxvzfvjdymaxovohhonqdyfqmnfwiktfqsajgnpoaheifqclplqcoifaehpaegritwhnvlofzucjdipeohaflcoielhpafcstzvenpcqxisbjhmgkrwxvnckipbhszegfwmpkchgoxbavsmewizncsvzekmhyngipxbawwgimixawwixkaiyownrpsiwkcaofbkuznsiqrtvpjygpyroglzcjtfubpcfjryzgtubmojunoecpfwmhtxkayziqvgrlzqigynpcvufwohjlemtkxaroeavkrhizljumtgfpxwcqnytyizfjnoqcbgxarepklvwsudmhitvqcxburwoidtvacoqbexbtvifjxcqyoojikvqcltbxbromkxwdfqdkfrbwqamxokorxywiqfdmbsmyfvkgxmkgvsfkgnsfvemmkfvgspdxamqgxlxsezkbjicxywfprxynhepftgslrowytlefgosarnysgtndocwlrflrgnfoswtyazlibfutmrkxsvjnqgyokhttkhhtkhktpcdxhjnovlusitqdbtrjizvbjhnkitaegvrsxnxghvbestrabwetgsarvhxdnoleswygxbnfmtzkjuarxuaezbtcwlgmnrofsjyhdrgyowbfktavjuqlzmgtkvfdulwqjzhymabrorzojgmltbyhafvwdqkuuxpwqbyrxpquwyrbrwxyqubprwbyquxpqxrbyuwpkqlwzrkveklnfucqkirqgpjmdkctqmvnkfbgjdvdvdvfariyqplzoetbzykjphxcgpytmwqvxtxvpqmdwyxtyqvwmpwvqmxyptoekfrmuatwlaxsvpcjkgqdzhibyfnyuqsihvmatgwxlrufjmioapebxnqydhtktpskxdqckxsqcdtpytqsdkxcpcxpqdtkstcxpsdqksoivtnhezljymwmhcyptneuvobnfetymhgdavovnbhmxetaoysqruavzncixgbpofvioanzfgreuxqcacetqngfrxoziuvgqcfmxvrnzaolijuearxhgmizfqtejlcvwgxpdbhsorufmizoftmijdscxlvzbuwpehgrycvnksdzamhgbporwtufiljxewdmgbxyihkkhmxyidwghikxwdlpygmnzcfczvhfecblgmowtqxpaskyixwgztblrjiacpfmheksvypemieezeefxwyxyfwyzxfwkshfqrlmyeaxsqboukanvknplevnpknvvqsdyhzweipoijeyhscazlryfofittxwjqvlhmbgeuznpsqhzycdugfcuhqdzfgfghuqzcdemqngdvmeaqhezqmaxexqmqmazejgrnahfyvotupkxziqsdmceblwntughqlksexifdraozvmbcpwyimttimpthzwtpnwhzpiztlwtzpwxpuhxbqrvyslxwcpidsmqkrkpcdmisqpcdkqsmipmskqdicthxqbybqxohtyqybhxtyqtbxhyqbxthqkplixrshejndbsraivmzrgelsyitlfsrizqrzrtcrzdeabtueatgshwiqknjulxbtdmsfpwqphsqwkpsqwguhmblgmuhbmhndpubyuihmgcbuismhbyqioblnpolnqbiploqbinprqcqcrcrqayrqczzzzzpljolcbajeorgjloxoljxloasmqxdymqldlvmdqbiqqifiljwtfwitljfliwtjwtljiftjwfildxxddxxndxdvzozovogbwntefukpchebwnsfkgupochtnoctepwgfhkubwfqkugnpodjthbcegenbzqkvspybrkwjevpqscznfdxnvtzsobqiekaunxwbwnjimfvncxbhlrdzgokvbfdakgnhlcrixmocnzbholrkvdifmxgucoklqmbdxnvigrhfblndpvmhkirgcxfohquykcmexvzaevnayxkchmzqjfyxamhqpiwzeokgcvsekzdruqamhlbtvxycnkknwctpbykwandzsegnfqromlinuwktbctqbetcublzxybkftrhisylrxhdasutjzncipgbfwxktyhfizlrobqsmvsjbpdkaowvubnhcaqjprkxncdrqxbolaijktzaxrnksqchybjcbnaxejqrkbteqziwsumofxpvchrchoiepzjxuwtvfrsmirtuwcsemlpvfzhoxtwhximepcsfzorlvgutaatxjdybasehgpmedaosjpgxhmbyxybgpdjemshadmexjpbaslhywgxpmedyahjbsgcbjxvynghstrfluoempdkidhbtapleufcsrgywnvmoxxohdljfecvupmsgrbytknrvleksucfbdymxgotqpnhklfewtsaihpxnmogudyseqdufxypnlikwtogahewpohdiknstxugayflxwenydkuhfasotlgpijfignpyousdtkwexalhoudzygfimhxvjqbpviwoadmfrdimbswlpqnhyzgxbqidwujismkdvnyzajbuowlpqfrvjqwufylscopgmkrdabirhbwefvqiykupsajolmdmsdqtukoipvfxlyjrabwlhoholjfolhv
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();const groups = data.split(/\n{2,}/);const answers = groups.map((g) => g.split(/\n/));const alphabet = "abcdefghijklmnopqrstuvwxyz";let sum = 0;answers.forEach((lines) => {[...alphabet].forEach((char) => {sum += lines.every((line) => line.indexOf(char) !== -1);});});console.log(sum);
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();const groups = data.split(/\n{2,}/).map((d) => d.replace(/[^a-z]/gs, ""));const answers = groups.map((g) => new Set([...g]));const sum = answers.reduce((acc, a) => (acc += a.size), 0);console.log(sum);
FFBFFFBLLLBFBFBBFRLRFFFBFFBLLLFFBFBBBRRLBFFFBBFLRRBFBFBFBLLLBFFFBFFLLLFFFFFBFLLRFBFBFFBRLLBBFFBFBLRLFFFBBBBLRLBFFFFFFRLLFBBBBFFRLLFBFBFBFLLLBBFFBFFLRRBFBBFFBLRLFBFFFBBLLRBFFFFFBLRLBBFBFBBLLLFFFBBBBLRRFBFFBFFLRRBFFBFBFLRLBFBBFFFLRRFBFFBBBRLRFBFFBBBRRRBBFBFBFLRRBFFBBFFLLLBFFBBFBRRLFFFBFFBLRRFBBBBBBLLLFFBFFFFRRLBBFBFBBRLRBFFBFFFLRRBBFFFFBLRLBBFFBFBLLLBBFFFFFRLRBFBFBBFLRLFFFBFFBRLRFFFFBFFLLLFFBBFBFRLLBFFBBFBRLLBFFFBFFRLLBFFFBBFRLRBFFFFFBRRRBFBBBFFRRLFFBFBFFRRLFBBFBBBRRRFFFBBBBRLRFBFBFBFRLRFFBFFFFLLLFBBFFFBLRRBFBFFBBLLRFBFFBBBRLLFBFFBBFRRLFBBBFFBLRLBBFBFBFLLLBFFBFBBLLLBBFFBFBRRRFFBBFFFLRLBFFBBBBLRLFFFBBFFLRLFFBBBBBLRRFBFFFBBRLRBBFBFFFRLLFFBFFBFLRLFFBFBFFLLRFBBBBFBRRRFBFBFBFRRRFBBFBBBLRLBBFFFBBLRLBFFBFBBLLRFBFBBFFLRRFFBBFFFRLRFFFFBBFLLRFBFFBFBRRRFFFBFFFRLRFBFFBFBLRLFBBFFFFRRRBFFFBFBLLRFFFBBFFRLLFFBFBFBLLLFFBFBBFRLLBFFBBBBRRRBFFBFFFLRLFFFFFFBRRLFFBBFBBRRRFFBFBFFRLRFBBFFBBLRRBFFBFFBRLRBBFBFFFLRLBFBFBFFLRRBFFBBFFRLLFFBFBBFLLRBBFBFFFLRRFFFFBBBLRLFFFBFBFRLRBFBFFFBLRLBFFFBBFLRLFFFFBFFRRLBFBBBFBRLLBFBBBFFRRRBFFFBFBLRLBFFBFFBRRLFBBBFBFLLLFBBFBBBRLRFFBBBFBRLRFFFBBFBLLLBFFFFFBRLLFBFBFFBLRRFBFFFBFLLRFBBFFBFRRLBFFFFFFRLRFFBFBBBRLLBFFFFFBLLRFFFBFBBLRLFBBBFFBLRRFBBFFBFRLRFBBFBBFRRRFFBFFBFLLLBFBBBFBLRLFBFBBBBRRRFBBBFBFRRLFBBFBBBRRLBBFBFFFRLRBFBFBBBRLLFFBBFFFLLRFBFFFFFRRRBFBBFFBRRRFBBBBFBLRLBFBBBFBLLRFBFBFBFLRRFBBBFBBLLRBFFFBFFRRRBBFBFBFRLRBBFFBFBRRLFFBBBFFRRLFBFFBFBLRRBBFFBBBRLLFBFFBFFLLRFFFBFBFLLLFFBBBFBLLLBFBFFBFRRRFBFBBFBLLRBBFFFFFLLRBBFBBFFRLLFFFFBFBLLRBBFFBBBLRLFBBFFFBRLRBFFFFBFLRLFFBBFFBRRRBBFFFBFLLRBBFFFBBRRRFBBFFBFRLLBFFBFFBLRRFFFBBFBRLLFBBFFBBRLLBFFFBFBRRRFBFBFFFLRLBFBBFBBRRRFBBBFFBLLLFBBFFBFRRRFBFBFFFRRRFBFFFFFRLRFBBBFBBLLLFFFFBFFLRRBBFFFFBLLRFFBFBBFLRLFBFFFFFLRRBFFBBFBLLLFFBBFFFLRRBFFFFFFLRLBFBFBBBLRLBBFBFFBRLLFFBFBFBRLLFFFFBBBLLLFFBBBFFLRRBFFBBBBLLRFFFBFFBLRLFBBBFBFRLRFFBBFBFLLLBBFFFBBLRRBFBBFFFRRLFFBBFFFRRLBFBBFFFLRLFBBFFFFLLLBBFFFFBRRLFFBFBFFLRLFFBBFFBLLRBFFFFBFRLRBBFFBBBRLRFBFBBBFRRRFBFBFFFRRLBBFBBFFRLRFBFBBBFLLRBFBFBBBRLRBFBBBBFLRRBFBBBBBLRLFBFFFFFRLLBFBBFBBLLRBFFBFFBLRLFBBFBBFRLRFBBBFFBRRLBFFFFFBLRRBBFFFBFRRRBFBFFFFLRRBFBFBFFRRLBFBBBFBRRLFFFFFBFLLLFBBFFBFLLRFFBFBFBLLRFBFFBBFLLLBFFBFFFLLLFFBFBFBRRRFBBFBFBLRLFBFFFFFRRLFFFBBFBRLRBBFBFFBLLLFFBFFFBLRLFFBBBBFLRLFFBFFBFRRLFBFFFFBLRRFBBBBBBRRRFFFFFBBLLLFBFBFBBLRRFBFFBBBRRLFFBFBBBLRRBFBFFBBRRLBFBFFFBRLLFFBBBFFRRRBFFFFBBRRRFFFBBBBLLRBFBFBFBRRRFFFBBFFLRRFFFBFBFRRRFBBBBFFLLLBBFBFBBLRRBBFBFBFRRLBBFFFBBRLLFBBBBFBLRRFBBFBBBLLLFFBBBFBLRLFBBFBFFRRLFBFFFFBRRLBFFFFFFLRRBBFFFBFLLLFFFFBBFRLRFBFFBFFLLLFFBFBFBLRRFFBBBFBLRRFFFFBFBLRRBBFBFFBLRRBBFFFFFRRRFBBBFFBRLLFBBFBBFRRLFFBFBBBRRRBFFBFBBRLRFFFBFFFRRLBFBFFFFRLRFFBFFFFRLLFBFBBFFRLLFBFBBBBLLLBBFFBBFRRLFFFFFBBLRRFFBBFBBLLLFFFBBBBRLLFFFBFBBRLLBFBFFBFRLRFBBBFBBRLRFFFBFBFLRRBFFFBBBRLRFFBBFBBLRRFFBFBBFRLRFFFFFBFRLLFBBFBFFLLRFFFFBFBRLLBFFBBFFLLRBFBBBBBLRRFBFBBFBRRLFBFBBFFRRLBBFFBBBLLLBFFBBBBRRLFBBBFBBRRLBBFBBFFRRLFBBFBFBRRLFBFFBFFRRRFFFFBBBRRLFFFBBBBRRLBFBBFFFRRRFBBBFBBRLLFFBFFBFRRRFFFFBFBLLLFFBFFBBLLRFBBBFBFLRLFFFFBBFRLLBFFFFBFLLLFFBBFBFLRLFBFBFBBRLLFFBBBFFLLRFFFBFFBRRRFBFFBBBLLRFFFBBFBLLRBFBBBFFLLLFFFFBFBRRLBFFFBBBLRRFFFBBBBRRRBBFBFBBLRLFBFFBFFRLLFBFBBBBRRLFBBBBBBRLRFFFBFBFLLRFFFFBBFRRRBFBFBFBRRLFFFBFFBRLLFFBBBBFRRRBFFBBBFRRLFBBFFBBRRRFBFFBBFLRRFBFFFFBLRLFBBBFBBLRRBBFBFBBRRLFBBBFFBLLRFBFBBBFRRLBFFFBFBRLLBFFBBFFRRLFFBBBBFLRRFFBBFBBLRLFFBFFFFLRRFBBFBFFRLLFFBBBBFLLLFFBFFFBRRLBFFBFFFLLRBBFFFBBRLRFFBFBFFRLLFBFBFBBRRLFBBBFBBLRLFBFBFFBRLRFBFFBBFRRRFBFBFBBLLRFBBBBBFLRLFBFBBFFRRRFBFFBBBLRRBFFBBFFLRLFBFBFFBRRRFFFFBFBRRRBFBFBFBLLRBFFFFFBRLRBFBBBBBLLLFFBBFBFLRRBFBBBFFLRRFFBBBFFLLLFBBFFFFLRLBFBFBFFRLRFFFBFBBRRLFBFFBBBLRLFBFBFBBRRRFBFFFBFLLLBFFBFFFRRLBFFBBBBRLRFFFFFBFRRRFBBBFFFLRLBFFFBFBRRLFFFBBBFLLLFFBFFFBLRRFBFBBFFLLLFBBBBFBRLRFFFBFFBLLRFFBFFBBRLRBFFFBBFRRRBBFFFFFLRLFBFFFFBRLRBFBFBBBLLLFBFBFBFLLRBFFFFFBLLLBFFBFBFRLLBFFBFBBRRRBFBBFBBRRLBBFBBFBRRLBFBBFFBRLLBBFBFBBRLLFFBFFFFLRLFFBBFBFRLRFBBFFFFRRLBFFFFFFRRRFBBFFBFLLLBFFBBFBLRRFBFBFFBLRLBFBFFFBRLRBFBFFBFLLLFFBBBFBRRLBFFFBFFLLRFBFBFBBLLLBBFFFBBLLRBFBFFBFLRRFBFFFBBLRLFBFBBBFRLRBFFFBFFRLRBBFFBBFRLRFBBFBBFLLRBFFFBBFLLRFFBFFFBLLRFBBBBBFRRRFFFBFFFLLLBFBFFFBRRLBFBBBBFRLLFFBFBBBLLRBFBBFBFLLRFBFFBBFLRLFFFBFFFLLRBFBFBFBLRLBBFFBBBRRRFBFBBFBRLLFFFFBFFRLRFBFFBBFRLLFBFFFBFLRRFBBFFFBLRLFBBBBBFLLRFFFBFBBLLRBBFFFFBRRRBFBFFBBRRRBFFBFBBRRLBBFFBBFRLLBFFFFBFRRLBFFFBBBRRLFFBBFFFLLLFFFFBBBLLRBBFFBBFLLRFFFBFBBRRRBBFFFBFRRLFFBBBBFRLRFBBFFFBRRRBFFFBFBLLLFFBFBFBLRLFBFFFFBLLRBBFBFFBRRLBFBBBFFRLLFBFBFFFLRRFBFBFFFLLRBFBFBBBRRLFBFFFFFLLRBFBFFFFLRLFBBFBBBRLLBFBFBFFLLLBFBBFBBLRLFBFFFBBLLLBFFFFFFLLLBBFBFFBLLRFFBFBBBLLLFBBBBBBRLLBFFFBBBLLRFBFBBBBLRRFBBFFFBLLLFFFBFBFRRLFFFFBBFRRLFBFFFBFRRLBBFFFBFRLRFFFBBFFLLLFFFFBFFLRLFBFBBBBLLRFBBBFFFRRRFFFBBBFLRRBFBFBBFRRRBBFBFFBRLRBBFBBFBRLLBFFBBFBLRLFBFBFBFRRLBFFFFFFRRLBBFFFFBRLLBFFBBFBLLRBFFBFBFLRRFBFBFBBRLRBFBFFBBLRLFFFBBBFLRLFBBBFFFLRRBBFFFFFRRLFFFBFBBLRRFFBFFBBRLLFFBBBBBLLRBFBBFBBLLLBBFBFFBRRRFBFFFFBRRRFFBBBBBRRRFBFBBFBLRLFFFBBBFRLRBBFFBFFLLRFFFFFBBRLLBFFFFFBRRLFBBBFFFRLLFFBBBFBRRRBBFFFBBRRLFFFBFFFRRRFFFBBBBLLLBFBFFBFLRLBFBBBBFRLRFBBFBFBLRRBFBFFFBLRRFBBBBFFRRRBFBFBFFRRRBBFBFBFRRRFBBFBFBLLRFFFBBFBRRLBFFBFFBLLRBFBFFFFRRRFBFFBFFRLRFBFFFBBRLLFBFFBFFRRLFBFBFFBLLRFFFBBFFRRLFBFBFFFLLLBFFBFBFLLRFBBFBBFLRRBBFFFFBRLRBFFFBFFLRLFBBFBFFLRLFFBFFFFRLRFFBFFFFLLRFBBFBFBRLRFFFFBBFLRLFFFFBBFLLLFFFFBBBRLRBFBFBFFLRLBFBBFFBRLRFBFFFFBRLLBFFFBBFRLLFBFBFBFRLLFFFBBFBLRRFFBFBBBLRLBFFBFFFRLLBFBBFFBLLRBBFFBFBLRRBFFBBBFLRLFBBFFFFLRRBFBBBBBLLRFFFFFBBLRLFFBBBBBRLRFFFFFBBRRRBFBBBBBRLLFBBBBBBLRLBBFFBBBRRLBFBBFBFLLLBBFFFBFRLLFFFBBFFRLRFFFBFFBRRLBFFFFBFRLLBFFBBFFRRRBFFFBBFRRLFBBFFFFRLRBFFBFFBRRRBFBBFFBRRLBFFFBFBLRRBFFBBBBLRRFBBBFBFLRRBFBBBFBRLRFFBBBFFLRLFFFFBFFLLRFBBFFBBRLRBFFBFFBLLLFBBBBFFLLRFBBFBFBLLLBFBFFFFLLLFBBBFBFRRRFBFFFBFRLLFFBBBBBLLLBBFBBFFLLRFFBFBBBRLRBBFBFFFLLLFFFFFBBRRLBFFBBBFLLLBFFBFFFRLRFFBBBBFRRLBFBBBBBRLRBFFBFBFLLLBFFBBFFLRRFBBFBBFRLLBFBFBBFLLRFBFFFBFRRRFBFBBBFLRLBFFBFBBLRLBBFBBFBLRRBBFBFFBLRLBBFBFBBRRRFBBBBFBRLLFBFBFBBLRLBBFBFBFLLRFBFFBFBRLRFFBBFFBLRRFFFBFBFLRLBFFBFBBRLLFBBBBFFLRRBFBBFFFLLRBFBFFBFRLLBBFBBFBLLLFBBBBFFLRLFBFBFFBLLLBFFBBFFRLRFBBFFFBLLRBFFBFBFRLRFBBFFBFLRLFFBFFBFRLLBFFFBFFRRLBFBBFBFRRRFFBBBFFRLLFBBBBBFLLLBFBBFFBLRRFFFFFBBLLRFFFFFFBRLRFBBFBBFLRLBFBFBBFLRRBBFFBBBLRRFFFFFBFRRLBFFFFBFRRRBFFFBFBRLRBFFFFBBLLRFBBBFBFRLLBFFFBBFLLLBFBBBFFLLRBBFFBFFRLRFBFBFBFLRLFFBBFFBLRLBFBBBFBLLLFFFFBFBRLRFBFBFFBRRLBFFFFBFLRRBFFBBBFRLRFFFFBBBRLLFBBBBFFRLRBFBFBFFRLLFBBBBBFRLLBFBFFFBRRRFBBBBBFRLRBFFBFFFRRRFFBBFFBRRLBFBBBBFLRLFFFBBBFRRLFFFFBFFRRRFFFBBFBRRRBBFBFFFLLRBFBBFBBRLLBFFFFBBLRRBBFFFBBLLLFFFBBBFRRRFFBFBBFRRLFBFBBBFLRRFBFFBFBLLLBFFBFBBLRRFFBFFFBRLLFBBBBFFRRLBBFBFFFRRLFFBFFBFLRRBFFBBFBRLRFFBBBFBLLRFBBFBFFRLRBBFBBFBRLRBFFBFFBRLLFFBFFFFRRRBBFFFFFLRRFFBFBFBRRLBBFFBFBRLRFBBBBFBLLLFBBFFBBLLLFFBFFBBLLLBFBFBBFRRLFBFFFBBLRRFBFFBFFLRLBFBBBFFLRLFBFBBFBLRRFBFBBBFLLLFFBBFBBLLRFFFFBFFRLLBBFFFFFLLLFFBBFBFRRLBFFFBFFLRRFFBFBBFLRRFBBFBFBRLLBFFBBFBRRRFBFBBFFLLRBFBBBFFRLRBBFFBFFRRLBBFFBBFRRRBFBBFFBLLLBFBFBFBRLRFBFFFBFRLRFBFBBFBRLRFFBBBBBLRLBFFFBBBLLLFBFFBFBRLLFBFFFBBRRLBBFBBFFLLLBBFFBFBLLRFBFBBFBRRRFBFBBBBRLRFBFBBFFRLRBFFBBBFLRRFBBBFFBRLRBFBBBBFLLLFFFBFBFRLLBBFBFBBLLRFFBFFBBLRLFBBBFFFRLRFFBBFBBRRLBFBFBBBLRRBBFBBFFRRRFBBBBBFLRRBBFBFBFLRLBFFFFBFLLRFBFBFFFRLRFBBBBFBRRLBFBFFFFLLRFFBFBFFLRRBFBFFFBLLRFFBFBBFLLLBBFBBFFLRRBBFFFBFLRRBFBBFFFRLLFFFFBBBLRRBFBFBBFRLLBFBFFBBRLLFFBBBBBRLLBBFFBFFLLLBFBBBBFRRLFBBBFFFLLLFFBFBFFRRRBFBFFBBRLRFFFFBFBLRLFBFFFBBRRRBFBFFBFRRLBFBBFBFRLRFBFBBBBRLLFFBBFFFRRRBFBFFFBLLLFFFBBFFLLRFFBFBFBRLRFBBBBBBRRLFFBBFBBRLLFFBFFFBRLRFBBFFFBRLLFBBBFBBRRRBFFFBBBRLLFBBBFBFLLRBBFFBFFLRLFBBFBBBLLRFBBBBBBLRRBFBBBBBRRRBFBFBBBRRRBFBBFFFLLLFFBBFFBRLLBBFBBFBLLRFBFFBBFLLRFFFFFBFRLRBBFFFBFLRLFBBFFBFLRRFFBFFBFRLRFBFFBFBLLRFFFBFBBLLLBBFFBBFLRRBBFFBFFRLLFBBFBFFLLLBFFFFBBRLLFFBBFFBLLLFFBFFBBRRLBFFBBBFRRRFBBFBFFRRRBFFBBBBLLLFFBBFBBRLRFFBBFFBRLRBFFFFBBRRLFFBBBBBRRLFBFFBFBRRLBFFBFBFRRLBBFBBBFLLLFBBFFBBLRLBFBFBFBRLLFBFFFFFLRLFFFBFFFLRRFBBFBBBLRRFFFFFBFLRRFBBBBFBLLRBFFBFBFRRRBFFFFBBLLLFFFFBBFLRRBFBBFBFLRRFFBFFBBLRRBBFFFFFRLLBFBFBFFLLRBBFBFBFRLLBBFFBBFLLLFBFBBBFRLLFBBFBBFLLLBFBBFFFRLRBFBFFBBLLLFBBBBBFRRLFFBBFBFRRRFBFFFFBLLLFFFFFBBRLRBFBBFBBRLRBFBBBBFLLRBFFBBBFLLRFFBBFBFLLRFFBBBFBRLLFFFFBBBRRRFBBFFFFRLLFFBFFFBRRRFBBFBFBRRRFFBBBFFRLRBFBFFFFRLLFBFFFBFLRLFFBFFBBRRRFBFBBFBLLLBFBFBBFLLLFFBBBBFLLRFBFBBBBLRLBFBBFBFLRLBFFFBBBLRLBFBBBBFRRRFFFBBBFRLLFFBFBFFLLLBFBFFFFRRLFFFBFBBRLRBFBFBFBLRRFBFFBBFRLRBBFFFFBLLLBFFBBBBRLLBFFFFBBLRLBBFBBFBRRRBFFFFFFLLRBBFFBBBLLRFBBFFFFLLRBBFFBFBRLLFBBBFFBRRRFBBFFBBLLRBBFFFFBLRRFBFFFFFLLLFBBFBFFLRRBFBBFBFRLLBFBBBFBRRRFFBFBBFRRRFBFBFFFRLLFFFBBFFRRRFFFFFBFLRLBFBFFBFLLRFBBBFFFRRLFBBBBBBLLRFBBFFFBRRLFFBBFFFRLLBBFBFFFRRRFFFBBFBLRLBFFBBBFRLLFFFFFFBRRRBFBFFBBLRRBBFFBBFLRLFFFBBBFLLRBFBBBFBLRRFBBFFBBRRLFFBFFBFLLRBBFBBFBLRLFFFBFFFRLLBFBFBBBLLRFFFBFFFLRLBFFFFBBRLRBBFFBFFRRRBFBBFBFRRLBBFBBFFLRLFFBBBBFRLLFBFFBBBLLLFBFBBFFLRLBFFFBBBRRRBFBBBBBRRLFBBBFFFLLR
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();const lines = data.split(/\n/);let found = Array.from({ length: 881 }, () => "0");for (let line of lines) {const id = parseInt(line.replace(/B|R/g, "1").replace(/F|L/g, "0"), 2);found[id] = "1";}console.log(found.join("").indexOf("101") + 1);
const data = require("fs").readFileSync("input.txt", { encoding: "utf-8" }).trim();const lines = data.split(/\n/);let max = 0;for (let line of lines) {const id = parseInt(line.replace(/B|R/g, "1").replace(/F|L/g, "0"), 2);max = Math.max(max, id);}console.log(max);
ecl:#eef340 eyr:2023 hcl:#c0946f pid:244684338 iyr:2020 cid:57 byr:1969 hgt:152cmpid:303807545 cid:213 ecl:gry hcl:#fffffdeyr:2038 byr:1951hgt:171cm iyr:2011hcl:#c0946f byr:1933 eyr:2025 pid:517067213 hgt:173cmecl:hzliyr:2018pid:5253256652 byr:2009 hgt:152cm iyr:1989 eyr:1968 hcl:64cb63 ecl:hzliyr:2013pid:862607211 eyr:2020hgt:174cmbyr:1990ecl:blu hcl:#888785ecl:grn byr:1955pid:608098408 eyr:2027 iyr:2020 hcl:#b6652a cid:264hgt:181cmbyr:1998 ecl:hzl eyr:2021hcl:#866857 hgt:189cm iyr:2030pid:013735467pid:075417314 hcl:#b6652a byr:1957iyr:2011hgt:154cmeyr:2025ecl:ambiyr:1993 hgt:74cm eyr:1960byr:2029hcl:293244 ecl:#3cb5e5 pid:4861232363hgt:153cm hcl:#6b5442 pid:065240897 byr:1932cid:196 ecl:blu eyr:2028 iyr:2019eyr:2024 ecl:ambhcl:#866857 byr:1922 pid:496904942 hgt:164cm iyr:2020pid:847705161 byr:1951 cid:124 iyr:1991eyr:2028 ecl:dnehcl:6b2d28 hgt:172cmbyr:2007 iyr:2029 ecl:hzl eyr:2026 hgt:168inhcl:zpid:63151612iyr:2027 hgt:172incid:174 byr:2014 hcl:z eyr:1921ecl:grt pid:#cebdc2ecl:amb hcl:#d09c0fiyr:2015 hgt:156cm eyr:2026 byr:1962pid:086120872cid:125pid:837849996byr:1958 ecl:brn hgt:166cm hcl:#ceb3a1 eyr:2028 iyr:2012ecl:gry hgt:180cmpid:939059935 eyr:2023 byr:1977 hcl:#b6652ahgt:190in byr:2029 eyr:1984ecl:gry hcl:z pid:055092916 iyr:2010hgt:63in ecl:blu byr:1940 iyr:2012 eyr:2029 hcl:#7d3b0cpid:163033394eyr:2040 pid:181cmiyr:1928 hgt:76cm hcl:d8aafb byr:1949 cid:275 ecl:xryhcl:#cfa07d ecl:oth byr:1948 eyr:2021pid:719690182 hgt:179cm iyr:2020byr:1939 cid:266eyr:2026 iyr:2017 hcl:#f116d2ecl:hzl pid:522421825hgt:68inhcl:z hgt:61incid:115 pid:180cm iyr:2030 byr:2014 eyr:2032 ecl:hzlecl:xryeyr:2028 pid:191cm iyr:2015 hgt:150cm byr:2029eyr:2027hcl:#a97842 pid:997937480 hgt:61in iyr:2019byr:1921ecl:grnhgt:163cmpid:912318455 iyr:2016 byr:1988 ecl:brn hcl:#a97842 cid:221 eyr:2029cid:333 hcl:#c0946fhgt:163cm iyr:2018 eyr:2027 ecl:othcid:70 hcl:#c0946fpid:961507902 byr:1949 ecl:grn iyr:2017 eyr:2029 hgt:69inhgt:169cm ecl:ambiyr:2013 pid:496169901byr:1943 eyr:2028 hcl:#ceb3a1cid:249ecl:blu cid:343iyr:1998 hgt:154in hcl:#efcc98 byr:1972pid:508213120 iyr:2012 eyr:2025 hcl:z hgt:70cm byr:1976ecl:brniyr:1924eyr:2005hcl:zhgt:167 pid:154cmbyr:2007pid:761333244 hgt:180cm iyr:2017 hcl:#18171d eyr:2021byr:1983cid:67 ecl:otheyr:1993byr:2003hcl:#602927ecl:grtcid:84 hgt:178pid:1847086637 iyr:2026hcl:#866857 hgt:162cm pid:483774485 iyr:2010byr:1946 eyr:2028 ecl:grypid:726639691 eyr:2028hgt:171cm hcl:#ff65a6iyr:2011 byr:1989hcl:z iyr:2026 ecl:xryeyr:2037 byr:2005 pid:#f09a0fhgt:68 cid:156hgt:71in ecl:blu eyr:2026 hcl:#18171dbyr:1981 iyr:2017pid:698636544eyr:2021byr:1957 ecl:brn pid:365378126 cid:93 iyr:2019 hcl:#18171d hgt:179cmbyr:1996 iyr:2014 hgt:64cmeyr:2034hcl:zpid:629486472 cid:140hgt:192cm eyr:2020 hcl:#b6652a iyr:1988 byr:2021 ecl:brnbyr:1955 iyr:2015 eyr:2030ecl:gry hcl:z pid:6550198754hgt:158cm cid:305ecl:gry hcl:#a97842hgt:176cm eyr:2022 pid:810146585 iyr:2020byr:2027 hcl:#cfa07diyr:2011 ecl:#f07598cid:293hgt:150cm pid:#fa948d eyr:2029eyr:2028 iyr:2013 hgt:69in ecl:gry pid:317170371cid:147 hcl:#bfe1f1byr:1976pid:059341891 hgt:174cmecl:otheyr:2029 iyr:2017 hcl:#733820iyr:2018 hcl:#ceb3a1 hgt:188cm cid:308pid:792826885 byr:1948 ecl:blu eyr:2028iyr:2017 cid:94 hcl:#95c7dcpid:231757803 eyr:2022byr:1992 hgt:153cm ecl:ambeyr:2027iyr:2011 hgt:186cmecl:brn pid:996347346 hcl:#866857byr:1960eyr:2025 byr:2001ecl:blu pid:755715478 iyr:2019 hgt:61inecl:gryeyr:2038hgt:81 hcl:z iyr:2028cid:214 byr:1965pid:412744447 byr:1979 hcl:#cfa07d ecl:blueyr:2029 cid:157hgt:180in iyr:1948hgt:170cmpid:623557081 byr:1924 eyr:2024 hcl:98d623 iyr:2012 ecl:ambcid:311 ecl:grniyr:2011 byr:1982eyr:2002 hcl:#ef318apid:0548169957hgt:87eyr:2030 hcl:#733820 iyr:2016 pid:558470391byr:1936 ecl:oth hgt:185cmiyr:2019ecl:amb byr:1949pid:376468392hgt:178cmpid:019195245ecl:grn hgt:171cmbyr:1978 iyr:2011 eyr:2022 hcl:#733820cid:134hcl:#623a2f hgt:192cm eyr:2026 byr:1977ecl:grn cid:308ecl:hzl pid:715816358 hgt:69in iyr:2014 hcl:#623a2fbyr:1996eyr:2027iyr:1947ecl:#39a697hgt:183cm byr:2029eyr:2022 pid:7951883913hcl:zecl:gry byr:1950hcl:#18171d hgt:168cm iyr:2020 pid:677187333 eyr:2027byr:1969 ecl:blu hcl:#18171d iyr:2011hgt:162cmpid:701349891cid:269 byr:1966iyr:2011pid:905940527 eyr:2023 hgt:190cmecl:brn hcl:#ceb3a1eyr:2027 pid:454627395 ecl:brnhcl:#ceb3a1 cid:302 hgt:184cmbyr:1959iyr:2015iyr:2011eyr:2028hgt:166cmhcl:#733820 byr:1938 ecl:blu pid:857984986hcl:#c0946f ecl:brn pid:226877822hgt:182cm byr:1998cid:160hgt:186in pid:26499164 byr:2017hcl:ziyr:1998 eyr:2026cid:331 ecl:#236556pid:328866543hgt:165cm eyr:2039 iyr:1987 ecl:amb byr:2018 hcl:ziyr:2016 eyr:2036 hcl:#888785 byr:1976 pid:160402352 hgt:76cm ecl:bluecl:bluhcl:#fffffd eyr:2025 hgt:66in pid:979788527byr:1957 iyr:2013ecl:grn pid:279357265 iyr:2019 eyr:2021 byr:1953hgt:177cm hcl:#c0946fecl:oth hcl:z eyr:2025 byr:1949 hgt:189cm iyr:2020 pid:901383503byr:2019 hcl:#733820pid:31022828 eyr:1929hgt:75cm iyr:2012 ecl:grnpid:080462937ecl:blu hcl:#866857cid:102iyr:2013 eyr:2025 byr:1975 hgt:64iniyr:2016eyr:2028cid:125byr:1979 hcl:#866857ecl:brn hgt:173cm pid:814947616hcl:z byr:2020 pid:#c3b54b hgt:174in eyr:2038iyr:2016ecl:gmtcid:132iyr:1958pid:61543452 hcl:zecl:zzz eyr:2039 byr:2006cid:55 eyr:2022 byr:1954 iyr:2015hgt:188cm hcl:#a97842 pid:49143631 ecl:ambhgt:152cmbyr:1982iyr:2013 ecl:bluhcl:#341e13eyr:2026 pid:440841976iyr:2019 ecl:blu pid:553456616 hcl:#733820 hgt:160cm byr:1932 eyr:2030byr:1980 hgt:169cm hcl:#7d3b0c cid:312 iyr:2010eyr:2026 pid:028550304 ecl:grnecl:amb eyr:2021 iyr:2014 hgt:71in pid:986053283 byr:1981ecl:otheyr:2023 hcl:#888785byr:1949iyr:2016 pid:699325656hgt:63cm cid:297 eyr:2020 pid:990390922hcl:#602927 ecl:lzriyr:2012 byr:2016hcl:9ea2fa eyr:2023 pid:088680493byr:1998 iyr:2017 ecl:utc hgt:170cm cid:175cid:316 iyr:2016 eyr:2026 hcl:#79ff1d hgt:65inbyr:1997 pid:215466710 ecl:othcid:213 byr:1983 hcl:#888785 iyr:2016 pid:767747981 eyr:2025ecl:hzl hgt:168cmeyr:2030 byr:1972cid:282ecl:gry hgt:178cmhcl:#a97842iyr:2018hcl:#6b5442 ecl:ambeyr:2028 cid:104 hgt:159cm pid:446429120 iyr:2012byr:1938byr:1940 hgt:178cm ecl:othhcl:#ceb3a1pid:845683663 iyr:2015 eyr:2024byr:1940 pid:496262233hgt:184cm hcl:#b6652aecl:grn cid:152 iyr:2012 eyr:2029hgt:185cm pid:455744229 byr:1954 eyr:2022 ecl:gry hcl:#6b5442 iyr:2012hgt:182cm byr:1966 eyr:2028 ecl:#a5b7fciyr:2029pid:343591896cid:58ecl:hzleyr:2022 hgt:180in byr:2021hcl:#6b5442ecl:utc hcl:#b6652apid:635147657 byr:2020eyr:2022 hgt:157cm iyr:2018ecl:grt cid:312 iyr:1959 pid:154262836hgt:171cmhcl:#fffffdeyr:2024byr:1982hcl:#7a12b4 pid:223424149 ecl:hzl hgt:175cmbyr:1930 iyr:2010 eyr:2028hcl:#c0946f pid:633476454 eyr:2026 iyr:2011byr:1934hgt:186cmcid:289 ecl:gryhcl:#fffffd pid:376300524 hgt:155cm byr:1964 iyr:2017 eyr:2021 ecl:grnhcl:a5d4dc byr:2006 cid:165 ecl:#db800f iyr:2029 pid:0199789970 eyr:1961 hgt:61cmeyr:2027 hgt:170cm iyr:2010hcl:#c0946fecl:grn pid:415726530byr:1985cid:197 byr:1957 hgt:192in hcl:#a97842 ecl:hzl eyr:2029 pid:958973455 iyr:2011iyr:2015 pid:933689314 hgt:162cm ecl:ambcid:122 eyr:2021hcl:#6b5442 byr:1973eyr:2026 hgt:172cmiyr:2012ecl:brn hcl:#733820 pid:004474632byr:2000hgt:191cm eyr:2030 byr:1999 pid:9155071477 iyr:2026 hcl:#602927 cid:315ecl:grniyr:2010 pid:182884251 hcl:#18171d hgt:154cmeyr:2020byr:1926 ecl:othiyr:2019 eyr:1920 pid:132839546cid:283 hgt:188in hcl:#efcc98 byr:2027iyr:2011 hgt:177cmcid:117 byr:1976ecl:gryhcl:#623a2f eyr:2030 pid:134592046byr:1968 hgt:146iyr:2013 hcl:eefdc4 eyr:2028ecl:xry pid:722120008iyr:2016 byr:1941 hgt:67cm cid:51 hcl:#b6652a ecl:hzl eyr:2034 pid:994005715hcl:#cfa07d ecl:othhgt:182cm eyr:2021 pid:612583941byr:1983iyr:2019byr:1922hcl:#602927 hgt:161cm ecl:gry eyr:2020 pid:190170808 iyr:2013hgt:63cm cid:136iyr:1999pid:8235748647 hcl:zbyr:2022 eyr:1933ecl:#304383cid:273 ecl:blu hcl:ziyr:2011 byr:2007eyr:2020pid:942473857 hgt:178inecl:grt byr:2029 hgt:187in eyr:2030 cid:160hcl:#efcc98 pid:#39f22biyr:1966byr:1978 ecl:oth iyr:2011 hgt:164cm eyr:2027 hcl:#cfa07dhgt:75cm hcl:#1e8137 byr:1986 ecl:blu eyr:2022 pid:796688423iyr:2012eyr:2026ecl:#3013af hcl:z pid:#e8597f hgt:123 iyr:2025 byr:1942hcl:z hgt:177iniyr:1993 pid:#4c9348 byr:2008 eyr:1989pid:123524366 byr:1935hgt:156cm hcl:#7d3b0ciyr:2020 ecl:brn eyr:2020hcl:z eyr:2038 pid:7663741757 ecl:gmt hgt:174byr:2008 iyr:1939cid:225hcl:#888785 hgt:172cmecl:oth pid:500711541 eyr:2027byr:1931 iyr:2012pid:575447108 ecl:amb byr:1943hcl:#888785 hgt:173cm eyr:2024eyr:2021 iyr:2010 pid:178773264 hgt:157cm byr:1965 hcl:#bb7bcf ecl:ambiyr:2023 ecl:#35bd84 byr:2020hgt:72ineyr:2037hcl:#6b5442pid:421311669byr:1921 iyr:2011pid:146088688eyr:2023 hcl:#15ed24 hgt:183cmecl:brnhcl:#b6652a cid:243byr:1993 eyr:2024iyr:2014 hgt:172cmpid:771275594eyr:2024hcl:#cfa07d pid:858807920 cid:293 hgt:157cm ecl:hzl iyr:2013 byr:1984ecl:blu hgt:193cm cid:73 hcl:#18171d eyr:2026iyr:2016 pid:124151812 byr:1945ecl:amb iyr:2018pid:214555737 hgt:157cmeyr:2028byr:1925 hcl:#866857pid:5633250409hcl:4ef7d8byr:2004 iyr:1958hgt:96eyr:2038 ecl:xry cid:274byr:1972 pid:401239851 hgt:184in hcl:z iyr:2017eyr:2030 ecl:#cb289a cid:140hgt:175cmbyr:1926 hcl:#cfa07d eyr:2029 ecl:gry pid:325039730 iyr:2017cid:101 hgt:166cm byr:1986 ecl:ambhcl:#7d3b0c iyr:2013pid:413769688 eyr:2024hgt:159cm cid:311byr:1993 eyr:2028 pid:188cm ecl:oth hcl:#602927 iyr:2013pid:565831038ecl:ambhgt:155cm hcl:#fffffd cid:335 iyr:2016eyr:2029 byr:1997hgt:122byr:2022eyr:2028 ecl:blu iyr:2017 pid:269710626 hcl:#b6652acid:196byr:1953 hcl:#6b5442 iyr:2010pid:216121215 hgt:188cm ecl:bluiyr:2011 hcl:98166c hgt:62cmbyr:2028eyr:2024pid:792478385 ecl:grnhcl:#efcc98 iyr:2012 pid:020039675 eyr:2021 byr:1974 hgt:156cmecl:hzlcid:123 hcl:#7d3b0cbyr:2026 eyr:2004 iyr:2012 ecl:oth pid:349203133 hgt:160cmpid:085461475byr:1962 iyr:2020 hcl:#623a2feyr:2024cid:80 ecl:brnhgt:154cmecl:oth hgt:156cm iyr:2016hcl:#6b5442byr:1973eyr:2021 pid:539898580iyr:2026 hgt:191cmhcl:zbyr:1930 pid:#abc2f0 ecl:blu cid:242 eyr:2024cid:167hgt:179cmiyr:2017 eyr:2021 pid:756797571 byr:1949 ecl:brn hcl:#a97842byr:1975 eyr:2030ecl:oth hgt:169in pid:4031206183 hcl:#733820 iyr:2017 cid:244ecl:#54cfeb hgt:152cmiyr:2026 hcl:36b4b9byr:2030pid:#fa1cb9 eyr:1964byr:1974 cid:99 hcl:9e3296eyr:2032pid:686747414iyr:1995ecl:ambiyr:2030 ecl:oth hcl:z byr:1979pid:114661006 hgt:191cm eyr:1941hcl:#341e13 iyr:2014 byr:1953pid:188326193 ecl:gry hgt:189cm cid:283eyr:2030byr:1975pid:092061576 hgt:73in eyr:2023ecl:brn cid:227 hcl:#5e9d91iyr:2011hcl:#7d3b0c hgt:167cm cid:141eyr:1957 byr:2012 ecl:gmt iyr:2019 pid:#1b7c8ahgt:168cm hcl:#c0946f pid:599500784 byr:1930 eyr:2023 ecl:hzl cid:113iyr:2013eyr:2030 hcl:#b4cb4fhgt:68inecl:brn byr:1923 pid:699162086iyr:2013ecl:dne hcl:z eyr:1971pid:#580add byr:2020hgt:190cmhcl:#ceb3a1byr:1976 eyr:2020cid:162 iyr:2016hgt:168cmecl:hzlpid:050478613 hgt:59cmiyr:2017ecl:grn byr:2030 hcl:#cfa07d eyr:2025pid:352943968 eyr:2025 byr:1980 iyr:2014 ecl:gry hcl:#c0946fhgt:193cmpid:328621931 cid:310 hgt:170cmhcl:#733820 byr:1955iyr:2016eyr:2028 ecl:hzlhcl:#866857pid:095858739 byr:1956iyr:2018 hgt:193cmecl:hzleyr:2029pid:70973661 eyr:2039 ecl:gryiyr:2016cid:291hcl:#623a2f hgt:97hcl:4d51a8eyr:1978ecl:gmtbyr:2029 iyr:2022pid:34507041 hgt:61cmbyr:1989 ecl:brn pid:769582914eyr:2026 cid:218iyr:2020 hcl:#866857 hgt:184cmecl:brniyr:1998 cid:227hgt:162inbyr:2026hcl:#602927 eyr:2027 pid:236998728ecl:gry byr:1984 hgt:157 cid:295eyr:2020iyr:2018 hcl:#733820pid:037871534hgt:166cm hcl:#c0946f pid:412146401iyr:2011eyr:2022byr:1938ecl:brnecl:brn cid:95 byr:1981 eyr:2030 hcl:#efcc98 pid:777041035 hgt:152cm iyr:2011eyr:2024 hgt:89 pid:3761913749 iyr:1939 byr:1967 hcl:a222f6 cid:165 ecl:#7fe574cid:339 hgt:156cmecl:brn iyr:2013 byr:1951 hcl:#efcc98 eyr:2026pid:863566946ecl:brn hcl:#6b5442 eyr:2023pid:787129723 byr:1949 iyr:2015pid:#7f615acid:202 hcl:#6b5442 eyr:2028ecl:#a5419chgt:75cmiyr:2011byr:2001pid:864001133cid:236byr:1943 hcl:#733820 ecl:dne eyr:2025 hgt:171cm iyr:1989pid:193073684 ecl:grn byr:1962 iyr:2014hcl:#cfa07d hgt:189cmcid:321 eyr:2029byr:1959hcl:#b6652aeyr:2026hgt:159cm pid:815014918 iyr:2011 ecl:ambiyr:2017 hgt:182cmhcl:#a97842 eyr:2023 ecl:grn pid:656177536byr:1973eyr:1923 ecl:grncid:138 iyr:2020hgt:164cm byr:1958 hcl:#c0946f pid:783366277iyr:1932 hgt:172 ecl:bluhcl:#733820 byr:1962 pid:554221464cid:169 pid:922622614byr:1942 hcl:#ceb3a1 hgt:169cm eyr:2024ecl:gry iyr:2017cid:219 ecl:grnhgt:156cm byr:1998 eyr:2021iyr:2017 hcl:#ceb3a1 pid:450186263ecl:amb hgt:179cm pid:768428582 iyr:2010 eyr:2023 byr:1952 hcl:#fffffdeyr:2024hgt:193cmiyr:2017 pid:469033795 byr:1979 hcl:#18171d cid:67 ecl:ambiyr:2016 byr:1937 pid:798267514 hgt:155cm hcl:#866857 eyr:2026ecl:othhgt:172cm hcl:#866857 iyr:2018 pid:662186551byr:1996eyr:2025 ecl:ambpid:2854521962iyr:2021ecl:zzzhcl:12f1ba eyr:2037 hgt:159cmbyr:1937ecl:oth pid:488050418 byr:1927 hcl:#a97842 hgt:153cm iyr:2013 eyr:2024pid:119536312 ecl:#2036adhcl:543178 iyr:2020byr:2013hgt:177cmeyr:2022pid:788908662 hcl:#602927 eyr:2029ecl:oth byr:1930iyr:2020hgt:179cmbyr:1972pid:053386972 iyr:2014 ecl:grn hgt:65in hcl:#cfa07dpid:9828921035 ecl:bluhcl:z hgt:152ineyr:1949 byr:2010cid:157 pid:097910554 byr:1999hgt:159cm hcl:#6b5442 ecl:blu eyr:2024iyr:2010hcl:#a97842eyr:2040 ecl:#f8ad77hgt:173cmbyr:2019 iyr:2010pid:#d16a6eecl:dne hgt:191cm iyr:2020 hcl:#b6652aeyr:2021 pid:571971509 byr:1983hcl:#18171d iyr:2016 pid:159074622eyr:2027 hgt:163cm byr:1954cid:257pid:243560302 cid:58hcl:53a4cf byr:2012ecl:#fdbfb8 eyr:1920 hgt:179 iyr:2026pid:040606106 eyr:2030 hgt:188cmbyr:1969iyr:2012 hcl:#ceb3a1 ecl:ambeyr:2022hgt:175cm hcl:#b6652a byr:1967 pid:269969031iyr:2018hcl:#18171d cid:278 byr:1931pid:134809791eyr:2035 ecl:#44e6cd iyr:1993hgt:177inecl:utc cid:289iyr:1923hcl:13a67a pid:3045345984 byr:2030 eyr:1944pid:839901650 eyr:2030ecl:grnbyr:2015 iyr:2017 hgt:168 hcl:131f4eiyr:2015 pid:529736732 ecl:brn hgt:176cmeyr:2026 byr:1952 hcl:#6b5442hcl:#c0946fcid:323 pid:303966428 iyr:2019eyr:2027 hgt:170cmbyr:2001ecl:brnpid:193678728 hgt:72in eyr:2027 iyr:2015 byr:1951 ecl:gry hcl:#18171deyr:2026 cid:283iyr:1938 pid:687430885hgt:186cmbyr:1949 ecl:#521638 hcl:d13b2feyr:2024 hcl:#ceb3a1 iyr:2013 ecl:brnhgt:168cm pid:792088241hcl:#888785 ecl:ambbyr:2009 iyr:2015hgt:151cmeyr:2020 pid:223927808byr:1926pid:717704850hcl:#623a2f eyr:2022 hgt:64in iyr:2018 ecl:gryeyr:2023 byr:1954hgt:169cmecl:hzliyr:2010 pid:116868997 hcl:#18171decl:hzl byr:1965 hcl:#a97842 iyr:2011 pid:506354451 hgt:172cm eyr:2029eyr:2022 pid:994565705iyr:2013 ecl:brn hcl:#623a2fbyr:1979iyr:2011byr:1931 hgt:183cm hcl:#284f26 cid:306ecl:amb eyr:2021pid:977533079eyr:2027iyr:2011 ecl:grybyr:1993pid:272334781 hgt:161cm hcl:#9a35b6eyr:2026hcl:#602927 ecl:blupid:212300161 byr:1946cid:193 iyr:2020 hgt:157cmpid:538594567 byr:1976 eyr:2027 hcl:#efcc98 iyr:2011 hgt:154cm ecl:othbyr:1949hcl:z ecl:#ce67aaeyr:1942 pid:7978941589 iyr:2025 hgt:161inhcl:#c0946fcid:55byr:1963 ecl:blu hgt:161cmpid:547120453 iyr:2015 eyr:2021hgt:173cm eyr:2022iyr:2016 byr:2001ecl:hzl pid:239803460hcl:#b6652a ecl:oth eyr:2021 hgt:167cm pid:401266644 iyr:1969 byr:1974eyr:2030 pid:581963885hcl:#64cb23ecl:blubyr:1928 hgt:181cm iyr:2018pid:186338247ecl:hzl hgt:193cm hcl:#ceb3a1eyr:2022 iyr:2010iyr:2015 ecl:gry hgt:159cm eyr:2027 hcl:#ceb3a1byr:1925 pid:715902111 cid:149iyr:2018 hcl:#623a2f eyr:2020 hgt:162cm ecl:grn cid:135byr:1922pid:373216777eyr:2020 pid:749899012 hcl:#888785 ecl:brniyr:2010 cid:225 hgt:172cmbyr:1972iyr:2020 hgt:178cm ecl:grn hcl:#18171d pid:613792489 cid:240eyr:2028byr:1972iyr:2015 byr:1938 eyr:2026cid:113 ecl:grnpid:846231640 hgt:161cmhcl:#b6652aecl:gryhcl:#ceb3a1byr:1956 cid:338 pid:936012518hgt:62ineyr:2029 iyr:2016pid:730866353 ecl:brn byr:1986iyr:2014hgt:190cmeyr:2021 hcl:#a97842 cid:126eyr:2021cid:180 pid:958310635 ecl:brn iyr:2015 hgt:189cm hcl:#efcc98hgt:188cm ecl:hzl pid:179001863 iyr:2016 eyr:2029 hcl:#341e13 byr:1932cid:77 eyr:2027 hcl:#623a2f iyr:2016 ecl:brn hgt:170cmbyr:1947hgt:66in pid:617518313 iyr:2013 byr:1977 hcl:#b6652a ecl:brn eyr:2025pid:787861420iyr:2014 hcl:#623a2f hgt:61inecl:oth cid:78eyr:2022 byr:1975ecl:hzliyr:2017 eyr:2028 hcl:#602927byr:1958 pid:985208714hgt:160cmbyr:2002iyr:2013hcl:#341e13 pid:188110633 ecl:gry hgt:169cmeyr:2025byr:1981eyr:2028hcl:#341e13 ecl:amb hgt:160cm cid:121iyr:2015 pid:963848397iyr:2013 hcl:#866857 pid:#db8648 eyr:2021 ecl:grybyr:1975hgt:153cm cid:114hgt:109cid:287 hcl:#6b5442iyr:2028 byr:1926 eyr:2036 pid:2378208387ecl:#245a62pid:857722366byr:1975 eyr:2027ecl:grn iyr:2019 hcl:#0afad1hgt:66inbyr:1935 hcl:#cfa07d hgt:173cm ecl:brn eyr:2021 iyr:2019cid:66 eyr:2024 hcl:#efcc98 byr:2002 iyr:2010hgt:176cm pid:697153153 ecl:ambiyr:2019hcl:#cfa07d ecl:blupid:695914972eyr:2024hgt:158cmbyr:1943ecl:xry hgt:62inpid:14733148 cid:148iyr:2016 byr:1925 hcl:#6b5442eyr:2028iyr:2025cid:53 hgt:132 ecl:gmt hcl:159b19pid:156cmbyr:2025 eyr:2001hcl:#623a2f ecl:oth byr:1974 iyr:2018 hgt:161cm eyr:2029 pid:6826285172ecl:grybyr:1956 hcl:#7d3b0c hgt:170cm iyr:2020eyr:2020pid:#946a88 hgt:186cm hcl:#733820 byr:1946 ecl:#016645 iyr:2015hgt:181cm hcl:#888785 iyr:2013 pid:634152817byr:1982 cid:245 ecl:grn eyr:2021ecl:brnpid:737531770 iyr:2010eyr:2020byr:1929 hgt:189cm hcl:#c0946fcid:158 iyr:2019 hcl:#341e13 eyr:2027 ecl:ambbyr:1986 pid:834976623pid:976934668 cid:61 eyr:2020 iyr:2020hgt:76in byr:1927 ecl:ambhcl:#e05ee3pid:526042518 iyr:2019 eyr:2027 hcl:#623a2f byr:1976 ecl:ambpid:279367290 hcl:#a97842 hgt:158cmeyr:2027byr:1959iyr:2020ecl:xry byr:2028pid:357216861 hcl:#a97842 eyr:2024 hgt:66cmiyr:2012hgt:188inecl:lzr cid:64 eyr:1958 byr:2014 hcl:z pid:285207570 iyr:2026eyr:1973 iyr:2017 ecl:oth cid:282 pid:695814158hcl:ziyr:2010 pid:661168409hcl:#53c696hgt:186cm ecl:ambbyr:1960eyr:2029eyr:1982 hgt:169cmiyr:2002 byr:2025 hcl:327f93 pid:831648100byr:1967 ecl:otheyr:2021hcl:#602927 iyr:2014pid:274974402 hgt:183cm### fix off by one, I mutated the input to make code simpler
const fs = require("fs");const readline = require("readline");(async function () {const rl = readline.createInterface({ input: fs.createReadStream("input.txt") });const fields = ["byr", "iyr", "eyr", "hgt", "hcl", "ecl", "pid", "cid"];let lines = [];let found = {};let result = 0;const re = /(\w{3}):\s*([^\s]+)/g;for await (let line of rl) {line = line.trim();if (line.length > 0) {lines.push(line);} else {if (lines.length > 0) {const combo = lines.join(" ");let match;while ((match = re.exec(combo))) {found[match[1]] = match[2];}const foundKeys = Object.keys(found);if (foundKeys.length === fields.length ||(foundKeys.length === fields.length - 1 && !foundKeys.includes("cid"))) {if (/^\d{4}$/.exec(found.byr) && Number(found.byr) >= 1920 && Number(found.byr) <= 2002) {if (/^\d{4}$/.exec(found.iyr) && Number(found.iyr) >= 2010 && Number(found.iyr) <= 2020) {if (/^\d{4}$/.exec(found.eyr) && Number(found.eyr) >= 2020 && Number(found.eyr) <= 2030) {const h = /^(\d{1,3})(cm|in)$/.exec(found.hgt);if (h &&((h[2] === "cm" && Number(h[1]) >= 150 && Number(h[1]) <= 193) ||(h[2] === "in" && Number(h[1]) >= 59 && Number(h[1]) <= 76))) {if (/^#[0-9a-f]{6}$/.exec(found.hcl)) {if (["amb", "blu", "brn", "gry", "grn", "hzl", "oth"].includes(found.ecl)) {if (/^\d{9}$/.exec(found.pid)) {result++;} else console.log("bad pid", found.pid);} else console.log("bad ecl", found.ecl);} else console.log("bad hcl", found.hcl);} else console.log("bad hgt", found.hgt);} else console.log("bad eyr", found.eyr);} else console.log("bad iyr", found.iyr);} else console.log("bad byr", found.byr);}}lines = [];found = {};}}console.log(result);})();
const fs = require("fs");const readline = require("readline");(async function () {const rl = readline.createInterface({ input: fs.createReadStream("input.txt") });const fields = ["byr", "iyr", "eyr", "hgt", "hcl", "ecl", "pid", "cid"];let lines = [];let foundFields = [];let result = 0;const re = /(\w{3}):\s*[^\s]+/g;for await (let line of rl) {line = line.trim();if (line.length > 0) {lines.push(line);} else {if (lines.length > 0) {const combo = lines.join(" ");let match;while ((match = re.exec(combo))) {foundFields.push(match[1]);}if (foundFields.length === fields.length ||(foundFields.length === fields.length - 1 && !foundFields.includes("cid"))) {result++;}}lines = [];foundFields = [];}}console.log(result);})();
......#..##..#...#...#.###.....#..#............#..........#.............#....#..........#........#..#.#..........#..#.....#.#.......#...#......#........########........#.#....##..##..#........#.#..#..#..##.#..#.##.....#..#.#..............##....##....##......#....#........#...###...#....#.#....#.#..#......#..#..................#.....#.....##.#...#...#....#............#.#.#...#.....#...##........#........#....#........#..#....#..####...##.....##.#.#...........#.#.###........#.#.#.........#.......#.............###.....#.#..#.####.#..#....#.....#.........#.#.#........#.#.....#.....#.....#.......#................##.##...#.#..#...###.....#....#..##....#....##..#............##...##...#............######...#.##..........#........#.#...#..##.......###..#.#.....##.#.#......#..#.#...#.#..#.#.##..#.....#.#...#......#.#....#...#............#...#.....#.#...##.....#......##...........####........##.......#............#.#................####.........#.##....###..#..#..#.#..............#.#........#.#........#.........#............#.#.#...#.....#....#.............#.#...#####..#..#...........#.#....#....#...........##.#...#.........#.......##.......#.##..##......#..................#.....#.......#.#.#..................#..#...#...#.#.##....#.#......##....#..#.........#.......#.....#........#.........##......#...........##................#..............###.#....#.........#..#...#..#..#..#..#.#..#.....#.##.#..#..#.#.....#.......#....#...#.#.....##.#...#..##..#......#..#.###...........#..##...##.#........#.#......#.#....#.#..#.#.......#..###...##..#.......#.#....#..........#.....#.....#..#.#.#..#..#........#..#...#......#.#...#.##.....#.##...######..#.#....#.........##.#.#.......................#......#..##...#...#.#..##.......#...##..#.......##......##.#..#...#.#....##.......#..#.............#...#............#..#................#.#.........#...#..#..#.#...###...............##...#.............#.....#....#....###.#..#....##..#................##...#.#..#..##......#....##....#...#.##...#....#..#....#.......#...##..##.#.........#...#....#.##........###.#..........#......#..#..#...#.##..#.#......#..........##..#....###.##.....#..##....#...#.#.....#..###....##...#.......#.........#....#.#..#..........#.......#.#.......#.............#...##..#...#....#.##..#........#.......#...........#....#.....##......#....#.#...#......#.....#....#.....#..#.....#....##...#...##................#....#......#...#....#...#...#....###...##..#.#....##......#..#.......#.........#..#......#...#...#.##.......#....##..#.....#.#...#.##..#..#..#...#.#...#.#.........###....#....#.....#..#.##.#..##..#...........#....#....##..#..##.#.......#....#..#....#..#.........##..#......#.#..........#.#.#....##.#......##.##...#....###...#..........#..#..#.....#..#.#.#.#..#......#.#......#....#......##.#......#.#...#.....#.......#....#.......#.#.#................#................#..#..#...............##.##......#...#.####....#.#.#.......#..##............#....#.......#..#.#...#..................#.##.#.#..##.###.....#..#.........#...#.#...#......#..#.........###..........##...###..##..#..#.#...#........#.......##........##...#........#....##...##..........#.##.....#.#.##..#..##..........#............#....##......#.#.#..#.........#.#.......#..#..##.##...#.##...#....#...#......##.#...##............##....#...#.###....#.......#...#...#.......#######.#....#.....#.#........#.......#............##.......#...........#......#.....#........#....#.##.#.............#........#.......##.#.#....#..#.....#..####.#.....................#.......................##.#.....#..##.#..##........#.#.##...##....#..##......................##.###..........#.....#...#........#...#..............##..#..........###.........#.........#.....##....#..#..#.#.#........#.......#.##...#.####.#....#........#............#.##.......#......##.....#..#...#.........#......###...#.##......#..#..#..#..#............#..#.###.......##.........#..##...#..#.#.....#.###..#.##.#........#..#..........#..###.#........#.........#....#.#..#.....#..#..#.......#.....##.##...#...###.#.#..#.#..#....#..#.........#..#....###.......##.####...#....#........###..#........#..#..##...#......#.........#.........#...#..#.#...........#...................####....#....#....#......###...##....##........#..###.#..#......#......#.....#.#.........#..#....#.......##.....#.........###..............#........#.....##....#.#..#.....###.#....##..............#..##.#....#.#...........#....#.......#.#.#..#.#....#...........#...#..........#.#..#.................##........#######..#.#..#...#.....###.........#.#......##.#.......#...............##........#..#.....#..#....#..#......#..#.#.......###..#....#...##..#.#.#.#.........#.....#....#....#.#..#..........#...###........#.#.###......##..................#.....#.#...##...#..#.###...........#...###.#..........................#..#.##...#..#..##.###.....##.##.#......#..................#.#....#.......#..##.#.......#.......#...##....#.#................#.....#...#..#.#.#....##....#........##......#.....#..........#......#...........#..##.........#......#.#...........#..........##....#.#.#...........#.#..............#.....#..#....##....##...............##...##......#.#.###.#.....#..#....#..#...#.#...#..#...###..#..#.......#.......#......#..#.##.....#....#...#....##.....#..##.......##..#.#.#..#....#.#......##....#.....#..###.#...#.#......#.##...#..##......#...#...#......##..#..#...#.#..#.........#....##...###...##..###.....#......####.....#.#.........#..##.##................#..#.................#...#..##.#.....#....#..#.......#.....#.....##....#..#..#.....###.#..#..#.#.#.......#.....##...#.....#...#.#........#.#.###...#....#.....#.....#.....##.#...#..#.........###.#............#...##.###.......#.....#..#..##.............#.#..#.#..##..#....#...##......#...........#..#.......#...#.##.#.#.#.....##....#...............#.................#.#......#.....##.............#...#.#.....##......#.#....#..........#.#..#.##.......##...#...#.....#.#.#...#.#........#......##....#.##....##....#....#...#..#..#.#.#......#..........#...#.....#..##..#....#....#..##.#..#.#...#........#..#.#....#.....#.#..#..#...#.#...###........#.#......##..#...............................#.#..##...##...#...#......##...#.####......#.........#....#.#...#.#...##....#......#.#.....#.....##..##.#.................#...............#...................#.....#...#..##..##.........#..##.......#.......#..#.#.#......##.....#..#.....#...#.#.#........##........#.#........##.#....#.....###..#.......#...#.#...#....#.........#.......#......##..#........#####.#........###..#....#.#..#...#.####........#..........#.#.............#.#......#.#....#.#.#....#.##.....#.#.#.............#....#...#........#.....#.#...#..###.#..#.......#..#............#...#...##..#......###..#........#.#.....#..##......#.#.#.#...........#.#..#...##.##.....#....#..#........##.#..........#.#....#...#...#.#.#.#..#.#...#......#...........#......###.#........................#...#....#...#.#....#.##.#.........#...##....................#..........#.#...#.......#........#....#.......#......#..#...............#..#...##.#.#........#.....##.#..#....#...#..##....#....#.#...........##......#.#.........#..#.....#..#.........##....#.#.#....###.#..........#....#.#...#..#.........#.....##..#....#.#......#.#.#...#.##..##.#.......#..#...##.#.##........#.#..#...##.#.#..#.....#..#......#......#...#.#..#.........#......#.#....##....##........#.##...##..#..........##.#..#....#.......#.........#.......#.......#.#...#...................#.##.......#.##..#.##..#...#..#.......#.....#..#............#.##.......#....#.#..##..#....#.....#...##.#.#..#...#..............#.........#......#.#....#.##.....##.......#....#.......##.#.#.........##..#.....#....#....#.#.#.#....#..#..##.......##...#...........#.#...............#...#.#..#..##....................#.......#.........#..#.#.#.....##.#....#...#..#.........#...#..###.##..###...##.....#..#....#.#.#...#.#..........#....................#.#....#.....###.##..............####.....#.##................#.....#........#...#..#......#.....#......#............##...........#...#...##.#....#...##.....#.....#..#..#.....#...##..##.............#......###.#.......#.........#...#..#.......#......#..#...#.#....#.#....#......#.##....#.##.#....#.#...#.......#.#...#.##..#.............#......#.....#...............#...#.....#...##...#.#......##....#.##..#........#.##...........##.....#..#........#..#....#..#.......#.##...........#..#..#...#...#........#.##....#...#.##.......#...#........#......#....#.............#..#......#....##...#...#.....##......#.#####.........##...#.....#.........#.......#....#.....#..#....#..............#.#..#..#.........#.................#...#....###.#..##.#....#...#.#......#.#..##......#.#........#.#...##.......#...#...#..#.#..#..##..#...##...#......#...#...##.#...#.........###.#...........##.##....#.##..#.#.###.......#..##...#...#....#.......#..##......#.....#....#.#..#..#.#.#....#...#.............##....#....#.#............#.......#.#..###.#.###.....#.#....#.##..#.#..#.....#.#.#.....#.....#.#.#............#....###....#...##......##..###..#....#.#..#.....#...#....##..#....#.#....#..........#...##.....##.....##...#........#.#..##..#........#....#.#..........#...#..........#..#.#.###.........##...................#.#....#....#....#....#.#..#.......###.##.##....#...#.................#.......#..#####.......#.#..##.##...##.#....#...............#..#.......#..........#...........#.#...##.#.##.#..#.#....#...............#....#....##.#....#....#.#.......#..##.....###...#....#.#.#.......#..#.#.#...........#...#...........##.#.##....#.#........#.#....#.#.#......##................##......#.#.....###...........#.#...#.##.....#.##.##.##.#..##.#.........#....#.......#.#.#....#..........#.#....#......###.........#.#.#..........#..#....##.....#...............#.##....#.#...#.....#......#.#.............#.##........#...........#.#.....##..##.............##..........#.......#......#.....##..##......#.....#..#....##.##.##...#.................##..#....#.#........#..#....#..##.#....##..##......#....###.#.#..#.....#....#..#..#...##...#...#.
const fs = require("fs");const readline = require("readline");(async function () {const rl = readline.createInterface({input: fs.createReadStream("input.txt"),});const map = [];const slopes = [1, 3, 5, 7, 1];const result = [0, 0, 0, 0, 0];const pos = [0, 0, 0, 0, 0];let even = true;for await (let line of rl) {line = line.trim();if (line.length > 0) {result.forEach((v, idx) => {if (idx === 4 && !even) return;if (line[pos[idx] % line.length] === "#") {result[idx]++;}});pos.forEach((v, idx) => {if (idx === 4 && !even) return;pos[idx] += slopes[idx];});even = !even;}}console.log(result,result.reduce((acc, v) => acc * v, 1));})();
const fs = require("fs");const readline = require("readline");(async function () {const rl = readline.createInterface({input: fs.createReadStream("input.txt"),});const map = [];let result = 0;let pos = 0;for await (let line of rl) {line = line.trim();if (line.length > 0) {if (line.charAt(pos % line.length) === "#") {result++;}pos += 3;}}console.log(result);})();
6-10 s: snkscgszxsssscss6-7 b: bbbbbxkb2-4 n: nnnjn1-2 j: jjjj5-9 z: jgzzzqhbj4-11 m: mfmmmpmjmkdr12-15 t: twqrxttwttthtkxbz8-9 z: ftzjzzzzr17-18 h: cpkhssvpphzvprfnft7-8 b: bjbbbbbb4-5 p: pppppppppgppps16-18 r: rrrrrrrrrrrrrrrrrr9-16 v: vvvrpvbvvvvvvvvvwvvh11-15 d: ddddddddddddddjd9-14 g: ggbggghggggggggw1-5 d: ddddbd1-4 x: xxxwxxx1-2 l: bdjjddlqg1-4 b: lbbxb15-16 f: ffffffffffffffmz10-16 m: mmlmmmvmmmbhmmmq4-15 v: vlfvvqphhjfvlgt5-12 m: mmmmjmwmmmmcmmm7-8 q: qqqqqqxkq4-9 h: hhzhhhhhhhhhsh3-7 t: thltdtjtstzrtwtt6-7 k: kkkkkkk1-5 q: jqwqd4-13 x: xxxxxxxxxxxxxxxxxx1-4 l: llfl6-12 n: nnffnfnnmnffnx4-6 m: xmvxnmpmm5-7 m: mmmmbmmmmmmmmm9-17 f: ffffflffbfffffcffff4-10 k: kkklkkkkkhktkkbkzq8-15 z: kdxxzzlhpzgbzjzz2-5 q: qrqqbqqqqqqqkqq3-5 t: zrttht9-12 t: ttxgntjmvntctpfrt2-3 k: kkkk8-10 j: jjjjjjjjjj2-9 k: vkwkhcqnk9-10 t: ttttttthtt4-6 b: bbbbbbbb9-12 n: xnvnnvldhthlsn2-4 w: wwwwwwj6-10 t: tttttwttttvtt3-10 j: jqjjjxjdjnjjjj15-18 q: kqlncdqwclqpjzrbnq7-8 p: gpwbjppp3-13 m: mmmmlsmfvmhmmmm7-10 s: wdshsrsgsl8-16 f: fffffffxfffffffcf16-18 s: ssskswhsvslwsssrsq12-14 j: gjjjjkjgjkjhjvj13-14 t: gtttvftwtgvhlt6-7 v: vvvvvgbv2-8 l: ssldslmvl3-9 l: bflzllqkqlkll8-9 n: rrnnnnnnsn7-14 p: bqsrxgplkpdvbpkn2-5 z: wzbclnsxt2-4 k: knkxk6-8 d: drddjddjdd15-16 p: ztgptpfpcwppqrzppps1-3 k: nmsqksv7-10 n: pwhbcwnlznfnvrlnds13-15 t: tttttttttttttttttt10-12 b: bbbbbbdbbgfxbbbf3-5 w: rwwwj18-19 x: xxxxmxxxxwpxxxfxgln1-4 g: lfsjtgggg13-15 x: mxzgtxhrxjhxtnf13-14 d: ddddddddddddlx3-5 r: rrrtrrtmlr1-7 t: thttttttttt2-5 g: sngggj8-9 n: tnnnnnnnn6-10 w: wkwwjfwltk12-18 n: nnnnnnnnnnnnnnsnnh14-18 m: mmmmmmmmmmmmmmmmmmmm5-15 v: fvvfrcqkvkggnpl13-19 f: ffffffftfffdnffffpsf13-15 k: kgkkkmkkkgftklb4-6 h: hhhchvh7-14 l: qmbdhdjbrglxql13-17 w: kwwwwwwwwwwwdpwww1-5 q: pqqqdqqqq8-9 p: vhwphvpfp2-4 h: hljmh1-2 c: tmcc3-5 f: dpnvwffhlp3-5 m: mmmmmm10-12 c: ngjnczmcscxc2-4 x: mxxj4-6 m: xbmkmm1-6 l: kllllsblqhngl11-18 x: xprkjcrxkgxxgwtbmx4-6 k: vwxshkkkkbtfbhl11-15 z: dzzkzjjzzzzzzzlmzbn5-6 f: ffffnfffflfjff3-6 d: ddddddbd6-9 r: wrrrvrrrr8-9 n: nnnnjnnnt2-7 b: bxptdkctbrxfllpvj3-4 x: hxxv5-14 n: nrnnnlsnznnzrqnjxnp1-3 w: wwww9-12 x: xxmxxxxxxxxxtxx10-14 j: jjnjjjjlvjkcsjjdllvj4-6 w: wgwbwwww10-12 t: ttqttttttttl10-11 t: ttwtttttttv9-15 t: ttttttttftttttttt2-3 p: pfgp2-4 z: brrksnvqjzwqjvjs8-9 n: knnnftzjbqj6-7 w: swjwwdwwwwwwwww1-2 j: xjlrkjjztrjfpss13-14 l: llllllllllllvlllllr7-12 l: lllllllllllblllll7-8 j: gqdcmjqh3-9 g: gchkbvgvgw15-17 b: bbbbcbbbgbbbbbmbg1-7 h: qlmhhcdhhhhhhhhhh2-15 c: ccccccccccccccscccc1-2 q: xvch3-9 w: wwwwwwxwww2-4 x: jskx3-7 t: btwsnvts9-11 g: gkhgwctggbm2-7 g: xvgwwltdvnzscbtqwb1-11 k: kkqkpkkdkkkkkkkhkk4-12 h: nbqlhjbqhxtnxlzlr3-4 d: dwdd8-9 k: kkkzbckklqqkhfkqkk7-8 c: pcxmqdwc2-4 v: qbvwvvnvvp3-9 c: pfqcblwxcrmx1-9 t: fwgtcrftktt7-8 p: pppppppp6-13 w: dnwfhwkjffpdwgzdf10-14 k: kkkkkkhkkwkkkkkk2-4 s: zscssddtpmqblmd11-13 b: dbvzwthlcmbkb1-4 k: kqlxwvbkckwzmqxvtcc2-10 s: sxssssgsssxsssnss3-9 w: nxrmwlpgw10-13 w: wwsgwwwwwwwkw9-13 v: vhvvwjvcvbvvg5-7 n: fbvnjpt3-4 x: xxxx9-10 l: rlllmlllll7-9 d: ddddddddhd4-8 z: zzzhzzzf11-12 m: mmmmmmmmmmkf4-8 m: bmfzppcqttct2-4 m: mfmcmmmcx2-9 p: rppzgvshn7-8 r: rrrrrrrrrrvr6-7 p: hkltppp7-10 m: mmmmmfmmtmmmpbmm6-14 p: pppppppppppppxp4-6 p: wbspppnlmc2-4 n: xnfnl2-5 q: nqkcqmvwp2-3 d: ddkbkdjd5-9 b: qxjbblbrb14-16 b: bbbbbbbbbbbbbqbbb5-6 p: dppppp5-8 j: kxztnjjn14-18 k: krkkkkckkkkmktkkkkd7-8 n: nnngxnfpnn16-17 c: ccmccccccccccccfcccc1-3 g: wggg1-2 c: cqcckc2-8 g: gjwdkbds10-17 s: hswqssmttskspdlkkss14-16 b: bbbbbbbbbbbbpbbrbbbb12-16 r: srrmcbrrcrzrdwzng2-3 h: fcws9-13 p: gkgpqpghpjbpz9-10 m: mmmmmmmmmmm3-4 b: brbb2-3 p: gncvqdhp2-7 g: gdggggggggggggg2-7 j: jjjjjjrjqjjj3-5 v: ltptjlntf1-7 w: gwwwwwfww7-10 z: zzzzzzmzzzz10-12 x: xxhxxxxxxgxsxxxx11-12 b: bbbbbbbbbbbbd16-17 v: vvvvvvvvvvvvvvjht1-4 x: bxxx16-19 g: gggggggwggggggjgggg5-10 q: qjpqqvlnkqxmlv4-6 p: qrpffplvpp7-9 r: rrrrrrgrb2-3 g: bgjg10-12 t: ttjttttnttdtt2-4 g: dgng11-12 r: rrmrrrlrtrrj1-5 v: qvvvvvvvvvvvvvv3-18 p: ftnfnpmjprmrzmhbnxj10-12 w: dqnsjjxsqrwq2-4 z: lzgkzsb8-9 n: dwclxdtnndtpcgqmx10-11 w: zjwdsphbbwlhp2-9 d: zzprkgzczbs14-19 c: gpjfrvsrcnbxbclctxc1-9 f: fmhfvfffrfws12-14 d: ddrddbddddddddhmdg14-15 s: sslsssmsnssdxsj2-10 v: ljppzjfvfnfp1-2 z: qbwbzknrzzs18-19 l: llllllllfllllllllll2-3 p: ppgp13-15 k: knkkkkkckkkkhkxk3-6 v: vbjvmv4-8 h: hmhcxfhg12-14 v: vvngcvvvvkvgvs2-3 j: xdjjrk5-13 s: sssssrqsssssq1-7 s: sssssssss6-14 b: ptlvmbbrbxnvqbrmp16-18 w: wwwswwnwwmwwwwwwwf1-4 k: kkknkkkkk1-4 g: ggrbk9-11 r: rrrhrrrrrrrrr11-13 x: xxxxxxxxxxxxnx3-8 x: nsxvlvdfbkpxsgscn12-15 h: hghhchvjhhhhlvhhhhh11-12 n: nnnnnnnnnnjqn10-13 r: jrzfzrzrqblmks7-8 w: wwwwwwwh3-4 k: kkbft1-9 c: cccccjccccccn2-7 r: rrvnrxrvrzsrbrs3-10 l: llgdldmlplqlhdlll4-8 m: mmzmbmgm5-6 q: sfxqnftnbnqwq5-6 v: vvvvgvvqv9-14 h: dhmwrhzqqvhhhfhfhhht4-7 p: jwwppvpklc9-13 z: zzzzzzzzzpzzzx13-14 l: fllklltlllllcphllll12-15 m: htmbmqgljcmvmclgnm9-10 b: bbbbbbbnbb6-12 x: nxjbxxhxxxxgdxx6-7 t: tttbwlk8-11 q: fqqjtlswqgkqdqc16-20 t: xplwqxbwtsfptbvtvcxt3-4 k: kklkkkkkkxkkkk3-9 m: kmmsvmpmxmgmb6-12 j: jjtjjjjjjjjpjjwj3-4 m: kkmbmzkx7-8 f: gmfxlgfjtfst1-3 w: wwwn1-7 k: knkktkkn13-16 v: vvvvvvvvvvvvvvvmvv10-11 h: rhvdhnfhvtchlfhh10-12 x: xgxwbqxkxxcwsfd10-14 m: mmmrdxpcmcmmmkmmmmm2-5 x: vvxpx8-9 h: hhhhhhhmfh16-19 j: jmwjjjjjjjjjjjjjjjz2-3 r: sqrnr14-19 p: ppppppppppppppppppk2-5 w: wwwww15-16 q: dppxtnhmxrhmncrqq4-5 v: drhpp1-4 p: pkhn3-6 q: gwmrfwh6-10 v: dlvvfhvvkb1-8 q: qqqqqqqqqdqqqqqqqq17-18 n: nnnnnnnnnxnnznnpnng3-7 m: gmxzffwmbdm12-14 m: dmzmcmmhjmqltm3-16 w: drcbwtvqgbppbwzvm8-10 d: ddbddddzdddddkpd8-9 m: mmmmmmmmmmmm1-3 l: glll7-11 x: fxrxxdxxxqxnxx6-7 d: ddddxgdd7-8 g: hgggbggg2-3 w: pwwtww7-10 h: lhwbhjhzhx3-14 b: bbbrvrbsfbnxrgqbbq4-7 l: jzqkxlnpxlglfsll6-7 b: hbpbbbb2-4 w: pskwwxzpjvmwcnfr13-15 m: mmmmmmmmxmpmxmmm4-9 k: krxkzqzkkhrpqth4-7 f: xfffkvfqzwhcfwkhq4-10 q: qqqqqcqbqqq14-15 s: lgszsdststlpgjbs7-12 s: sspbsssskfns7-8 d: cdddqpnd13-15 p: ppppppppppppxppp10-11 r: rrrfxrrrrrrrrr10-12 z: zzzzzzzzzvzvzz3-4 l: lllwll7-9 p: ppppkpppqpppppsvx3-4 k: kkkrk4-5 v: zxmmvmhvr14-15 r: rrrrrrrrrrrrrfjr6-10 b: vwbgbbbbdbqsbb5-7 j: jsjjjkv3-4 m: tzmhr11-13 r: rrrrrrrrrrqrhrr1-4 s: psqmcssnk5-6 z: zdkzzzz3-5 p: cnpmbtknqdppmcjpzvcn13-14 g: ggggkggggmtggd14-17 c: nxmzcczccnvdcxpcmb6-10 w: wlwwbdwwwwwwww9-17 l: llllllllllllllllll2-12 j: jpjdjjjzmjxj1-3 n: szjntnnl7-8 l: dpxlmhlbts5-16 s: sssssssssssssssrs1-6 m: pmqvlc7-15 f: ffffffffqfkfffdxff10-11 w: wwwwwwwwwwswwww7-12 p: tkppvfpwksrp4-7 f: fdjdgdvsksbfbnjkspc4-11 b: bjmvfrmlmlbndl1-3 r: rrrnxhgbwr5-10 h: xhhmhhhlhbh10-11 h: hghhhhhhdlhhh5-6 g: gptglg9-11 t: wtgtxtttqtmttt5-11 f: jxqffhfsfmz4-7 f: frjffbf1-15 m: mmmmmmmmxmmmmmmmm1-12 d: drwlbpdbzdgdjpnzmj9-14 n: nfnmktjnncnnnln1-2 h: pshhjhhhhf2-4 t: tgttttttfb2-4 w: dwpwhnxbf7-11 b: vbcbzhbwhpb4-5 k: hknck5-12 m: mmmmtdmmmmmmmm5-7 w: qwflwxq2-5 g: jdnxdlclplvb5-7 t: ttrtttttkr8-18 l: lwscjwlmdlzlllnsllpw2-8 c: cccxtccchbrkr1-3 q: qqtqqqqq3-13 d: dddddddbddddddd1-7 r: jkpzrpfnrgpkc9-10 t: ttttttttttt11-12 w: wjwplwwwwwmw9-12 r: rpsvrhrbnrwqch6-11 p: zpzbpkpmtnptsnpbswc4-6 t: jhzstt3-4 t: ddpkcgpzhd4-6 s: cvzshjfrsslxnslqddwt1-3 c: cgsczhl1-4 d: lddqdqd6-7 v: vvvvvvb5-8 w: wwwwwwwwww5-11 p: ddswpbpppsqpp5-6 x: dfzxxxhhqjvj3-7 m: mmmmmmmmmm4-8 g: ggggggggg5-6 j: jjcjjn5-6 n: nndtns4-5 t: ltxkdpst2-8 b: ldwkbzbxgpbbbb11-12 w: wwqwdqwwwqhvwww15-17 k: klkcxqbwrktxcmqlnb5-6 k: tkqhkkkkrkjfd12-13 x: nxxxrjxxxdjlxxbt9-12 m: mmzmmmrmmfmgmmmmb2-5 v: tkbhvlvp12-14 v: dvbvvvvhrcvvvxxvvvvv14-16 x: xxxxxxxxxxxxxrxxxx6-7 v: xvswnvvm6-9 c: vcpcksxwbdlc5-11 s: sssssjssssrsdjsssq6-16 j: jjjjjmjjjjjjjjjnj8-12 g: ggggwggggggnggg4-5 c: ccczk14-15 l: lllllllllllllkm10-11 r: rrrrrrrrrrrrr3-5 n: dwnvnlj2-4 x: xdxxxx5-6 j: jjjjjjj3-9 k: kkkkkhlrkktt3-7 t: stqtgfdprtqjsgznrtjh11-16 n: hsnnnnnnnnfnvnpqnnn13-16 v: kdvbvxvvtvhvvvvq1-3 v: vwpvkvdpxgc14-17 v: vvvvvvvvvvvvvnvvhv14-15 m: mmmmmmmmmmmmmtm6-10 m: mmmmmhmmmm5-8 t: tttjrttdsttfttwstf6-7 c: ccqcvcc2-5 v: vvvvvv8-16 c: cccccccccwcpcccmcccc4-5 t: ztvttktttttt10-11 n: rnmnnnnnnnnnnnnpt5-6 g: lgsggggg15-18 s: lcsmgkjqzdpcgvsrng2-6 p: wwpppp9-10 v: vvvvsvvvmvv6-11 c: qrmdjxzsmxcmcccgrr17-18 b: bbbbbbbbbbbbbbbbbbbb6-10 t: thtxgtpxwt2-8 f: xkgbrpqfsrhhbnfpdg3-8 c: gqkkvgkcqfwdc5-6 c: jjcsjf8-16 q: fbwdmlwljqqcrqsq3-10 m: mjmmsmmmmmmcmm5-15 x: xmrvcsjwxxdpsrxzcrzj3-7 x: rxngzxxg17-19 z: mmvfgzpmbvzsrmkgmmmb3-4 z: zdzz4-5 v: vzcvb3-11 z: tzllpgzzmwxznh8-11 x: ptgvnbxzsxwdb2-3 r: rrrrr6-10 b: bbmbbbbbbb6-11 q: wvmqrzrllhxfzmpkp13-17 v: vvrgvvsvvcqkvvvvbvvw16-18 p: ppppppppnppgppppclp13-15 g: gglggggggngggggggggg15-17 b: bbbbbbbbbbbbbbbbb3-6 t: tpwzktlzkdt2-3 m: lmvtnfjzmm1-7 j: jzjjfjx15-17 r: rtfdnhrrhrrdcswrl1-3 d: gdfdmddddwdddlsd3-4 r: qrtr10-11 m: mmmmmmmmmkc2-5 n: gntnnnncc9-14 b: bbbbbbbbbbbbbb10-13 f: fxfffznffffzwffflz5-12 j: vjjrjjjjngjjjjm6-8 k: kkkrkklkkkkkkk5-7 r: rrhzsxrjjw17-18 g: gggggggggggggggggf2-3 h: ghhvrh1-3 j: hjjxjjjj3-5 q: gbqnqkprckxqglkhw17-18 n: ngnnnnnqnnnnnnnnnnnn2-3 m: xlhmmq6-7 p: kvvphgj9-12 k: kpkzkkzkkkkkbwk9-10 k: kkrkkkkkmt5-10 t: tttttttttttttttt10-11 l: ztdvlllzfltlwlglkhcj7-12 t: bttttqtqttttttttg3-4 z: xzvb5-10 h: lhcdhkhhhhb1-6 z: jqzzqzzzzzzzzzzzzz6-7 x: qxxxxtxz13-14 g: gggngggggggrgsgg1-2 t: tttt11-15 w: hpwhwmwlkbwtwmwlj8-10 r: rnrhrrmprnrrr5-12 z: rshzhwgzhfjb15-16 s: sssqssssssssmsss9-12 z: zdzzzzzzkzmz10-12 c: mfgpskncfcfctjmt5-10 p: sppwnpdpptppwdppppp3-14 q: mnzfgfmvmsdlqg1-13 s: sssssssfssssbsss6-8 d: ddddddddd2-5 j: vsbbjh14-16 m: nmklmsrpjxwpdbmj3-8 v: rfvvvjqv18-20 p: pppppppppqhpflppbppp7-11 x: xxxxxxwxxxx3-4 l: llmvlll8-9 w: grmvwtwbz2-11 m: mmmmmmqmmmsmmmmmmmmm6-13 h: hhhhhrshshhhlhhhh3-12 t: tnttblttttcvrtttx5-18 f: cfffcffvgffffrmlfx1-3 n: rnjnnnnnnnnnnnnnnn1-2 w: smmdq1-5 v: vvvvvv5-15 s: tssssscssffhsswssss3-11 b: bbbbbbbbsbkbbbr13-15 j: xjjpjjcjjjjjjcj5-10 g: bvjvgpzgdgkmmzwnwrxz2-7 q: qqqqqrq10-12 d: fddddbdddxdqpd5-7 c: hsccjccrlm11-15 r: nrrrlrrvrdlrprw13-14 r: drrtbrrrrrrrrcrrr8-10 c: ccccxcchfjcccccxpc8-9 s: sssssssss1-10 r: rvlgkrrrrm8-13 w: jwbwcwmwwvwwwwww7-12 k: fxkkcnkkbvkxbkphx7-8 l: llllmlvll11-15 q: qdjpqwgfqjdqnnq8-9 m: mmmmmmmvmmm6-7 k: kkkksmkb4-6 h: hhhlhhhhfhhhhhh2-5 k: xzjlwb3-12 j: sjwqrjzjgqrj5-18 p: ppppppppppppppppphpp1-3 g: gggrggggg14-15 n: nnnnnnnnnnxnnhnnn19-20 d: jkpzsxwsddzccjdkcptj2-4 v: wpdz1-8 w: dwjtngwwwrwhp13-15 t: tttttctttttxvfrt6-11 h: ksvshqhhdth8-9 k: khfkdkppl11-12 d: whlmcdmfgfddd11-12 p: htvxpkfngthz6-9 v: vqvmvvbbv5-8 m: lghmmmrmmw14-16 q: dtmqqrqqqqqgpgqtqr2-11 f: bfjskxzlgvfml10-19 p: kpppppppphppppppppp5-7 j: rfbpzmjtjj9-10 p: kpppppppqpp3-15 k: hgkgrqblnjmsbvrghzdk6-7 r: rrtwrwlfrswwr3-4 k: fkkdv12-20 g: ggggggggkggggggggkgh3-5 x: xxxxpxxxxxxxxxb8-10 k: kkkkkkkzkh4-10 q: qqqmqqqqqcqq4-12 t: ttgtqblzqzpttcxdtfn18-20 s: sssbbsscsjvslsvsssss3-6 x: xxxxxxx4-5 t: tttttt5-7 q: xqqqqqqqxkqqqqqqqtqq2-4 s: zsvq6-7 b: mmbcklx1-13 z: zzfzkshpslwcn1-14 d: ddpddtdddddmmf8-13 j: jjjjjjjjjjjjjjjjjz5-6 c: cjjlxb10-12 v: vvvvvvtvvmvv2-3 b: wfbbg1-10 l: llllllllllllllllll5-10 d: hdbhdgxcjd10-13 t: ttttttttttttnt5-6 h: vhmhhh16-17 x: xxxxxxxxxxxxxxxsqx6-14 g: gzggggzhggggzgg15-20 f: ffbfxffffvfffffffhfd2-3 d: xdvw5-7 g: zgggjgq2-12 g: ggggggggmgggggg6-8 h: hhhhhhphhhlhjhhxfh3-10 j: knjklstqxwcsjf2-3 h: hvnwjxhpsc7-8 w: wwwlwwgw14-16 s: chgtpswssxsqtwzrsqt5-6 d: zdbdkl3-4 p: lwkpbrbp8-14 c: cbhtccjmrccrcp2-3 s: tctflmgdtsjjfxpl3-4 g: gggjkctwdsgl2-4 h: ghbh4-13 h: fczphhvflghhhd3-10 x: jkzhgljwsblcrmbwfx12-13 p: npfgppprzpppc7-12 l: sqbplmqnlmwph1-8 p: hpppvpprppp12-18 n: nhbznznxncnkcchscl9-10 g: grjxmgzpgk6-7 g: rcmkggggggg1-7 b: bbbbbbbb2-3 t: ttftzqt8-10 l: twbjlnblhck1-2 c: cvbc4-9 d: mfpdddsnd5-8 f: flpvbdrfl7-12 s: rhspsxlbpsmsclzrdsfc2-4 h: vhhh1-10 k: bhkkkkkkxkkkzk5-15 q: qqqqqqqqqqqqdqdqql12-15 c: ljvcklwjvngfgfgrjsv8-10 w: pwwtpbwwvwwrwww5-13 b: tbjmbfmknjhbb1-2 v: cssd2-5 s: ssssss3-4 h: bhhxxhfh3-5 p: pfppp13-20 l: lcxxllcfjmllclljllfl2-4 p: sqpzk2-4 l: xlllb1-7 t: ttttttrttttrttttttxt10-12 m: bwmmghzmqmmpmj5-8 l: jtlljpql5-6 d: lddddd6-8 c: nljczccdwvnmrlqvlsc8-9 d: dzdddcddt10-11 z: zzzzzzzzmqj3-4 s: msssss3-5 z: xzvdzbzt2-18 v: bvcbpwkbdmclbnbmsv9-12 b: jrcccsndstzbxprkvtq3-11 n: vlntglzvvcnngn3-8 v: rpgckwptlvdqsrqqt6-11 q: qdqdkqvkvhdrdqm9-12 b: khbmbgbbvbqb9-10 g: gtggggggczgg3-5 c: zqctcs15-18 z: kbzsdhbbzxfzzqdjzc7-8 g: ggggggzx9-10 s: sswssrssqms14-17 g: ggggcggggggggpggcgg10-15 g: qgzmbkjlggrhgkg9-11 j: jjjjjjjjqqjjjjjj5-6 c: cgcdcchcccbcc2-4 g: gggg5-13 h: plkhhrmxhxhmh11-16 v: vkkqrvbvbcvvnvvvvv6-7 c: rlfmqphqrhqkhch3-5 z: hzspz8-9 d: kddmdddpdvddln5-11 k: wkqkcfkpvnkvh4-7 r: fnzzwxrxr15-16 r: rrrrrrrrrrrrrrwr2-19 f: fvffffffffffffffffwf9-11 v: hbvbvvgcvvvj2-4 m: mrxpv13-14 z: zztzgzzpzzzzzg4-10 t: qtvtcrfmlkrgtwsvwtw3-7 g: ggggggfgggggggg5-8 c: ccccfcccnmccc6-12 z: bzfcjzdznzwzrzbzzqrn14-15 c: ccccccccccccczkccccc3-4 j: jjjjjjf1-2 x: kxxxx3-4 s: sksj17-19 c: hvchccvccdxgccnxdcc3-6 r: trrrrrrr10-11 c: ckcjzcrzcbc1-7 p: pmqplfpvgq3-4 h: hhmx5-6 n: nnwndln5-10 v: bkkvfgvqwdt7-14 h: hkjlwvhdnhxhwcnhs4-12 f: xxwfjfcwslrfzrxfkxj2-3 c: ccccc4-13 k: kkkdkkkkkkkkkkk8-10 b: mqlljkpbbbxbrbfx1-4 p: pppp14-17 n: nnnnnnnnnnnnnnnngnn5-6 d: dddddddvw9-10 r: rjtrrrmqrrrzrrrrjrrm7-11 x: bxxxxxrwxpmn13-14 w: gwmwwwlwwjwjwx2-4 d: dddddvddd7-9 p: pjmdppgpspcslh13-16 l: tllllzllpvllvlzd9-11 q: qzmwqqzqtqqq4-5 d: dvdngdd9-11 j: xxxvjrmgjpk3-4 c: rvvcn15-16 r: rxvmlslkpmqdqtdd2-5 b: sbflb4-5 w: wntpw8-16 n: nnnnnnnhnqnnnnnnn5-6 n: nnnnnnn2-5 q: bsjfhq6-18 r: prrrqkmrrrvbrrrrdfrv3-5 g: xnxlp4-11 s: jsstsssjssfssss14-16 d: dddddddddsdddddd18-19 n: vgngvbhdjfrbnznhhjzn11-13 f: ffffffffffgfgf5-11 n: dbgvngchnkngt3-4 f: gsff2-4 r: rfdrlznkzg10-18 z: zzgzwzzzzzzdzzmzhzzn4-5 s: qscmbssss11-15 x: xbxxxxgxxxbxxzw2-10 h: dkrnxknmthcv12-13 b: bbbbvbsbbbbgcbnb4-5 m: mmlmmsmmh3-6 j: njrjjkcr10-12 x: xxxxwdnxxxxx14-16 g: hggggggggngggggg8-9 x: gjqfxxxtxxxb16-17 f: ffffffffjffkffffmffb2-8 z: tsktkzfxntrv2-6 v: hvvswd1-2 w: xddl2-6 k: svwvvkqmzwjkx9-12 p: ppppppppbppspppb12-19 m: mdjmlhsmxmwcmmmmmmm3-5 x: rxjxb17-18 r: rrrrrrrrrrrrrrrrwk2-9 b: cbfbqcfwbmwd1-11 h: hhhhhbhhhhmvhhhh2-3 j: jkjjgjhxj5-6 f: fffffffffhf17-18 j: jprvtszvgsbtxlrhljsz1-4 m: mmhmmmp2-6 p: xvfkpkc1-2 f: xqtfcf1-5 r: brrrrrr7-10 w: wwhwwwdwwj1-4 w: vwwdh1-3 f: hnpvgfwth10-12 k: kkkkkkkkkdkq5-13 r: rrpqrrvrqrswzr9-17 x: xjxxvxvbtxxxtpxpx12-13 j: njrjkcjgbjjnj2-4 l: lvll12-17 p: dpppprpbppnvpppprp4-18 b: zftbmbxgzfzdvdnvhb12-16 r: lcqgqjthprlxrzrrx2-7 m: msclccmxhsmf3-4 b: bfkb2-6 k: skfgrk4-5 q: qqqhhx6-8 c: cccmvcch16-17 l: bxnlvbvwzvfvbcmxl7-12 c: cccccccccccc6-7 b: bbbbjsjbbbs2-7 q: phxnfxqrqv4-5 h: hhhhhh9-15 n: nqnnglsjnnghxrn3-4 h: hkkh5-11 r: rlsjvrrrrrl5-7 b: bbbbzbwbbbb2-3 f: qczff8-14 c: fccqccccccclccccck1-8 r: rrbfmjsr4-5 p: dpphz11-13 d: wdmwkcqddrdvdz8-15 h: hhhhhhhhhhhhhhhhh6-10 l: dhgdclhlkltnc14-15 t: tttntttnthtttzw4-6 p: pppppdp13-14 l: dvlnvlgtbpnhll11-12 s: brsqgfsnpmwskhdnm6-7 j: httjvjj2-14 w: wwwfwjzwrzfwnwjwwm8-9 w: wwrwwwwgt2-5 r: dvrwb7-9 b: wwvqbsbjb1-12 l: lljxlbslwlgn11-12 m: mmmmmmhmmmwbmkmmt10-11 l: lblllmllldl3-9 w: wwpwwwwbfwwwm9-10 q: pcrqfqlskz7-9 l: llvlllblklllx6-7 g: qgggjmwg5-10 v: vvvvvxbrvvp9-10 d: hqddgkkdrpdd17-18 q: qqqqqqqlqqqqqqqqdt6-10 h: hspnhhzldxphdh8-13 l: vvvscdnlblllml6-12 p: ppkrprpxwpppwx4-5 k: tkslb7-8 d: hdjdhnzdd9-10 x: wkxtblgxxjxxlqnfxxlx8-9 g: rggggggdk10-20 d: kcgdtbbswwdtvgdgxfwd3-4 g: gggggg16-17 l: llnzlqllllzllllmllll4-10 r: nsrrrbzrfzcrrzrrdqk4-6 k: kkkkkpkk4-8 n: nnnmntnnrnnn12-14 l: lllllllllwlqllll3-6 r: rrrrrrr1-6 s: ssskcshsxtd7-15 d: ndrbdnntdmkddxd9-10 j: pjjjjgjsjhjj7-10 k: pkbkkkkkgkq4-8 m: mmxmmmdmmmmm9-13 c: ngjcrcccvbcvqdjmph3-5 q: qqqqqq7-10 s: fcssnsssssslxspr3-5 k: kkkkvv5-10 f: tlbcvgwfzlf5-9 x: xxxxqxxxx2-10 q: qrprhbrhjhb3-4 g: gggmgg8-10 j: jjjjjjjgjpjjj2-4 v: dvzvvtfm7-12 q: zvzqprjhqdcqfzr12-13 f: ffffffffffffqf2-3 f: fffsdwq10-11 z: ztzzjzjzzzlzzz5-7 k: kkkkqtkkkkk6-9 z: dfbzhgsrzsp2-4 b: wpqb9-15 c: cwchcdhxlqzccxbb8-11 q: qqxptqqvqrgqg5-7 t: ttttztcvtjtkts2-6 n: nnbmdnjxclwkffrnxff3-7 p: pppppph9-12 d: xhmfndzcddfddvgddf1-5 h: hthmhvlthhhhh6-7 m: mmmmmmm6-7 j: jjjvjjjrj1-5 q: mqnqwqqqqqjq10-11 b: bmbbbdbpbbbbzbb1-4 k: gvccvdltkwcdd12-16 s: sssssssssssjssshs4-10 k: wzvlkmdhcklhdp10-13 z: zzzzzzzzzfzzj6-12 g: bmzmvvggpgtm3-11 m: nvcpfgvnsqmwxmmz1-5 n: dnwnnnnnnnbndnnn4-5 h: lhhhh4-5 g: gggdg2-5 h: xthqhfj2-4 f: lfkf4-6 k: rqbhrtzktmvmrxck4-5 q: jqdsc10-11 h: hhhhhhhhhvjh2-17 r: rrrrrrrprwrrrfjrr16-17 b: bbbbbbbbbbbbbbbbhbbb3-5 z: pkvzzfrljrjctw13-14 w: wwwwwwwjwwwwww8-10 d: dddddddldzpq1-4 b: sbbgb2-10 d: vnhpzmvpcddhs8-15 t: zftpwtrtqjqtfntp11-12 j: djjjjjjjcjjcj4-7 r: jrrtrrrvmzzrrvsl2-4 r: rpkp3-4 b: qbxc10-11 w: wwwwwwfzkdmnwwv6-14 z: mztxzzztmzwzzqvm12-14 w: wwwwwwmsgwdwsqwjwww6-10 f: zfhqjfhnjfdvwsfftf2-11 q: mwbbqdncdfq8-11 v: zvtvvwvfvvq6-8 n: xnwhzmdskwhn8-15 q: qqqqkqqqqqqqqqst1-4 n: nnnnn5-18 c: sqczchcwcccclccccccc3-4 j: klgr11-12 m: mmmmmmmmmmmm2-3 d: qdxfmqwbmdnvj1-5 m: cmmmm6-7 l: llllllll1-9 m: zmmmmmmmlmmmmmmm9-11 m: dwspwrmjsxpc5-6 p: qpppfz10-19 t: fvtphwzsptqzntbkxqt7-9 m: mpcmpmmmvptmm3-9 h: hhhpqqwhhtm11-16 p: pppppppppppppppvp1-9 k: ktkklkkkkkkk10-17 q: rthtqvgspqkvfkgkqfhj11-14 g: ggxgggggxggzggcnggg3-4 t: tttt9-10 t: sqtbdttthtttm1-4 t: ttkbgdzztbxd3-8 f: gxfcrrsfntftvffnfqff9-11 q: qqqqqqqjlqqq12-13 v: vvvvvvvvvvvvk7-11 b: nbxbbbsmbtkb7-8 k: kkkkkknn4-6 j: jjjjlv13-16 m: mmcmmmmmmmmmmmmvs7-9 k: kdkkkkrkgkk1-4 c: crcdlrdbzc1-16 k: kkkkkkkkkkgmkkktkkk2-12 l: llllrlllllllll4-9 g: gggbkgpgz6-7 q: qqqqqqjq6-7 v: hvvvvpm10-14 t: ttfxmqtgtttttbtct5-7 h: hwhhfrnch4-13 w: zdlrqvxwwzsfrfq4-5 h: hhhshhhh2-4 n: vhjfnz5-6 s: sssssss11-13 n: nnwrnnnlnngnn3-4 s: wbss3-4 s: wnss16-17 p: ppfprptkpmzkbjppp2-4 v: pvxv8-9 w: swwwwwwhwwnwwwxj4-6 s: pzhkvss4-5 x: wnxpx4-5 f: fsfwp4-5 z: zzdjz3-6 v: vnvvvvvvvvvvv5-6 f: wfxfff4-7 z: zzzqfzz3-5 q: qqjqsqqqf3-7 w: kwwkmww6-7 h: hhhhhhgh2-5 v: vvbzvvkn8-15 r: svrqpqrgrrhmzbms9-17 n: jnnnncnnnnnxnnnnnp5-6 n: dgnhsc5-7 l: lplltbv4-6 n: mmrnsbcqr7-8 w: wwjwwwwww1-16 c: bccccccfcccccccdcc6-9 l: sjnlmxwllg3-9 q: cqvhkwhtstwrl5-9 h: khvxhhhgfchhknhhhz8-9 c: ccccccccdc2-19 n: jjxbmbwmnqbblfbgzsz3-4 p: pppp1-3 b: jzxbbb3-6 h: hhhgjhhw2-8 f: vfxftzkmlzk11-19 h: mmdptdzhwdbjhvkccrhk4-14 s: sssvsdpsssssspns11-12 f: fffffffflfbk2-13 h: nhbgtbjvbpmrnhf1-3 t: ttttttttttttttttttm3-4 t: tsttr2-9 n: fnkknptqn1-8 j: qjpjjjjjjtpxjqjw2-12 c: clccccccccckccc18-19 f: dpftffzcfhqffddfpff1-4 j: trjj9-11 z: zwzmzzczsdd5-8 g: vrpbggfn2-5 k: qksvzkj2-4 f: wfdfjlfwmjrdmxx4-12 l: bnplnlgqcwql13-14 n: nqlfdnnnnnnnvbnwnlh4-8 l: dgxhsrql10-11 k: qvwcrkxtkjxlq5-6 g: ckgggg6-14 h: xbhhvzvxbhhhhhbhkzhh6-9 w: whwdwrxgc7-9 b: bbrbnjbfb7-8 w: brwwkfvwwwww2-11 g: gmggghngggg12-17 l: bgslljzntbmvtkbgllgg12-18 g: gggggggggggkggggggg1-3 l: gllllllll14-16 k: jkkqkkgkrkvxkkkkskgb2-3 v: vljvgnvm7-8 r: jrjvrprr7-8 f: xxffrnff2-18 j: jhjjjjjjjjjtjjfjjpjr8-9 q: rfllhmnqtrkv2-3 n: lnndv2-15 s: hzzsrprnnjlwdfs1-5 q: vqqqq9-18 b: gxbpbbppbrbbnlkmbb2-13 b: bbbbbbbbbbbbpb6-7 t: mtrftthtttftttztttst1-7 z: nfzzzzvzzczzzzzzzz4-12 m: mmmcmmmmmmmmmm9-11 p: jpswppqbmpfpzpg10-11 c: ccccccpcccc2-6 t: ztscdrkxxctdft3-13 q: mqfqqqqjqqfqdqqq16-20 z: zzjcxdmzgzzzppbtztzz5-15 w: wwwpwhwqcwwwwwgw2-4 p: pczp5-7 d: ddddmdfd2-3 f: fftc1-3 v: vvmv11-15 k: tjkcvkkkkgkzkkxqv4-6 b: vdkvbn7-8 c: wbcjhswc9-10 l: lllbqrllll4-5 s: sjnlw12-14 j: mjtmzfjjtsgvgtq1-3 l: llrllml12-13 d: dngddlqdtgdcd3-5 l: cblhld3-4 r: trrq1-3 c: kcccc9-10 g: bgbgjggpvgpgpggg3-6 d: szwlfm13-14 f: ffffffffffffzfff6-7 d: ddddddddddnnddddr7-16 h: xmbpwmhsznmldhnxflc4-6 q: qqqnqqqg2-7 t: ttwbpmnthmjr8-16 x: xbcxxbwxxrpxnfxd2-3 d: dngdd9-10 n: qkxfdljnnl4-5 f: ftfffff12-15 n: nnnnnncnnnnnnnsnn1-2 d: dkdd2-5 v: vvvvgv1-14 v: jvvvvvvvvvvvvmvvv5-6 r: rrrrrr2-3 b: bnvbbbtbjgxfchnkhcjb1-14 g: wjggxgggggggxgmrvcg1-6 x: bhvxhxxxx1-2 r: rprr6-7 c: cccccccqc4-8 b: bbgplbbcdtbbdbgbbhbz1-4 w: wjgw1-3 h: zhzzt2-11 j: sjjrtjkjhjj6-7 m: mlmrrmm
const fs = require("fs");const readline = require("readline");let result = 0;let reg = /^(\d+)-(\d+)\s+(\w):\s*(\w+)\s*$/;(async function () {const rl = readline.createInterface({ input: fs.createReadStream("input.txt") });for await (let line of rl) {line = line.trim();if (line.length > 0) {const [, p1, p2, char, str] = reg.exec(line);const x1 = str.length >= p1 && str.charAt(p1 - 1) === char;const x2 = str.length >= p2 && str.charAt(p2 - 1) === char;if (x1 ^ x2) {result++;}}}console.log(result);})();
const fs = require("fs");const readline = require("readline");let result = 0;let reg = /^(\d+)-(\d+)\s+(\w):\s*(\w+)\s*$/;(async function () {const rl = readline.createInterface({ input: fs.createReadStream("input.txt") });for await (let line of rl) {line = line.trim();if (line.length > 0) {const [, min, max, char, str] = reg.exec(line);let count = 0;[...str].forEach((c) => (count += c === char));result += count >= min && count <= max;}}console.log(result);})();
1918186918211852198119871989159716341537199116031543194918791800176120101810145817551938150020058181493161819231283195213731605123013211873185318861372191318711597331400188014622007180119821728164014421525195317911906194616412009162719351936190818261291197818841799146415381365167818721964186313881912192814711632133613961948197413311290199210961889187413417571351187616742002150418651469179219201925189818991435405148813191322174918671957194417271293173912851917189718441966192119051830148413641782141514121413833185713701890139312621311200815451896136218621617186460818681689178418061976187019731993198619981414185819901841189517791850200115901902148794318087821546200416561541661168817311466192714381387157617931797197919031638194019111301166914091578188718601619193916251941137417661407
const fs = require("fs");const readline = require("readline");const source = Array.from({ length: 2021 }, () => 0);(async function () {const rl = readline.createInterface({ input: fs.createReadStream("input.txt") });for await (let line of rl) {line = line.trim();if (line.length > 0) {const n = parseInt(line, 10);if (Number.isFinite(n) && n >= 0 && n <= 2020) {source[n]++;}}}for (let i = 0; i < 1010; i++) {if (source[i] === 0) {continue;}for (let j = 0; j < 1010; j++) {if (source[j] === 0) {continue;}if (i === j && source[i] < 2) {continue;}if (source[i] && source[j] && source[2020 - i - j]) {return console.log(i * j * (2020 - i - j));}}}})();
const fs = require("fs");const readline = require("readline");const source = Array.from({ length: 2021 }, () => false);let n1010 = 0;(async function () {const rl = readline.createInterface({ input: fs.createReadStream("input.txt") });for await (let line of rl) {line = line.trim();if (line.length > 0) {const n = parseInt(line, 10);if (Number.isFinite(n) && n >= 0 && n <= 2020) {source[n] = true;if (n === 1010) {n1010++;}}}}if (n1010 > 1) {return console.log(1010 * 1010);}for (let i = 0; i < 1010; i++) {if (source[i] && source[2020 - i]) {return console.log(i * (2020 - i));}}})();
root = true[*]indent_style = spaceindent_size = 2charset = utf-8trim_trailing_whitespace = trueinsert_final_newline = trueend_of_line = lfmax_line_length = 120