day 14
This commit is contained in:
+4
-4
@@ -1,4 +1,4 @@
|
||||
A sample command-line application.
|
||||
|
||||
Created from templates made available by Stagehand under a BSD-style
|
||||
[license](https://github.com/dart-lang/stagehand/blob/master/LICENSE).
|
||||
Advent of Code 2020
|
||||
Written in Dart
|
||||
to execute:
|
||||
dart run bin\main.dart --no-testOnly
|
||||
|
||||
@@ -11,6 +11,7 @@ import 'package:aoc2020/aoc20201210.dart';
|
||||
import 'package:aoc2020/aoc20201211.dart';
|
||||
import 'package:aoc2020/aoc20201212.dart';
|
||||
import 'package:aoc2020/aoc20201213.dart';
|
||||
import 'package:aoc2020/aoc20201214.dart';
|
||||
import 'package:aoc2020/aocbase.dart';
|
||||
import 'dart:mirrors';
|
||||
|
||||
@@ -34,6 +35,7 @@ class aoc2020 {
|
||||
AOC20201211(),
|
||||
AOC20201212(),
|
||||
AOC20201213(),
|
||||
AOC20201214(),
|
||||
];
|
||||
|
||||
static void list() async {
|
||||
|
||||
@@ -1,16 +1,62 @@
|
||||
import 'package:any_base/any_base.dart';
|
||||
import 'package:aoc2020/aocbase.dart';
|
||||
import 'package:aoc2020/model/readdata.dart';
|
||||
import 'package:tuple/tuple.dart';
|
||||
|
||||
class AOC20201214 extends AOCBase {
|
||||
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 {
|
||||
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
|
||||
Future<void> a({bool test}) async {
|
||||
|
||||
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
|
||||
|
||||
@@ -9,7 +9,7 @@ environment:
|
||||
|
||||
dependencies:
|
||||
tuple: ^1.0.3
|
||||
# path: ^1.6.0
|
||||
any_base:
|
||||
|
||||
dev_dependencies:
|
||||
pedantic: ^1.7.0
|
||||
|
||||
Reference in New Issue
Block a user