2023-04
Mix.install([
{:benchee, "~> 1.2"},
{:kino, "~> 0.11.0"},
{:kino_aoc, "~> 0.1.5"}
])
Problem
{:ok, input} = KinoAOC.download_puzzle("2023", "4", System.fetch_env!("LB_AOC_SESSION"))
{:ok,
"Card 1: 13 5 40 15 21 61 74 55 32 56 | 21 57 74 56 7 84 37 47 75 66 68 8 55 22 53 61 40 13 15 41 32 46 95 65 5\nCard 2: 92 97 39 23 25 40 33 70 55 77 | 25 70 23 91 45 60 34 56 82 6 9 62 24 3 67 99 18 58 1 26 50 37 32 14 85\nCard 3: 44 71 17 92 34 98 50 61 89 79 | 57 56 89 98 59 61 44 97 79 18 71 50 34 92 23 63 20 51 64 47 76 17 46 54 62\nCard 4: 87 70 44 19 3 54 81 15 72 46 | 75 70 74 84 1 61 85 14 79 66 26 93 39 73 67 21 91 12 3 86 41 42 6 27 49\nCard 5: 86 63 59 76 89 62 87 20 2 66 | 21 58 72 98 95 14 38 16 35 88 60 55 3 36 65 1 28 56 11 74 15 29 93 50 17\nCard 6: 24 92 61 55 50 51 78 2 60 91 | 55 91 51 56 45 67 13 36 66 8 99 62 78 2 92 49 44 69 42 65 50 34 35 82 60\nCard 7: 91 88 72 26 86 34 14 66 31 20 | 25 24 73 97 72 20 87 26 15 47 90 22 14 86 62 68 61 69 88 91 66 27 31 34 52\nCard 8: 40 66 64 42 52 5 18 49 67 94 | 23 5 66 53 33 24 95 86 2 46 67 87 68 71 83 21 78 41 29 62 70 69 61 60 93\nCard 9: 41 86 83 7 80 3 98 95 94 28 | 78 62 21 65 53 6 75 90 39 70 98 59 37 61 49 43 52 34 23 15 83 48 54 80 93\nCard 10: 50 21 55 47 37 4 29 96 80 54 | 79 68 69 55 51 58 37 95 35 73 70 21 64 87 94 89 53 47 62 29 6 41 24 9 54\nCard 11: 64 12 41 90 30 21 54 40 4 86 | 4 57 10 84 88 30 59 70 5 64 18 65 67 92 12 90 56 39 44 75 86 28 9 54 38\nCard 12: 18 17 83 38 62 89 5 35 6 99 | 6 22 19 44 34 36 57 97 46 28 86 89 60 8 26 74 98 38 39 95 96 1 67 35 17\nCard 13: 86 94 93 19 49 11 8 48 81 39 | 74 54 51 62 79 87 18 69 88 75 22 19 46 36 12 26 11 48 80 45 14 92 1 17 33\nCard 14: 92 83 90 42 44 88 77 24 29 46 | 88 93 12 4 74 31 38 34 59 40 18 97 20 2 95 53 23 32 92 68 56 87 71 69 54\nCard 15: 92 68 17 36 99 15 35 67 60 55 | 1 34 38 55 18 49 52 37 27 66 54 59 71 90 69 80 11 10 97 33 24 95 50 36 93\nCard 16: 6 8 62 88 47 96 46 35 78 33 | 13 72 75 84 45 82 95 59 42 55 29 20 70 52 16 4 80 71 94 85 12 61 50 18 81\nCard 17: 35 51 98 72 99 13 45 92 30 67 | 32 75 71 7 91 37 62 35 70 97 80 89 78 47 41 21 12 42 5 52 83 39 29 27 56\nCard 18: 3 10 38 62 66 33 53 14 34 41 | 47 72 60 57 55 37 48 44 7 43 94 75 91 84 77 74 46 1 28 68 26 27 23 80 71\nCard 19: 98 46 62 91 93 61 65 66 20 43 | 11 62 38 93 81 47 43 65 53 59 69 7 57 10 18 61 15 46 20 44 66 86 91 98 30\nCard 20: 56 1 31 96 46 3 25 40 33 59 | 58 82 66 56 75 49 19 1 25 93 46 87 29 18 40 96 48 86 3 33 91 31 24 59 14\nCard 21: 93 43 29 76 85 88 81 58 13 89 | 81 39 93 41 82 20 70 13 3 12 58 43 26 69 89 49 29 85 30 75 96 97 74 76 16\nCard 22: 99 16 89 6 57 37 95 93 87 33 | 78 22 69 84 60 93 33 57 31 38 92 99 46 6 50 16 95 47 89 25 87 83 67 37 39\nCard 23: 96 64 85 18 82 33 29 17 24 99 | 76 99 53 17 78 38 82 96 18 85 1 73 36 24 11 47 40 64 89 98 20 9 23 84 57\nCard 24: 73 21 29 44 15 91 95 12 6 55 | 63 56 34 55 59 62 94 29 89 95 21 28 91 78 83 12 6 2 84 46 73 81 15 44 20\nCard 25: 15 92 59 63 87 68 61 26 98 97 | 4 59 46 83 68 10 32 15 58 85 78 22 98 77 92 56 42 36 61 7 87 17 26 97 63\nCard 26: 87 71 84 55 92 9 26 10 24 25 | 65 1 34 35 50 59 2 23 6 63 56 5 98 45 7 41 58 93 54 27 44 82 46 47 21\nCard 27: 62 49 39 32 15 77 78 50 34 65 | 78 76 20 60 65 56 82 22 39 99 72 35 33 77 49 1 50 42 62 26 16 23 75 43 95\nCard 28: 30 70 26 71 78 57 14 91 66 25 | 61 36 4 46 81 41 99 14 76 78 71 26 2 66 9 48 91 11 30 70 57 42 25 62 87\nCard 29: 14 6 35 9 21 68 50 63 76 59 | 3 43 58 33 93 1 90 21 78 47 99 16 67 80 84 71 97 38 10 83 70 34 44 46 57\nCard 30: 35 11 67 65 88 86 98 76 79 34 | 37 86 44 99 96 76 14 32 65 47 88 67 12 35 34 39 84 90 49 98 66 79 30 11 82\nCard 31: 71 25 9 26 24 23 66 47 40 67 | 65 28 1 2 81 15 38 40 79 13 8 61 97 87 18 4 98 45 42 72 96 92 30 34 73\nCard 32: 90 93 43 8 31 85 26 32 58 39 | 67 10 6 81 97 4 92 34 73 68 53 51 30 65 23 18 36 71 79 70 96 25 13 43 87\nCard 33: 43 89 29 67 13 18 55 2 79 97 | 43 79 28 67 93 55 18 2 21 94 92 99 51 9 31 70 5 68 84 97 29 74 87 53 26\nCard 34: 48 50 5 28 59 82 33 69 7 49 | 55 67 93 39 24 59 48 64 74 76 85 7 14 28 25 2 34 19 69 80 5 68 38 53 50\nCard 35: 8 86 26 41 2 63 7 70 42 56 | 59 87 33 12 86 26 99 29 31 5 97 19 62 47 73 22 42 15 40 32 83 9 88 70 78\nC" <> ...}
Solvers
defmodule PartOne do
@doc ~S"""
iex> PartOne.parse("Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53")
[{1, MapSet.new([6, 9, 17, 31, 48, 53, 83, 86]), MapSet.new([17, 41, 48, 83, 86])}]
"""
def parse(input) do
input
|> String.splitter(["\n"], trim: true)
|> Enum.map(&parse_line/1)
end
def process(input) do
Enum.reduce(input, 0, fn card, total ->
total + score_card(card)
end)
end
def solve(input) do
input
|> parse()
|> process()
end
@line_rx ~r/^Card *(?\d+): (?[\d ]+) \| *(?[\d ]+)/
def parse_line(line) do
%{"card" => c, "draws" => d, "winning" => w} = Regex.named_captures(@line_rx, line)
{String.to_integer(c), num_list_to_set(d), num_list_to_set(w)}
end
def count_matches({_card, winning, drawn}) do
winning |> MapSet.intersection(drawn) |> MapSet.size()
end
defp num_list_to_set(s) do
s |> String.split() |> MapSet.new(&String.to_integer/1)
end
def score_card(card) do
matches = count_matches(card)
if matches > 0 do
Integer.pow(2, matches - 1)
else
0
end
end
end
{:module, PartOne, <<70, 79, 82, 49, 0, 0, 16, ...>>, {:score_card, 1}}
test_input = """
Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53
Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19
Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1
Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83
Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11
"""
"Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53\nCard 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19\nCard 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1\nCard 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83\nCard 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36\nCard 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11\n"
defmodule PartTwo do
import PartOne, only: [parse: 1]
def process(input) do
draw_recursively(input)
end
def solve(input) do
input
|> parse()
|> process()
end
def draw_recursively(cards) do
total = length(cards)
{initial_counts, draw_templates} =
Enum.reduce(cards, {%{}, %{}}, fn {card_num, _w, _d} = card, {counts, draws} ->
next = card_num + 1
counts = Map.update(counts, card_num, 1, &(&1 + 1))
draws =
Map.put_new_lazy(draws, card_num, fn ->
case PartOne.count_matches(card) do
0 ->
[]
n ->
Range.new(next, min(total, next + n - 1))
end
end)
{counts, draws}
end)
count_and_push_stack(initial_counts, draw_templates)
end
def count_and_push_stack(counts, draw_templates, next \\ 1, count \\ 0)
def count_and_push_stack(counts, _draw_templates, _next, count) when counts == %{}, do: count
def count_and_push_stack(counts, draw_templates, next, count) do
template = Map.fetch!(draw_templates, next)
{added, counts} = Map.pop!(counts, next)
counts =
for draw <- template, reduce: counts do
acc ->
Map.update!(acc, draw, &(&1 + added))
end
count_and_push_stack(counts, draw_templates, next + 1, count + added)
end
end
{:module, PartTwo, <<70, 79, 82, 49, 0, 0, 17, ...>>, {:count_and_push_stack, 4}}
Solutions
PartOne.solve(input)
25010
PartTwo.solve(input)
9924412
Tests
ExUnit.start(auto_run: false, seed: 12345, timeout: 5000)
defmodule PartOneTest do
use ExUnit.Case, async: true
doctest PartOne
describe "Part One" do
@test_input """
Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53
Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19
Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1
Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83
Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11
"""
test "scores by winning numbers" do
assert PartOne.solve(@test_input) == 13
end
end
end
defmodule PartTwoTest do
use ExUnit.Case, async: true
doctest PartOne
describe "Part Two" do
@test_input """
Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53
Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19
Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1
Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83
Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11
"""
test "draws and scores recursively" do
assert PartTwo.solve(@test_input) == 30
end
end
end
ExUnit.run()
....
Finished in 0.00 seconds (0.00s async, 0.00s sync)
2 doctests, 2 tests, 0 failures
Randomized with seed 12345
%{total: 4, skipped: 0, failures: 0, excluded: 0}
Golfing
Benchmarks
Benchee.run(
%{
"PartOne" => &PartOne.solve/1,
"PartTwo" => &PartTwo.solve/1
},
inputs: %{
input: input,
test_input: """
Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53
Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19
Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1
Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83
Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11
"""
},
warmup: 2,
time: 3,
memory_time: 3,
reduction_time: 3
)
Operating System: Linux
CPU Information: AMD Ryzen 9 5950X 16-Core Processor
Number of Available Cores: 32
Available memory: 62.71 GB
Elixir 1.15.7
Erlang 26.1.2
Benchmark suite executing with the following configuration:
warmup: 2 s
time: 3 s
memory time: 3 s
reduction time: 3 s
parallel: 1
inputs: input, test_input
Estimated total run time: 44 s
Benchmarking PartOne with input input ...
Benchmarking PartOne with input test_input ...
Benchmarking PartTwo with input input ...
Benchmarking PartTwo with input test_input ...
##### With input input #####
Name ips average deviation median 99th %
PartOne 417.05 2.40 ms ±3.00% 2.37 ms 2.61 ms
PartTwo 395.30 2.53 ms ±5.70% 2.50 ms 2.94 ms
Comparison:
PartOne 417.05
PartTwo 395.30 - 1.06x slower +0.132 ms
Memory usage statistics:
Name average deviation median 99th %
PartOne 0.87 MB ±0.00% 0.87 MB 0.87 MB
PartTwo 1.30 MB ±0.00% 1.30 MB 1.30 MB
Comparison:
PartOne 0.87 MB
PartTwo 1.30 MB - 1.49x memory usage +0.43 MB
Reduction count statistics:
Name Reduction count
PartOne 77.12 K
PartTwo 84.93 K - 1.10x reduction count +7.81 K
**All measurements for reduction count were the same**
##### With input test_input #####
Name ips average deviation median 99th %
PartOne 17.64 K 56.69 μs ±3.60% 56.10 μs 63.01 μs
PartTwo 17.30 K 57.82 μs ±3.60% 57.31 μs 63.17 μs
Comparison:
PartOne 17.64 K
PartTwo 17.30 K - 1.02x slower +1.13 μs
Memory usage statistics:
Name Memory usage
PartOne 14.09 KB
PartTwo 17.65 KB - 1.25x memory usage +3.56 KB
**All measurements for memory usage were the same**
Reduction count statistics:
Name Reduction count
PartOne 1.26 K
PartTwo 1.37 K - 1.09x reduction count +0.113 K
**All measurements for reduction count were the same**
%Benchee.Suite{
system: %{
erlang: "26.1.2",
os: :Linux,
elixir: "1.15.7",
available_memory: "62.71 GB",
cpu_speed: "AMD Ryzen 9 5950X 16-Core Processor",
num_cores: 32
},
configuration: %Benchee.Configuration{
parallel: 1,
time: 3000000000.0,
warmup: 2000000000.0,
memory_time: 3000000000.0,
reduction_time: 3000000000.0,
pre_check: false,
formatters: [Benchee.Formatters.Console],
percentiles: ~c"2c",
print: %{configuration: true, benchmarking: true, fast_warning: true},
inputs: [
{"input",
"Card 1: 13 5 40 15 21 61 74 55 32 56 | 21 57 74 56 7 84 37 47 75 66 68 8 55 22 53 61 40 13 15 41 32 46 95 65 5\nCard 2: 92 97 39 23 25 40 33 70 55 77 | 25 70 23 91 45 60 34 56 82 6 9 62 24 3 67 99 18 58 1 26 50 37 32 14 85\nCard 3: 44 71 17 92 34 98 50 61 89 79 | 57 56 89 98 59 61 44 97 79 18 71 50 34 92 23 63 20 51 64 47 76 17 46 54 62\nCard 4: 87 70 44 19 3 54 81 15 72 46 | 75 70 74 84 1 61 85 14 79 66 26 93 39 73 67 21 91 12 3 86 41 42 6 27 49\nCard 5: 86 63 59 76 89 62 87 20 2 66 | 21 58 72 98 95 14 38 16 35 88 60 55 3 36 65 1 28 56 11 74 15 29 93 50 17\nCard 6: 24 92 61 55 50 51 78 2 60 91 | 55 91 51 56 45 67 13 36 66 8 99 62 78 2 92 49 44 69 42 65 50 34 35 82 60\nCard 7: 91 88 72 26 86 34 14 66 31 20 | 25 24 73 97 72 20 87 26 15 47 90 22 14 86 62 68 61 69 88 91 66 27 31 34 52\nCard 8: 40 66 64 42 52 5 18 49 67 94 | 23 5 66 53 33 24 95 86 2 46 67 87 68 71 83 21 78 41 29 62 70 69 61 60 93\nCard 9: 41 86 83 7 80 3 98 95 94 28 | 78 62 21 65 53 6 75 90 39 70 98 59 37 61 49 43 52 34 23 15 83 48 54 80 93\nCard 10: 50 21 55 47 37 4 29 96 80 54 | 79 68 69 55 51 58 37 95 35 73 70 21 64 87 94 89 53 47 62 29 6 41 24 9 54\nCard 11: 64 12 41 90 30 21 54 40 4 86 | 4 57 10 84 88 30 59 70 5 64 18 65 67 92 12 90 56 39 44 75 86 28 9 54 38\nCard 12: 18 17 83 38 62 89 5 35 6 99 | 6 22 19 44 34 36 57 97 46 28 86 89 60 8 26 74 98 38 39 95 96 1 67 35 17\nCard 13: 86 94 93 19 49 11 8 48 81 39 | 74 54 51 62 79 87 18 69 88 75 22 19 46 36 12 26 11 48 80 45 14 92 1 17 33\nCard 14: 92 83 90 42 44 88 77 24 29 46 | 88 93 12 4 74 31 38 34 59 40 18 97 20 2 95 53 23 32 92 68 56 87 71 69 54\nCard 15: 92 68 17 36 99 15 35 67 60 55 | 1 34 38 55 18 49 52 37 27 66 54 59 71 90 69 80 11 10 97 33 24 95 50 36 93\nCard 16: 6 8 62 88 47 96 46 35 78 33 | 13 72 75 84 45 82 95 59 42 55 29 20 70 52 16 4 80 71 94 85 12 61 50 18 81\nCard 17: 35 51 98 72 99 13 45 92 30 67 | 32 75 71 7 91 37 62 35 70 97 80 89 78 47 41 21 12 42 5 52 83 39 29 27 56\nCard 18: 3 10 38 62 66 33 53 14 34 41 | 47 72 60 57 55 37 48 44 7 43 94 75 91 84 77 74 46 1 28 68 26 27 23 80 71\nCard 19: 98 46 62 91 93 61 65 66 20 43 | 11 62 38 93 81 47 43 65 53 59 69 7 57 10 18 61 15 46 20 44 66 86 91 98 30\nCard 20: 56 1 31 96 46 3 25 40 33 59 | 58 82 66 56 75 49 19 1 25 93 46 87 29 18 40 96 48 86 3 33 91 31 24 59 14\nCard 21: 93 43 29 76 85 88 81 58 13 89 | 81 39 93 41 82 20 70 13 3 12 58 43 26 69 89 49 29 85 30 75 96 97 74 76 16\nCard 22: 99 16 89 6 57 37 95 93 87 33 | 78 22 69 84 60 93 33 57 31 38 92 99 46 6 50 16 95 47 89 25 87 83 67 37 39\nCard 23: 96 64 85 18 82 33 29 17 24 99 | 76 99 53 17 78 38 82 96 18 85 1 73 36 24 11 47 40 64 89 98 20 9 23 84 57\nCard 24: 73 21 29 44 15 91 95 12 6 55 | 63 56 34 55 59 62 94 29 89 95 21 28 91 78 83 12 6 2 84 46 73 81 15 44 20\nCard 25: 15 92 59 63 87 68 61 26 98 97 | 4 59 46 83 68 10 32 15 58 85 78 22 98 77 92 56 42 36 61 7 87 17 26 97 63\nCard 26: 87 71 84 55 92 9 26 10 24 25 | 65 1 34 35 50 59 2 23 6 63 56 5 98 45 7 41 58 93 54 27 44 82 46 47 21\nCard 27: 62 49 39 32 15 77 78 50 34 65 | 78 76 20 60 65 56 82 22 39 99 72 35 33 77 49 1 50 42 62 26 16 23 75 43 95\nCard 28: 30 70 26 71 78 57 14 91 66 25 | 61 36 4 46 81 41 99 14 76 78 71 26 2 66 9 48 91 11 30 70 57 42 25 62 87\nCard 29: 14 6 35 9 21 68 50 63 76 59 | 3 43 58 33 93 1 90 21 78 47 99 16 67 80 84 71 97 38 10 83 70 34 44 46 57\nCard 30: 35 11 67 65 88 86 98 76 79 34 | 37 86 44 99 96 76 14 32 65 47 88 67 12 35 34 39 84 90 49 98 66 79 30 11 82\nCard 31: 71 25 9 26 24 23 66 47 40 67 | 65 28 1 2 81 15 38 40 79 13 8 61 97 87 18 4 98 45 42 72 96 92 30 34 73\nCard 32: 90 93 43 8 31 85 26 32 58 39 | 67 10 6 81 97 4 92 34 73 68 53 51 30 65 23 18 36 71 79 70 96 25 13 43 87\nCard 33: 43 89 29 67 13 18 55 2 79 97 | 43 79 28 67 93 55 18 2 21 94 92 99 51 9 31 70 5 68 84 97 29 74 87 53 26\nCard 34: 48 50 5 28 59 82 33 69 7 49 | 55 67 93 39 24 59 48 64 74 76 85 7 14 28 25 2 34 19 69 80 5 68 38 53 50\nCard 35: 8 86 26 41 2 63 7 70 42 56 | 59 87 33 12 86 26 99 29 31 5 97 19 62 47 73 22 42 15 40 32 83 9 88 70 78\nC" <> ...},
{"test_input",
"Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53\nCard 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19\nCard 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1\nCard 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83\nCard 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36\nCard 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11\n"}
],
save: false,
load: false,
unit_scaling: :best,
assigns: %{},
before_each: nil,
after_each: nil,
before_scenario: nil,
after_scenario: nil,
measure_function_call_overhead: false,
title: nil,
profile_after: false
},
scenarios: [
%Benchee.Scenario{
name: "PartOne",
job_name: "PartOne",
function: &PartOne.solve/1,
input_name: "input",
input: "Card 1: 13 5 40 15 21 61 74 55 32 56 | 21 57 74 56 7 84 37 47 75 66 68 8 55 22 53 61 40 13 15 41 32 46 95 65 5\nCard 2: 92 97 39 23 25 40 33 70 55 77 | 25 70 23 91 45 60 34 56 82 6 9 62 24 3 67 99 18 58 1 26 50 37 32 14 85\nCard 3: 44 71 17 92 34 98 50 61 89 79 | 57 56 89 98 59 61 44 97 79 18 71 50 34 92 23 63 20 51 64 47 76 17 46 54 62\nCard 4: 87 70 44 19 3 54 81 15 72 46 | 75 70 74 84 1 61 85 14 79 66 26 93 39 73 67 21 91 12 3 86 41 42 6 27 49\nCard 5: 86 63 59 76 89 62 87 20 2 66 | 21 58 72 98 95 14 38 16 35 88 60 55 3 36 65 1 28 56 11 74 15 29 93 50 17\nCard 6: 24 92 61 55 50 51 78 2 60 91 | 55 91 51 56 45 67 13 36 66 8 99 62 78 2 92 49 44 69 42 65 50 34 35 82 60\nCard 7: 91 88 72 26 86 34 14 66 31 20 | 25 24 73 97 72 20 87 26 15 47 90 22 14 86 62 68 61 69 88 91 66 27 31 34 52\nCard 8: 40 66 64 42 52 5 18 49 67 94 | 23 5 66 53 33 24 95 86 2 46 67 87 68 71 83 21 78 41 29 62 70 69 61 60 93\nCard 9: 41 86 83 7 80 3 98 95 94 28 | 78 62 21 65 53 6 75 90 39 70 98 59 37 61 49 43 52 34 23 15 83 48 54 80 93\nCard 10: 50 21 55 47 37 4 29 96 80 54 | 79 68 69 55 51 58 37 95 35 73 70 21 64 87 94 89 53 47 62 29 6 41 24 9 54\nCard 11: 64 12 41 90 30 21 54 40 4 86 | 4 57 10 84 88 30 59 70 5 64 18 65 67 92 12 90 56 39 44 75 86 28 9 54 38\nCard 12: 18 17 83 38 62 89 5 35 6 99 | 6 22 19 44 34 36 57 97 46 28 86 89 60 8 26 74 98 38 39 95 96 1 67 35 17\nCard 13: 86 94 93 19 49 11 8 48 81 39 | 74 54 51 62 79 87 18 69 88 75 22 19 46 36 12 26 11 48 80 45 14 92 1 17 33\nCard 14: 92 83 90 42 44 88 77 24 29 46 | 88 93 12 4 74 31 38 34 59 40 18 97 20 2 95 53 23 32 92 68 56 87 71 69 54\nCard 15: 92 68 17 36 99 15 35 67 60 55 | 1 34 38 55 18 49 52 37 27 66 54 59 71 90 69 80 11 10 97 33 24 95 50 36 93\nCard 16: 6 8 62 88 47 96 46 35 78 33 | 13 72 75 84 45 82 95 59 42 55 29 20 70 52 16 4 80 71 94 85 12 61 50 18 81\nCard 17: 35 51 98 72 99 13 45 92 30 67 | 32 75 71 7 91 37 62 35 70 97 80 89 78 47 41 21 12 42 5 52 83 39 29 27 56\nCard 18: 3 10 38 62 66 33 53 14 34 41 | 47 72 60 57 55 37 48 44 7 43 94 75 91 84 77 74 46 1 28 68 26 27 23 80 71\nCard 19: 98 46 62 91 93 61 65 66 20 43 | 11 62 38 93 81 47 43 65 53 59 69 7 57 10 18 61 15 46 20 44 66 86 91 98 30\nCard 20: 56 1 31 96 46 3 25 40 33 59 | 58 82 66 56 75 49 19 1 25 93 46 87 29 18 40 96 48 86 3 33 91 31 24 59 14\nCard 21: 93 43 29 76 85 88 81 58 13 89 | 81 39 93 41 82 20 70 13 3 12 58 43 26 69 89 49 29 85 30 75 96 97 74 76 16\nCard 22: 99 16 89 6 57 37 95 93 87 33 | 78 22 69 84 60 93 33 57 31 38 92 99 46 6 50 16 95 47 89 25 87 83 67 37 39\nCard 23: 96 64 85 18 82 33 29 17 24 99 | 76 99 53 17 78 38 82 96 18 85 1 73 36 24 11 47 40 64 89 98 20 9 23 84 57\nCard 24: 73 21 29 44 15 91 95 12 6 55 | 63 56 34 55 59 62 94 29 89 95 21 28 91 78 83 12 6 2 84 46 73 81 15 44 20\nCard 25: 15 92 59 63 87 68 61 26 98 97 | 4 59 46 83 68 10 32 15 58 85 78 22 98 77 92 56 42 36 61 7 87 17 26 97 63\nCard 26: 87 71 84 55 92 9 26 10 24 25 | 65 1 34 35 50 59 2 23 6 63 56 5 98 45 7 41 58 93 54 27 44 82 46 47 21\nCard 27: 62 49 39 32 15 77 78 50 34 65 | 78 76 20 60 65 56 82 22 39 99 72 35 33 77 49 1 50 42 62 26 16 23 75 43 95\nCard 28: 30 70 26 71 78 57 14 91 66 25 | 61 36 4 46 81 41 99 14 76 78 71 26 2 66 9 48 91 11 30 70 57 42 25 62 87\nCard 29: 14 6 35 9 21 68 50 63 76 59 | 3 43 58 33 93 1 90 21 78 47 99 16 67 80 84 71 97 38 10 83 70 34 44 46 57\nCard 30: 35 11 67 65 88 86 98 76 79 34 | 37 86 44 99 96 76 14 32 65 47 88 67 12 35 34 39 84 90 49 98 66 79 30 11 82\nCard 31: 71 25 9 26 24 23 66 47 40 67 | 65 28 1 2 81 15 38 40 79 13 8 61 97 87 18 4 98 45 42 72 96 92 30 34 73\nCard 32: 90 93 43 8 31 85 26 32 58 39 | 67 10 6 81 97 4 92 34 73 68 53 51 30 65 23 18 36 71 79 70 96 25 13 43 87\nCard 33: 43 89 29 67 13 18 55 2 79 97 | 43 79 28 67 93 55 18 2 21 94 92 99 51 9 31 70 5 68 84 97 29 74 87 53 26\nCard 34: 48 50 5 28 59 82 33 69 7 49 | 55 67 93 39 24 59 48 64 74 76 85 7 14 28 25 2 34 19 69 80 5 68 38 53 50\nCard 35: 8 86 26 41 2 63 7 70 42 56 | 59 87 33 12 86 26 99 29 31 5 97 19 62 47 73 22 42 15 40 32 83 9 88 70 78\nC" <> ...,
before_each: nil,
after_each: nil,
before_scenario: nil,
after_scenario: nil,
tag: nil,
run_time_data: %Benchee.CollectionData{
statistics: %Benchee.Statistics{
average: 2397789.276578737,
ips: 417.05082667933215,
std_dev: 71883.02434271002,
std_dev_ratio: 0.02997887472633777,
std_dev_ips: 12.502714487535304,
median: 2371697.0,
percentiles: %{50 => 2371697.0, 99 => 2607260.8},
mode: [2328047, 2364897],
minimum: 2304687,
maximum: 2673121,
relative_more: nil,
relative_less: nil,
absolute_difference: nil,
sample_size: 1251
},
samples: [2427328, 2327727, 2405958, 2357577, 2313366, 2467869, 2401887, 2420028, 2373117,
2545390, 2323407, 2335636, 2359408, 2488218, 2427798, 2307467, 2364897, 2479908, 2404768,
2318247, 2312776, 2515619, 2316897, 2364777, 2313607, 2546309, 2375007, 2382718, 2400817,
2350727, 2402658, 2366137, 2551340, ...]
},
memory_usage_data: %Benchee.CollectionData{
statistics: %Benchee.Statistics{
average: 913840.0215246637,
ips: nil,
std_dev: 0.718743297882597,
std_dev_ratio: 7.865088866248553e-7,
std_dev_ips: nil,
median: 913840.0,
percentiles: %{50 => 913840.0, 99 => 913840.0},
mode: 913840,
minimum: 913840,
maximum: 913864,
relative_more: nil,
relative_less: nil,
absolute_difference: nil,
sample_size: 1115
},
samples: [913840, 913840, 913840, 913840, 913840, 913840, 913840, 913840, 913840, 913840,
913840, 913840, 913840, 913840, 913840, 913840, 913840, 913840, 913840, 913840, 913840,
913840, 913840, 913840, 913840, 913840, 913840, 913840, 913840, 913840, 913840, 913840,
...]
},
reductions_data: %Benchee.CollectionData{
statistics: %Benchee.Statistics{
average: 77120.0,
ips: nil,
std_dev: 0.0,
std_dev_ratio: 0.0,
std_dev_ips: nil,
median: 77120.0,
percentiles: %{50 => 77120.0, 99 => 77120.0},
mode: 77120,
minimum: 77120,
maximum: 77120,
relative_more: nil,
relative_less: nil,
absolute_difference: nil,
sample_size: 1240
},
samples: [77120, 77120, 77120, 77120, 77120, 77120, 77120, 77120, 77120, 77120, 77120,
77120, 77120, 77120, 77120, 77120, 77120, 77120, 77120, 77120, 77120, 77120, 77120, 77120,
77120, 77120, 77120, 77120, 77120, 77120, 77120, ...]
}
},
%Benchee.Scenario{
name: "PartTwo",
job_name: "PartTwo",
function: &PartTwo.solve/1,
input_name: "input",
input: "Card 1: 13 5 40 15 21 61 74 55 32 56 | 21 57 74 56 7 84 37 47 75 66 68 8 55 22 53 61 40 13 15 41 32 46 95 65 5\nCard 2: 92 97 39 23 25 40 33 70 55 77 | 25 70 23 91 45 60 34 56 82 6 9 62 24 3 67 99 18 58 1 26 50 37 32 14 85\nCard 3: 44 71 17 92 34 98 50 61 89 79 | 57 56 89 98 59 61 44 97 79 18 71 50 34 92 23 63 20 51 64 47 76 17 46 54 62\nCard 4: 87 70 44 19 3 54 81 15 72 46 | 75 70 74 84 1 61 85 14 79 66 26 93 39 73 67 21 91 12 3 86 41 42 6 27 49\nCard 5: 86 63 59 76 89 62 87 20 2 66 | 21 58 72 98 95 14 38 16 35 88 60 55 3 36 65 1 28 56 11 74 15 29 93 50 17\nCard 6: 24 92 61 55 50 51 78 2 60 91 | 55 91 51 56 45 67 13 36 66 8 99 62 78 2 92 49 44 69 42 65 50 34 35 82 60\nCard 7: 91 88 72 26 86 34 14 66 31 20 | 25 24 73 97 72 20 87 26 15 47 90 22 14 86 62 68 61 69 88 91 66 27 31 34 52\nCard 8: 40 66 64 42 52 5 18 49 67 94 | 23 5 66 53 33 24 95 86 2 46 67 87 68 71 83 21 78 41 29 62 70 69 61 60 93\nCard 9: 41 86 83 7 80 3 98 95 94 28 | 78 62 21 65 53 6 75 90 39 70 98 59 37 61 49 43 52 34 23 15 83 48 54 80 93\nCard 10: 50 21 55 47 37 4 29 96 80 54 | 79 68 69 55 51 58 37 95 35 73 70 21 64 87 94 89 53 47 62 29 6 41 24 9 54\nCard 11: 64 12 41 90 30 21 54 40 4 86 | 4 57 10 84 88 30 59 70 5 64 18 65 67 92 12 90 56 39 44 75 86 28 9 54 38\nCard 12: 18 17 83 38 62 89 5 35 6 99 | 6 22 19 44 34 36 57 97 46 28 86 89 60 8 26 74 98 38 39 95 96 1 67 35 17\nCard 13: 86 94 93 19 49 11 8 48 81 39 | 74 54 51 62 79 87 18 69 88 75 22 19 46 36 12 26 11 48 80 45 14 92 1 17 33\nCard 14: 92 83 90 42 44 88 77 24 29 46 | 88 93 12 4 74 31 38 34 59 40 18 97 20 2 95 53 23 32 92 68 56 87 71 69 54\nCard 15: 92 68 17 36 99 15 35 67 60 55 | 1 34 38 55 18 49 52 37 27 66 54 59 71 90 69 80 11 10 97 33 24 95 50 36 93\nCard 16: 6 8 62 88 47 96 46 35 78 33 | 13 72 75 84 45 82 95 59 42 55 29 20 70 52 16 4 80 71 94 85 12 61 50 18 81\nCard 17: 35 51 98 72 99 13 45 92 30 67 | 32 75 71 7 91 37 62 35 70 97 80 89 78 47 41 21 12 42 5 52 83 39 29 27 56\nCard 18: 3 10 38 62 66 33 53 14 34 41 | 47 72 60 57 55 37 48 44 7 43 94 75 91 84 77 74 46 1 28 68 26 27 23 80 71\nCard 19: 98 46 62 91 93 61 65 66 20 43 | 11 62 38 93 81 47 43 65 53 59 69 7 57 10 18 61 15 46 20 44 66 86 91 98 30\nCard 20: 56 1 31 96 46 3 25 40 33 59 | 58 82 66 56 75 49 19 1 25 93 46 87 29 18 40 96 48 86 3 33 91 31 24 59 14\nCard 21: 93 43 29 76 85 88 81 58 13 89 | 81 39 93 41 82 20 70 13 3 12 58 43 26 69 89 49 29 85 30 75 96 97 74 76 16\nCard 22: 99 16 89 6 57 37 95 93 87 33 | 78 22 69 84 60 93 33 57 31 38 92 99 46 6 50 16 95 47 89 25 87 83 67 37 39\nCard 23: 96 64 85 18 82 33 29 17 24 99 | 76 99 53 17 78 38 82 96 18 85 1 73 36 24 11 47 40 64 89 98 20 9 23 84 57\nCard 24: 73 21 29 44 15 91 95 12 6 55 | 63 56 34 55 59 62 94 29 89 95 21 28 91 78 83 12 6 2 84 46 73 81 15 44 20\nCard 25: 15 92 59 63 87 68 61 26 98 97 | 4 59 46 83 68 10 32 15 58 85 78 22 98 77 92 56 42 36 61 7 87 17 26 97 63\nCard 26: 87 71 84 55 92 9 26 10 24 25 | 65 1 34 35 50 59 2 23 6 63 56 5 98 45 7 41 58 93 54 27 44 82 46 47 21\nCard 27: 62 49 39 32 15 77 78 50 34 65 | 78 76 20 60 65 56 82 22 39 99 72 35 33 77 49 1 50 42 62 26 16 23 75 43 95\nCard 28: 30 70 26 71 78 57 14 91 66 25 | 61 36 4 46 81 41 99 14 76 78 71 26 2 66 9 48 91 11 30 70 57 42 25 62 87\nCard 29: 14 6 35 9 21 68 50 63 76 59 | 3 43 58 33 93 1 90 21 78 47 99 16 67 80 84 71 97 38 10 83 70 34 44 46 57\nCard 30: 35 11 67 65 88 86 98 76 79 34 | 37 86 44 99 96 76 14 32 65 47 88 67 12 35 34 39 84 90 49 98 66 79 30 11 82\nCard 31: 71 25 9 26 24 23 66 47 40 67 | 65 28 1 2 81 15 38 40 79 13 8 61 97 87 18 4 98 45 42 72 96 92 30 34 73\nCard 32: 90 93 43 8 31 85 26 32 58 39 | 67 10 6 81 97 4 92 34 73 68 53 51 30 65 23 18 36 71 79 70 96 25 13 43 87\nCard 33: 43 89 29 67 13 18 55 2 79 97 | 43 79 28 67 93 55 18 2 21 94 92 99 51 9 31 70 5 68 84 97 29 74 87 53 26\nCard 34: 48 50 5 28 59 82 33 69 7 49 | 55 67 93 39 24 59 48 64 74 76 85 7 14 28 25 2 34 19 69 80 5 68 38 53 50\nCard 35: 8 86 26 41 2 63 7 70 42 56 | 59 87 33 12 86 26 99 29 31 5 97 19 62 47 73 22 42 15 40 32 83 9 88 70 78\nC" <> ...,
before_each: nil,
after_each: nil,
before_scenario: nil,
after_scenario: nil,
tag: nil,
run_time_data: %Benchee.CollectionData{
statistics: %Benchee.Statistics{
average: 2529746.863406408,
ips: 395.2964679847291,
std_dev: 144214.24949898393,
std_dev_ratio: 0.05700738346001683,
std_dev_ips: 22.53481733079572,
median: 2499163.5,
percentiles: %{50 => 2499163.5, 99 => 2941196.2999999993},
mode: [2410097, 2556000, 2442718, 2488969, 2551119, 2493388, 2565500, 2537269, 2527359,
2432538, 2439188, 2557919, 2477379, 2446408, 2529719, 2564759, 2444148, 2499569, 2479948,
2430628],
minimum: 2387278,
maximum: 4315830,
relative_more: 1.05503302067309,
relative_less: 0.9478376320032333,
absolute_difference: 131957.58682767116,
sample_size: 1186
},
samples: [2582740, 2501368, 2596270, 2492399, 2589170, 2504089, 2619800, 2501108, 2603200,
2508359, 2600300, 2513479, 2601480, 2566909, 2608600, 2557470, 2559659, 2633880, 2486349,
2482499, 2618640, 2485688, 2588110, 2809042, 2488969, 2487378, 2620001, 2501668, 2492209,
2631960, 2558810, 2615270, ...]
},
memory_usage_data: %Benchee.CollectionData{
statistics: %Benchee.Statistics{
average: 1364792.0,
ips: nil,
std_dev: 0.0,
std_dev_ratio: 0.0,
std_dev_ips: nil,
median: 1364792.0,
percentiles: %{50 => 1364792.0, 99 => 1364792.0},
mode: 1364792,
minimum: 1364792,
maximum: 1364792,
relative_more: 1.4934692811143921,
relative_less: 0.6695819007765752,
absolute_difference: 450951.97847533633,
sample_size: 1072
},
samples: [1364792, 1364792, 1364792, 1364792, 1364792, 1364792, 1364792, 1364792, 1364792,
1364792, 1364792, 1364792, 1364792, 1364792, 1364792, 1364792, 1364792, 1364792, 1364792,
1364792, 1364792, 1364792, 1364792, 1364792, 1364792, 1364792, 1364792, 1364792, 1364792,
1364792, 1364792, ...]
},
reductions_data: %Benchee.CollectionData{
statistics: %Benchee.Statistics{
average: 84933.0,
ips: nil,
std_dev: 0.0,
std_dev_ratio: 0.0,
std_dev_ips: nil,
median: 84933.0,
percentiles: %{50 => 84933.0, 99 => 84933.0},
mode: 84933,
minimum: 84933,
maximum: 84933,
relative_more: 1.1013096473029045,
relative_less: 0.9080098430527592,
absolute_difference: 7813.0,
sample_size: 1180
},
samples: [84933, 84933, 84933, 84933, 84933, 84933, 84933, 84933, 84933, 84933, 84933,
84933, 84933, 84933, 84933, 84933, 84933, 84933, 84933, 84933, 84933, 84933, 84933, 84933,
84933, 84933, 84933, 84933, 84933, 84933, ...]
}
},
%Benchee.Scenario{
name: "PartOne",
job_name: "PartOne",
function: &PartOne.solve/1,
input_name: "test_input",
input: "Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53\nCard 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19\nCard 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1\nCard 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83\nCard 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36\nCard 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11\n",
before_each: nil,
after_each: nil,
before_scenario: nil,
after_scenario: nil,
tag: nil,
run_time_data: %Benchee.CollectionData{
statistics: %Benchee.Statistics{
average: 56685.57118170943,
ips: 17641.173567686783,
std_dev: 2041.8993407473222,
std_dev_ratio: 0.03602150067786873,
std_dev_ips: 635.4615456268294,
median: 56100.0,
percentiles: %{50 => 56100.0, 99 => 63014.799999999974},
mode: 55761,
minimum: 54720,
maximum: 183402,
relative_more: nil,
relative_less: nil,
absolute_difference: nil,
sample_size: 52661
},
samples: [72051, 59480, 63381, 63151, 58380, 60231, 66541, 59691, 59740, 58801, 59491,
58220, 63551, 58471, 59500, 61441, 58541, 58250, 57951, 64191, 58351, 58230, 68161, 58261,
59700, 58481, 59401, 58060, 57211, 61971, 58020, ...]
},
memory_usage_data: %Benchee.CollectionData{
statistics: %Benchee.Statistics{
average: 14424.0,
ips: nil,
std_dev: 0.0,
std_dev_ratio: 0.0,
std_dev_ips: nil,
median: 14424.0,
percentiles: %{50 => 14424.0, 99 => 14424.0},
mode: 14424,
minimum: 14424,
maximum: 14424,
relative_more: nil,
relative_less: nil,
absolute_difference: nil,
sample_size: 35591
},
samples: [14424, 14424, 14424, 14424, 14424, 14424, 14424, 14424, 14424, 14424, 14424,
14424, 14424, 14424, 14424, 14424, 14424, 14424, 14424, 14424, 14424, 14424, 14424, 14424,
14424, 14424, 14424, 14424, 14424, 14424, ...]
},
reductions_data: %Benchee.CollectionData{
statistics: %Benchee.Statistics{
average: 1256.0,
ips: nil,
std_dev: 0.0,
std_dev_ratio: 0.0,
std_dev_ips: nil,
median: 1256.0,
percentiles: %{50 => 1256.0, 99 => 1256.0},
mode: 1256,
minimum: 1256,
maximum: 1256,
relative_more: nil,
relative_less: nil,
absolute_difference: nil,
sample_size: 25495
},
samples: [1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256,
1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256,
1256, ...]
}
},
%Benchee.Scenario{
name: "PartTwo",
job_name: "PartTwo",
function: &PartTwo.solve/1,
input_name: "test_input",
input: "Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53\nCard 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19\nCard 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1\nCard 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83\nCard 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36\nCard 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11\n",
before_each: nil,
after_each: nil,
before_scenario: nil,
after_scenario: nil,
tag: nil,
run_time_data: %Benchee.CollectionData{
statistics: %Benchee.Statistics{
average: 57817.33073824464,
ips: 17295.852078112737,
std_dev: 2080.3364966975087,
std_dev_ratio: 0.03598119231957938,
std_dev_ips: 622.3253799535711,
median: 57310.0,
percentiles: %{50 => 57310.0, 99 => 63171.0},
mode: 57051,
minimum: 55050,
maximum: 174442,
relative_more: 1.019965566773726,
relative_less: 0.9804252541221765,
absolute_difference: 1131.7595565352094,
sample_size: 51636
},
samples: [72681, 60581, 63791, 61310, 58761, 59181, 58990, 64911, 59671, 58880, 58541,
61621, 59560, 58761, 58921, 58790, 58581, 58981, 59101, 58950, 60631, 72031, 73591, 68880,
59671, 59001, 59250, 59151, 58651, 61851, ...]
},
memory_usage_data: %Benchee.CollectionData{
statistics: %Benchee.Statistics{
average: 18072.0,
ips: nil,
std_dev: 0.0,
std_dev_ratio: 0.0,
std_dev_ips: nil,
median: 18072.0,
percentiles: %{50 => 18072.0, 99 => 18072.0},
mode: 18072,
minimum: 18072,
maximum: 18072,
relative_more: 1.2529118136439268,
relative_less: 0.798140770252324,
absolute_difference: 3648.0,
sample_size: 33006
},
samples: [18072, 18072, 18072, 18072, 18072, 18072, 18072, 18072, 18072, 18072, 18072,
18072, 18072, 18072, 18072, 18072, 18072, 18072, 18072, 18072, 18072, 18072, 18072, 18072,
18072, 18072, 18072, 18072, 18072, ...]
},
reductions_data: %Benchee.CollectionData{
statistics: %Benchee.Statistics{
average: 1369.0,
ips: nil,
std_dev: 0.0,
std_dev_ratio: 0.0,
std_dev_ips: nil,
median: 1369.0,
percentiles: %{50 => 1369.0, 99 => 1369.0},
mode: 1369,
minimum: 1369,
maximum: 1369,
relative_more: 1.089968152866242,
relative_less: 0.9174579985390796,
absolute_difference: 113.0,
sample_size: 25386
},
samples: [1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369,
1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369,
...]
}
}
]
}
Failures
Sometimes my ideas don’t work out.