Last active
December 7, 2020 14:49
Advent Of Code 2020 Day 6 in dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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