From 106acbaf32c38e75cb1ef32468d5abd6972ee7cb Mon Sep 17 00:00:00 2001 From: Peter Resch Date: Sun, 8 Jan 2023 15:01:33 -0600 Subject: [PATCH] day 14 --- aoc2020/README.md | 8 +++---- aoc2020/lib/aoc2020.dart | 2 ++ aoc2020/lib/aoc20201214.dart | 46 ++++++++++++++++++++++++++++++++++++ aoc2020/pubspec.yaml | 2 +- 4 files changed, 53 insertions(+), 5 deletions(-) diff --git a/aoc2020/README.md b/aoc2020/README.md index af388e5..617f64a 100644 --- a/aoc2020/README.md +++ b/aoc2020/README.md @@ -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 diff --git a/aoc2020/lib/aoc2020.dart b/aoc2020/lib/aoc2020.dart index af7a6a4..2efb797 100644 --- a/aoc2020/lib/aoc2020.dart +++ b/aoc2020/lib/aoc2020.dart @@ -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 { diff --git a/aoc2020/lib/aoc20201214.dart b/aoc2020/lib/aoc20201214.dart index cb817ad..696179e 100644 --- a/aoc2020/lib/aoc20201214.dart +++ b/aoc2020/lib/aoc20201214.dart @@ -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 = []; + var rawMask = ''; + Tuple2 mask; + var mem = {}; + + 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(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 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 diff --git a/aoc2020/pubspec.yaml b/aoc2020/pubspec.yaml index ed8abae..a23599e 100644 --- a/aoc2020/pubspec.yaml +++ b/aoc2020/pubspec.yaml @@ -9,7 +9,7 @@ environment: dependencies: tuple: ^1.0.3 -# path: ^1.6.0 + any_base: dev_dependencies: pedantic: ^1.7.0