master
Peter Resch 3 years ago
parent 47137deb51
commit 106acbaf32

@ -1,4 +1,4 @@
A sample command-line application. Advent of Code 2020
Written in Dart
Created from templates made available by Stagehand under a BSD-style to execute:
[license](https://github.com/dart-lang/stagehand/blob/master/LICENSE). dart run bin\main.dart --no-testOnly

@ -11,6 +11,7 @@ import 'package:aoc2020/aoc20201210.dart';
import 'package:aoc2020/aoc20201211.dart'; import 'package:aoc2020/aoc20201211.dart';
import 'package:aoc2020/aoc20201212.dart'; import 'package:aoc2020/aoc20201212.dart';
import 'package:aoc2020/aoc20201213.dart'; import 'package:aoc2020/aoc20201213.dart';
import 'package:aoc2020/aoc20201214.dart';
import 'package:aoc2020/aocbase.dart'; import 'package:aoc2020/aocbase.dart';
import 'dart:mirrors'; import 'dart:mirrors';
@ -34,6 +35,7 @@ class aoc2020 {
AOC20201211(), AOC20201211(),
AOC20201212(), AOC20201212(),
AOC20201213(), AOC20201213(),
AOC20201214(),
]; ];
static void list() async { static void list() async {

@ -1,16 +1,62 @@
import 'package:any_base/any_base.dart';
import 'package:aoc2020/aocbase.dart'; import 'package:aoc2020/aocbase.dart';
import 'package:aoc2020/model/readdata.dart'; import 'package:aoc2020/model/readdata.dart';
import 'package:tuple/tuple.dart';
class AOC20201214 extends AOCBase { class AOC20201214 extends AOCBase {
var mylist = <String>[]; var mylist = <String>[];
var rawMask = '';
Tuple2<int, int> mask;
var mem = <int, int>{};
static const max = 274877906943;
static const dec2bin = AnyBase(AnyBase.dec, AnyBase.bin);
static const bin2dec = AnyBase(AnyBase.bin, AnyBase.dec);
void init(bool test) async { void init(bool test) async {
mylist = await ReadData.readFile<String>(classString, test: test); mylist = await ReadData.readFile<String>(classString, test: test);
} }
void setMem(int address, int val) => mem[address] = applyMask(val);
int applyMask(int val) => (val | mask.item1) & mask.item2;
void setMask(String _rawMask) {
rawMask = _rawMask;
var _orMask = int.parse(bin2dec.convert(_rawMask.replaceAll('X', '0')));
var _andMask = int.parse(bin2dec.convert(_rawMask.replaceAll('X', '1')));
mask = Tuple2(_orMask, _andMask);
}
void setMaskSection2(String _rawMask) {
// find all 'X's
// find position of all X's
// binarily cycle through all binary numbers posible make a list of masks
}
int applyMaskSection2(int val) => (val | mask.item1) & mask.item2;
void setMemSection2(int address, int val) {
mem[address] = applyMask(val);
}
@override @override
Future<void> a({bool test}) async { Future<void> a({bool test}) async {
await init(test); await init(test);
mem.clear();
for (var line in mylist) {
var split1 = line.split(' = ');
var cmd = split1[0];
var val = split1[1];
if (cmd == 'mask') {
setMask(val);
} else {
var address = int.parse(cmd.split('[')[1].split(']')[0]);
var value = int.parse(val);
setMem(address, value);
}
}
answerA = mem.values.reduce((a,b) => a + b);
} }
@override @override

@ -9,7 +9,7 @@ environment:
dependencies: dependencies:
tuple: ^1.0.3 tuple: ^1.0.3
# path: ^1.6.0 any_base:
dev_dependencies: dev_dependencies:
pedantic: ^1.7.0 pedantic: ^1.7.0

Loading…
Cancel
Save