mirror of
https://github.com/Smaug123/AdventOfCode2022
synced 2025-10-08 11:08:39 +00:00
Day 11 (#14)
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
<Compile Include="Day8.fs" />
|
||||
<Compile Include="Day9.fs" />
|
||||
<Compile Include="Day10.fs" />
|
||||
<Compile Include="Day11.fs" />
|
||||
<EmbeddedResource Include="Inputs\Day1.txt" />
|
||||
<EmbeddedResource Include="Inputs\Day2.txt" />
|
||||
<EmbeddedResource Include="Inputs\Day3.txt" />
|
||||
@@ -28,6 +29,7 @@
|
||||
<EmbeddedResource Include="Inputs\Day8.txt" />
|
||||
<EmbeddedResource Include="Inputs\Day9.txt" />
|
||||
<EmbeddedResource Include="Inputs\Day10.txt" />
|
||||
<EmbeddedResource Include="Inputs\Day11.txt" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
67
AdventOfCode2022.Test/Day11.fs
Normal file
67
AdventOfCode2022.Test/Day11.fs
Normal file
@@ -0,0 +1,67 @@
|
||||
namespace AdventOfCode2022.Test
|
||||
|
||||
open NUnit.Framework
|
||||
open FsUnitTyped
|
||||
open AdventOfCode2022
|
||||
|
||||
[<TestFixture>]
|
||||
module TestDay11 =
|
||||
|
||||
let input =
|
||||
"""Monkey 0:
|
||||
Starting items: 79, 98
|
||||
Operation: new = old * 19
|
||||
Test: divisible by 23
|
||||
If true: throw to monkey 2
|
||||
If false: throw to monkey 3
|
||||
|
||||
Monkey 1:
|
||||
Starting items: 54, 65, 75, 74
|
||||
Operation: new = old + 6
|
||||
Test: divisible by 19
|
||||
If true: throw to monkey 2
|
||||
If false: throw to monkey 0
|
||||
|
||||
Monkey 2:
|
||||
Starting items: 79, 60, 97
|
||||
Operation: new = old * old
|
||||
Test: divisible by 13
|
||||
If true: throw to monkey 1
|
||||
If false: throw to monkey 3
|
||||
|
||||
Monkey 3:
|
||||
Starting items: 74
|
||||
Operation: new = old + 3
|
||||
Test: divisible by 17
|
||||
If true: throw to monkey 0
|
||||
If false: throw to monkey 1
|
||||
"""
|
||||
|
||||
[<Test>]
|
||||
let ``Part 1, given`` () =
|
||||
Day11.part1 (StringSplitEnumerator.make '\n' input) |> shouldEqual 10605
|
||||
|
||||
[<Test>]
|
||||
let ``Part 1, single round, given`` () =
|
||||
let monkeys = Day11.parse (StringSplitEnumerator.make '\n' input)
|
||||
let inspections = Array.zeroCreate monkeys.Count
|
||||
|
||||
Day11.oneRoundDivThree monkeys inspections
|
||||
|
||||
inspections |> shouldEqual [| 2 ; 4 ; 3 ; 5 |]
|
||||
|
||||
[<Test>]
|
||||
let ``Part 1`` () =
|
||||
let input = Assembly.readResource "Day11.txt"
|
||||
|
||||
Day11.part1 (StringSplitEnumerator.make '\n' input) |> shouldEqual 120384
|
||||
|
||||
|
||||
[<Test>]
|
||||
let ``Part 2, given 1`` () =
|
||||
Day11.part2 (StringSplitEnumerator.make '\n' input) |> shouldEqual 2713310158L
|
||||
|
||||
[<Test>]
|
||||
let ``Part 2`` () =
|
||||
let input = Assembly.readResource "Day11.txt"
|
||||
Day11.part2 (StringSplitEnumerator.make '\n' input) |> shouldEqual 32059801242L
|
55
AdventOfCode2022.Test/Inputs/Day11.txt
Normal file
55
AdventOfCode2022.Test/Inputs/Day11.txt
Normal file
@@ -0,0 +1,55 @@
|
||||
Monkey 0:
|
||||
Starting items: 99, 67, 92, 61, 83, 64, 98
|
||||
Operation: new = old * 17
|
||||
Test: divisible by 3
|
||||
If true: throw to monkey 4
|
||||
If false: throw to monkey 2
|
||||
|
||||
Monkey 1:
|
||||
Starting items: 78, 74, 88, 89, 50
|
||||
Operation: new = old * 11
|
||||
Test: divisible by 5
|
||||
If true: throw to monkey 3
|
||||
If false: throw to monkey 5
|
||||
|
||||
Monkey 2:
|
||||
Starting items: 98, 91
|
||||
Operation: new = old + 4
|
||||
Test: divisible by 2
|
||||
If true: throw to monkey 6
|
||||
If false: throw to monkey 4
|
||||
|
||||
Monkey 3:
|
||||
Starting items: 59, 72, 94, 91, 79, 88, 94, 51
|
||||
Operation: new = old * old
|
||||
Test: divisible by 13
|
||||
If true: throw to monkey 0
|
||||
If false: throw to monkey 5
|
||||
|
||||
Monkey 4:
|
||||
Starting items: 95, 72, 78
|
||||
Operation: new = old + 7
|
||||
Test: divisible by 11
|
||||
If true: throw to monkey 7
|
||||
If false: throw to monkey 6
|
||||
|
||||
Monkey 5:
|
||||
Starting items: 76
|
||||
Operation: new = old + 8
|
||||
Test: divisible by 17
|
||||
If true: throw to monkey 0
|
||||
If false: throw to monkey 2
|
||||
|
||||
Monkey 6:
|
||||
Starting items: 69, 60, 53, 89, 71, 88
|
||||
Operation: new = old + 5
|
||||
Test: divisible by 19
|
||||
If true: throw to monkey 7
|
||||
If false: throw to monkey 1
|
||||
|
||||
Monkey 7:
|
||||
Starting items: 72, 54, 63, 80
|
||||
Operation: new = old + 3
|
||||
Test: divisible by 7
|
||||
If true: throw to monkey 1
|
||||
If false: throw to monkey 3
|
Reference in New Issue
Block a user