Skip to content

Instantly share code, notes, and snippets.

@deanbot
Last active December 7, 2020 14:49
Show Gist options
  • Save deanbot/06076c333774ff3f4c8756897ea32599 to your computer and use it in GitHub Desktop.
Save deanbot/06076c333774ff3f4c8756897ea32599 to your computer and use it in GitHub Desktop.
Advent Of Code 2020 Day 6 in dart
void main() {
int i = 0;
final List<Object> solutions = [
SolutionA(),
SolutionB()
];
solutions.forEach((s) => print(s.toString()));
}
// Full inputs at https://adventofcode.com/2020/day/6/input
const inputsDay6 = """abc
a
b
c
ab
ac
a
a
a
a
b""";
List<Group> _parseInputs(String inputs) => inputs
.split('\n\n')
.where((element) => element.isNotEmpty)
.map<Group>((e) => Group.fromString(e))
.toList();
List<Group> _inputs = _parseInputs(inputsDay6);
// custom declarations form group
class Group {
final List<String> uniqueAnswers;
final List<String> unionAnswers;
Group.fromString(String input)
// flatten and remove duplicates
: uniqueAnswers =
input.split('\n').expand((e) => e.split('')).toSet().toList(),
// convert to sets of letters and reduce via intersection
unionAnswers = input
.split('\n')
.map((e) => e.split('').toSet())
.reduce((value, element) => value.intersection(element))
.toList();
}
abstract class AdventSolution {
final int day;
final String name;
AdventSolution(this.day, this.name);
String get solution => getSolution();
// implement in subclass
String getSolution();
@override
String toString() {
return "Advent Of Code, "
"Day $day "
"${name.isNotEmpty ? name : ''} "
"solution: $solution";
}
}
abstract class _Day6Solution extends AdventSolution {
_Day6Solution(name) : super(6, name);
}
class SolutionA extends _Day6Solution {
SolutionA() : super('A');
String getSolution() {
return _inputs
.map<int>((e) => e.uniqueAnswers.length)
.fold(0, (previousValue, e) => previousValue + e)
.toString();
}
}
class SolutionB extends _Day6Solution {
SolutionB() : super('B');
String getSolution() {
return _inputs
.map<int>((e) => e.unionAnswers.length)
.fold(0, (previousValue, e) => previousValue + e)
.toString();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment