const std = @import("std");
const app = @import("./main.zig");
test "expect task 1 to result in 26 instances" {
var input = [_]app.Display{
.{
.definitions = &.{
"be", "cfbegad", "cbdgef", "fgaecd", "cgeb", "fdcge", "agebfd", "fecdb", "fabcd", "edb",
},
.digits = &.{
"fdgacbe", "cefdb", "cefbgd", "gcbe",
},
},
.{
.definitions = &.{
"edbfga", "begcd", "cbg", "gc", "gcadebf", "fbgde", "acbgfd", "abcde", "gfcbed", "gfec",
},
.digits = &.{
"fcgedb", "cgb", "dgebacf", "gc",
},
},
.{
.definitions = &.{
"fgaebd", "cg", "bdaec", "gdafb", "agbcfd", "gdcbef", "bgcad", "gfac", "gcb", "cdgabef",
},
.digits = &.{
"cg", "cg", "fdcagb", "cbg",
},
},
.{
.definitions = &.{
"fbegcd", "cbd", "adcefb", "dageb", "afcb", "bc", "aefdc", "ecdab", "fgdeca", "fcdbega",
},
.digits = &.{
"efabcd", "cedba", "gadfec", "cb",
},
},
.{
.definitions = &.{
"aecbfdg", "fbg", "gf", "bafeg", "dbefa", "fcge", "gcbea", "fcaegb", "dgceab", "fcbdga",
},
.digits = &.{
"gecf", "egdcabf", "bgf", "bfgea",
},
},
.{
.definitions = &.{
"fgeab", "ca", "afcebg", "bdacfeg", "cfaedg", "gcfdb", "baec", "bfadeg", "bafgc", "acf",
},
.digits = &.{
"gebdcfa", "ecba", "ca", "fadegcb",
},
},
.{
.definitions = &.{
"dbcfg", "fgd", "bdegcaf", "fgec", "aegbdf", "ecdfab", "fbedc", "dacgb", "gdcebf", "gf",
},
.digits = &.{
"cefg", "dcbef", "fcge", "gbcadfe",
},
},
.{
.definitions = &.{
"bdfegc", "cbegaf", "gecbf", "dfcage", "bdacg", "ed", "bedf", "ced", "adcbefg", "gebcd",
},
.digits = &.{
"ed", "bcgafe", "cdgba", "cbgef",
},
},
.{
.definitions = &.{
"egadfb", "cdbfeg", "cegd", "fecab", "cgb", "gbdefca", "cg", "fgcdab", "egfdb", "bfceg",
},
.digits = &.{
"gbdfcae", "bgc", "cg", "cgb",
},
},
.{
.definitions = &.{
"gcafb", "gcf", "dcaebfg", "ecagb", "gf", "abcdeg", "gaef", "cafbge", "fdbac", "fegbdc",
},
.digits = &.{
"fgae", "cfgab", "fg", "bagce",
},
},
};
const expected: u32 = 26;
std.testing.log_level = .debug;
try std.testing.expect(app.task1(&input) == expected);
}
test "expect task 2 to result in 5353" {
var input = [_]app.Display{
.{
.definitions = &.{
"acedgfb", "cdfbe", "gcdfa", "fbcad", "dab", "cefabd", "cdfgeb", "eafb", "cagedb", "ab",
},
.digits = &.{
"cdfeb", "fcadb", "cdfeb", "cdbaf",
},
},
};
const expected: u32 = 5353;
std.testing.log_level = .debug;
var result = try app.task2(std.testing.allocator, &input);
try std.testing.expect(result[0] == expected);
std.testing.allocator.free(result);
}
test "expect task 2 to result in correct solutions" {
var input = [_]app.Display{
.{
.definitions = &.{
"be", "cfbegad", "cbdgef", "fgaecd", "cgeb", "fdcge", "agebfd", "fecdb", "fabcd", "edb",
},
.digits = &.{
"fdgacbe", "cefdb", "cefbgd", "gcbe",
},
},
.{
.definitions = &.{
"edbfga", "begcd", "cbg", "gc", "gcadebf", "fbgde", "acbgfd", "abcde", "gfcbed", "gfec",
},
.digits = &.{
"fcgedb", "cgb", "dgebacf", "gc",
},
},
.{
.definitions = &.{
"fgaebd", "cg", "bdaec", "gdafb", "agbcfd", "gdcbef", "bgcad", "gfac", "gcb", "cdgabef",
},
.digits = &.{
"cg", "cg", "fdcagb", "cbg",
},
},
.{
.definitions = &.{
"fbegcd", "cbd", "adcefb", "dageb", "afcb", "bc", "aefdc", "ecdab", "fgdeca", "fcdbega",
},
.digits = &.{
"efabcd", "cedba", "gadfec", "cb",
},
},
.{
.definitions = &.{
"aecbfdg", "fbg", "gf", "bafeg", "dbefa", "fcge", "gcbea", "fcaegb", "dgceab", "fcbdga",
},
.digits = &.{
"gecf", "egdcabf", "bgf", "bfgea",
},
},
.{
.definitions = &.{
"fgeab", "ca", "afcebg", "bdacfeg", "cfaedg", "gcfdb", "baec", "bfadeg", "bafgc", "acf",
},
.digits = &.{
"gebdcfa", "ecba", "ca", "fadegcb",
},
},
.{
.definitions = &.{
"dbcfg", "fgd", "bdegcaf", "fgec", "aegbdf", "ecdfab", "fbedc", "dacgb", "gdcebf", "gf",
},
.digits = &.{
"cefg", "dcbef", "fcge", "gbcadfe",
},
},
.{
.definitions = &.{
"bdfegc", "cbegaf", "gecbf", "dfcage", "bdacg", "ed", "bedf", "ced", "adcbefg", "gebcd",
},
.digits = &.{
"ed", "bcgafe", "cdgba", "cbgef",
},
},
.{
.definitions = &.{
"egadfb", "cdbfeg", "cegd", "fecab", "cgb", "gbdefca", "cg", "fgcdab", "egfdb", "bfceg",
},
.digits = &.{
"gbdfcae", "bgc", "cg", "cgb",
},
},
.{
.definitions = &.{
"gcafb", "gcf", "dcaebfg", "ecagb", "gf", "abcdeg", "gaef", "cafbge", "fdbac", "fegbdc",
},
.digits = &.{
"fgae", "cfgab", "fg", "bagce",
},
},
};
const expected = [_]u32{
8394,
9781,
1197,
9361,
4873,
8418,
4548,
1625,
8717,
4315,
};
std.testing.log_level = .debug;
var result = try app.task2(std.testing.allocator, &input);
for (expected) |_, i| {
try std.testing.expect(result[i] == expected[i]);
}
std.testing.allocator.free(result);
}
test "expect task 2 to sum to 61229" {
var input = [_]app.Display{
.{
.definitions = &.{
"be", "cfbegad", "cbdgef", "fgaecd", "cgeb", "fdcge", "agebfd", "fecdb", "fabcd", "edb",
},
.digits = &.{
"fdgacbe", "cefdb", "cefbgd", "gcbe",
},
},
.{
.definitions = &.{
"edbfga", "begcd", "cbg", "gc", "gcadebf", "fbgde", "acbgfd", "abcde", "gfcbed", "gfec",
},
.digits = &.{
"fcgedb", "cgb", "dgebacf", "gc",
},
},
.{
.definitions = &.{
"fgaebd", "cg", "bdaec", "gdafb", "agbcfd", "gdcbef", "bgcad", "gfac", "gcb", "cdgabef",
},
.digits = &.{
"cg", "cg", "fdcagb", "cbg",
},
},
.{
.definitions = &.{
"fbegcd", "cbd", "adcefb", "dageb", "afcb", "bc", "aefdc", "ecdab", "fgdeca", "fcdbega",
},
.digits = &.{
"efabcd", "cedba", "gadfec", "cb",
},
},
.{
.definitions = &.{
"aecbfdg", "fbg", "gf", "bafeg", "dbefa", "fcge", "gcbea", "fcaegb", "dgceab", "fcbdga",
},
.digits = &.{
"gecf", "egdcabf", "bgf", "bfgea",
},
},
.{
.definitions = &.{
"fgeab", "ca", "afcebg", "bdacfeg", "cfaedg", "gcfdb", "baec", "bfadeg", "bafgc", "acf",
},
.digits = &.{
"gebdcfa", "ecba", "ca", "fadegcb",
},
},
.{
.definitions = &.{
"dbcfg", "fgd", "bdegcaf", "fgec", "aegbdf", "ecdfab", "fbedc", "dacgb", "gdcebf", "gf",
},
.digits = &.{
"cefg", "dcbef", "fcge", "gbcadfe",
},
},
.{
.definitions = &.{
"bdfegc", "cbegaf", "gecbf", "dfcage", "bdacg", "ed", "bedf", "ced", "adcbefg", "gebcd",
},
.digits = &.{
"ed", "bcgafe", "cdgba", "cbgef",
},
},
.{
.definitions = &.{
"egadfb", "cdbfeg", "cegd", "fecab", "cgb", "gbdefca", "cg", "fgcdab", "egfdb", "bfceg",
},
.digits = &.{
"gbdfcae", "bgc", "cg", "cgb",
},
},
.{
.definitions = &.{
"gcafb", "gcf", "dcaebfg", "ecagb", "gf", "abcdeg", "gaef", "cafbge", "fdbac", "fegbdc",
},
.digits = &.{
"fgae", "cfgab", "fg", "bagce",
},
},
};
const expected: u32 = 61229;
std.testing.log_level = .debug;
var count: u32 = 0;
var result = try app.task2(std.testing.allocator, &input);
for (result) |r| {
count += r;
}
std.testing.allocator.free(result);
try std.testing.expect(count == expected);
}