예제 #1
0
def test_given(data, result, limit):
    test = Day(4, 1)
    test.load([data], sep="-")

    test.apply(check_password, limit_groups=limit)
    test.answer(sum(test.data))

    assert test.result == result
예제 #2
0
def test_part2():
    part2 = Day(10, 2)
    part2.load(sep="\n")

    part2.data = process_map(part2.data)

    part2.answer(wazer_wifle(part2.data, (23, 20), 200), v=2)

    assert part2.result[0] * 100 + part2.result[1] == 1119
예제 #3
0
def test_part2():
    day = Day(3, 2)
    day.load(typing=str)
    day.apply(list)
    day.answer(
        count_trees(day.data, 1, 1) * count_trees(day.data, 3, 1) *
        count_trees(day.data, 5, 1) * count_trees(day.data, 7, 1) *
        count_trees(day.data, 1, 2))
    assert day.result == 2122848000
예제 #4
0
def test_summary():
    day = Day(1, 1)
    day.load([1, 2, 3])

    day.summary()

    day.answer(7)

    day.summary()
예제 #5
0
def test_part2():
    part2 = Day(6, 2)
    part2.load()
    part2.apply(str.split, sep=")")

    chain = get_chain(part2.data)

    part2.answer(center_search(chain, "SAN", "YOU"))

    assert part2.result == 481
예제 #6
0
def test_part1():
    part1 = Day(10, 1)

    part1.load(sep="\n")

    part1.data = process_map(part1.data)

    part1.answer(count_visible(part1.data)[0], v=1)

    assert part1.result == 334
예제 #7
0
def test_part_1():
    part1 = Day(8, 1)
    part1.load(typing=str, sep=",")

    part1.data = shaper(part1.data, 25, 6)
    part1.bake()

    layer_i = min_layer(part1.data)

    part1.answer(hash(part1.data, layer_i), v=1)
    assert part1.result == 2520
예제 #8
0
def test_part_1():
    amp_a = Day(7, 1)
    amp_b = Day(7, 1)
    amp_c = Day(7, 1)
    amp_d = Day(7, 1)
    amp_e = Day(7, 1)

    amps = [amp_a, amp_b, amp_c, amp_d, amp_e]

    load_all(amps)
    amp_e.answer(max(amp_chain(amps, num) for num in permutations(range(5))), v=True)
    assert amp_e.result[0] == 79723
예제 #9
0
def test_part(result, limit):
    test = Day(4, 1)
    test.load(typing=int, sep="-")
    test.load(list(range(test.data[0], test.data[1] + 1)))

    test.apply(str)

    test.apply(check_password, limit_groups=limit)

    test.answer(test.sum())

    assert test.result == result
예제 #10
0
def test_given_1():
    part1 = Day(8, 1)
    part1.load(["123456789012"])

    part1.data = shaper(part1.data, 3, 2)
    part1.bake()
    assert part1.data.shape == (2, 2, 3)

    layer_i = min_layer(part1.data)
    assert layer_i == 0

    part1.answer(hash(part1.data, layer_i), v=1)
    assert part1.result == 1
예제 #11
0
def test_part1():
    part1 = Day(6, 1)
    part1.load()
    part1.apply(str.split, sep=")")

    chain = get_chain(part1.data)
    end_points = get_endpoints(part1.data)

    orbits, _ = traverse_orbits(chain, end_points)

    part1.answer(orbits)

    assert part1.result == 315757
예제 #12
0
def test_part1_given_0():
    day = Day(7, 1)
    day.load(
        typing=str,
        data='''light red bags contain 1 bright white bag, 2 muted yellow bags.
dark orange bags contain 3 bright white bags, 4 muted yellow bags.
bright white bags contain 1 shiny gold bag.
muted yellow bags contain 2 shiny gold bags, 9 faded blue bags.
shiny gold bags contain 1 dark olive bag, 2 vibrant plum bags.
dark olive bags contain 3 faded blue bags, 4 dotted black bags.
vibrant plum bags contain 5 faded blue bags, 6 dotted black bags.
faded blue bags contain no other bags.
dotted black bags contain no other bags.'''.split('\n'))
    day.answer(howmanycontain(prepare(day.data), 'shiny gold bag', []))
    assert day.result == 4
예제 #13
0
def test_given(data, a1, a2):
    part1 = Day(3, 1)
    part2 = Day(3, 2)

    part1.load(data)
    part2.load(part1.data)

    pathA = path(part1.data[0])
    pathB = path(part1.data[1])
    union = intersect(pathA, pathB)

    part1.answer(min(abs(coord[0]) + abs(coord[1]) for coord in union))
    part2.answer(min(pathA[coord] + pathB[coord] for coord in union))

    assert part1.result == a1
    assert part2.result == a2
예제 #14
0
def test_given_0():
    test = Day(4, 1)
    test.load([1002, 4, 3, 4, 33], sep=",")

    test.execute_opcode()
    print(test.answer(test.data[4]))
    assert test.result == 99
예제 #15
0
def test_part2():
    amp_a = Day(7, 2)
    amp_b = Day(7, 2)
    amp_c = Day(7, 2)
    amp_d = Day(7, 2)
    amp_e = Day(7, 2)

    amps = [amp_a, amp_b, amp_c, amp_d, amp_e]

    for amp in amps:
        amp.concurrent = True

    load_all(amps)
    amp_e.answer(max(feedback(amps, num) for num in permutations(range(5, 10))), v=True)

    assert amp_e.result == 70602018
예제 #16
0
def test_starcounts(data, result):
    part1 = Day(10, 1)

    raw_data = data.split()

    part1.load(raw_data, sep="\n")

    part1.data = process_map(part1.data)

    print(part1.data)

    print(count_visible(part1.data)[0])

    part1.answer(count_visible(part1.data)[0], v=1)

    assert part1.result == result
예제 #17
0
def test_part1_given_0():
    day = Day(3, 1)
    day.load(typing=str,
             data='''..##.......
#...#...#..
.#....#..#.
..#.#...#.#
.#...##..#.
..#.##.....
.#.#.#....#
.#........#
#.##...#...
#...##....#
.#..#...#.#'''.split())
    day.apply(list)
    day.answer(count_trees(day.data, 3, 1))
    assert day.result == 7
예제 #18
0
def test_part_result():
    part1 = Day(3, 1)
    part2 = Day(3, 2)

    part1.load()

    part1.load(data={0: part1.data[0].split(","), 1: part1.data[1].split(",")})

    pathA = path(part1.data[0])
    pathB = path(part1.data[1])
    union = intersect(pathA, pathB)

    part1.answer(min(abs(coord[0]) + abs(coord[1]) for coord in union))
    part2.answer(min(pathA[coord] + pathB[coord] for coord in union))

    assert part1.result == 260
    assert part2.result == 15612
예제 #19
0
def test_part1_given_0():
    day = Day(4,1)
    day.load(typing=str, sep='\n\n', data='''ecl:gry pid:860033327 eyr:2020 hcl:#fffffd
byr:1937 iyr:2017 cid:147 hgt:183cm

iyr:2013 ecl:amb cid:350 eyr:2023 pid:028048884
hcl:#cfa07d byr:1929

hcl:#ae17e1 iyr:2013
eyr:2024
ecl:brn pid:760753108 byr:1931
hgt:179cm

hcl:#cfa07d eyr:2025 pid:166559648
iyr:2011 ecl:brn hgt:59in'''.split('\n\n'))
    day.answer(count_present(day.data))
    assert day.result == 2
예제 #20
0
def test_part2_given_0():
    day = Day(6, 2)
    day.load(typing=str,
             sep='\n\n',
             data='''abc

a
b
c

ab
ac

a
a
a
a

b'''.split('\n\n'))
    day.answer(sum_allyes(day.data))
    assert day.result == 6
예제 #21
0
def test_given():
    part1 = Day(6, 1)
    part1.load(
        """COM)B
B)C
C)D
D)E
E)F
B)G
G)H
D)I
E)J
J)K
K)L""".split()
    )
    part1.apply(str.split, sep=")")

    chain = get_chain(part1.data)
    end_points = get_endpoints(part1.data)
    orbits, _ = traverse_orbits(chain, end_points)
    part1.answer(orbits)

    assert part1.result == 42
예제 #22
0
def test_given2():
    part2 = Day(6, 2)
    part2.load(
        """COM)B
B)C
C)D
D)E
E)F
B)G
G)H
D)I
E)J
J)K
K)L
K)YOU
I)SAN""".split()
    )
    part2.apply(str.split, sep=")")

    chain = get_chain(part2.data)

    part2.answer(center_search(chain, "SAN", "YOU"))

    assert part2.result == 4
예제 #23
0
from util import Day
if __name__ == '__main__':
    # --Part01-- input=1 result=7692125
    part1 = Day(5,1)
    part1.load(typing=int,sep=',')
    part1.opcode(1)

    print(part1.answer(part1.result))

    # --Part02-- input=5 result=14340395
    part2 = Day(5,2)
    part2.load(typing=int,sep=',')
    part2.opcode(5)

    print(part2.answer(part2.result))
예제 #24
0
            x += dx[index[rlud]]
            y += dy[index[rlud]]
            if (x, y) not in out:
                out[(x, y)] = steps
            # out[(x,y)] = 1  Part 1, you served me well
    return out


def intersect(pathA: dict, pathB: dict) -> list:
    return list(set(pathA.keys()) & set(pathB.keys()))


if __name__ == "__main__":
    ## Part One
    part1 = Day(3, 1)
    part2 = Day(3, 2)

    part1.load()

    part1.load(data={0: part1.data[0].split(","), 1: part1.data[1].split(",")})
    part2.data = part1.data

    pathA = path(part1.data[0])
    pathB = path(part1.data[1])
    union = intersect(pathA, pathB)

    print(part1.answer(min(abs(coord[0]) + abs(coord[1]) for coord in union)))

    print(part2.answer(min(pathA[coord] + pathB[coord] for coord in union)))

예제 #25
0
        x += r
        y += d

    return (count)


def extend(data):
    for i in range(len(data)):
        data[i].extend(data[i])
    return (data)


if __name__ == '__main__':
    # --Part 1-- 270
    part1 = Day(3, 1)
    part1.load()
    part1.apply(list)

    print(part1.answer(count_trees(part1.data, 3, 1)))

    # --Part 2-- 2122848000
    part2 = Day(3, 2)
    part2.load()
    part2.apply(list)

    part2.answer(
        count_trees(part2.data, 1, 1) * count_trees(part2.data, 3, 1) *
        count_trees(part2.data, 5, 1) * count_trees(part2.data, 7, 1) *
        count_trees(part2.data, 1, 2))

    print(part2.answer())
예제 #26
0
파일: day09.py 프로젝트: Solalarium/AoC
from util import Day

if __name__ == '__main__':
    # --Part 1-- input=1 result=3335138414
    part1 = Day(9, 1)
    part1.load(typing=int, sep=',')
    part1.opcode(1)

    print(part1.answer())

    # --Part 2-- input=2 result=49122
    part2 = Day(9, 2)
    part2.load(typing=int, sep=',')
    part2.opcode(2)

    print(part2.answer())
예제 #27
0
def test_given(data, index, result):
    part1_obj = Day(2, 1)
    part1_obj.load(data)
    part1_obj.execute_opcode()
    print(part1_obj.answer(part1_obj.data[index]))
    assert part1_obj.result == result
예제 #28
0
def test_part2_given_3():
    part2 = Day(1, 2)
    part2.load(typing=int, data=[100756])
    part2.answer(sum(part2.apply(fuelchain)))
    assert part2.result == 50346
예제 #29
0
def test_part2_given_1():
    part2 = Day(1, 2)
    part2.load(typing=int, data=[1969])
    part2.answer(sum(part2.apply(fuelchain)))
    assert part2.result == 966
예제 #30
0
def test_part1_given_3():
    part1 = Day(1, 1)
    part1.load(typing=int, data=[100756])
    part1.answer(sum(part1.apply(fuel)))
    assert part1.result == 33583