From 6a9471388480adbe934474473bd28c3d921bf3d0 Mon Sep 17 00:00:00 2001 From: FrederikBaerentsen Date: Thu, 5 Dec 2024 23:13:04 +0100 Subject: [PATCH] Working on 2015/08 P1 --- 2015/07/solution.py | 26 +++++++++++++++++------ 2015/08/8.md | 51 +++++++++++++++++++++++++++++++++++++++++++++ 2015/08/solution.py | 43 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 114 insertions(+), 6 deletions(-) create mode 100644 2015/08/8.md create mode 100644 2015/08/solution.py diff --git a/2015/07/solution.py b/2015/07/solution.py index 5d2964d..8d8ce34 100644 --- a/2015/07/solution.py +++ b/2015/07/solution.py @@ -27,20 +27,24 @@ def parse(lst:str): t = get_re(r"^(.+) -> (.+)",lst) return convert_list(['SET',t.group(1),t.group(2)]) +def checkValue(x,values): + if x not in values and not isinstance(x, int): + return x + def v_return(x,values): if isinstance(x, str): if x not in values: - return 0 # the values is not 0 if it hasn't been used. + return # the values is not 0 if it hasn't been used. else: return values[x] return x if part == 1: + missing = [] instructions = loadFile(input_f) values = {} - for i in instructions: - t = parse(i) - #print(i) + + def parseValues(t): if t[0] == 'SET': values[t[2]] = v_return(t[1],values) elif t[0] == 'AND': @@ -53,8 +57,18 @@ if part == 1: values[t[3]] = v_return(t[1],values) >> v_return(t[2],values) elif t[0] == 'NOT': values[t[2]] = 65535-v_return(t[1],values) - #pprint(values) - #input() + + for i in instructions: + t = parse(i) + print(t) + if isinstance(t[1], str) or isinstance(t[2], str): + if checkValue(t[1],values) is not None or checkValue(t[2],values) is not None: + missing.append(t) + else: + parseValues(t) + print(values) + print(missing) + #input() pprint(values['a']) diff --git a/2015/08/8.md b/2015/08/8.md new file mode 100644 index 0000000..eb5e7fd --- /dev/null +++ b/2015/08/8.md @@ -0,0 +1,51 @@ +## \-\-- Day 8: Matchsticks \-\-- + +Space on the sleigh is limited this year, and so Santa will be bringing +his list as a digital copy. He needs to know how much space it will take +up when stored. + +It is common in many programming languages to provide a way to +escape +special characters in strings. For example, +[C](https://en.wikipedia.org/wiki/Escape_sequences_in_C), +[JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String), +[Perl](http://perldoc.perl.org/perlop.html#Quote-and-Quote-like-Operators), +[Python](https://docs.python.org/2.0/ref/strings.html), and even +[PHP](http://php.net/manual/en/language.types.string.php#language.types.string.syntax.double) +handle special characters in very similar ways. + +However, it is important to realize the difference between the number of +characters *in the code representation of the string literal* and the +number of characters *in the in-memory string itself*. + +For example: + +- `""` is `2` characters of code (the two double quotes), but the + string contains zero characters. +- `"abc"` is `5` characters of code, but `3` characters in the string + data. +- `"aaa\"aaa"` is `10` characters of code, but the string itself + contains six \"a\" characters and a single, escaped quote character, + for a total of `7` characters in the string data. +- `"\x27"` is `6` characters of code, but the string itself contains + just one - an apostrophe (`'`), escaped using hexadecimal notation. + +Santa\'s list is a file that contains many double-quoted string +literals, one on each line. The only escape sequences used are `\\` +(which represents a single backslash), `\"` (which represents a lone +double-quote character), and `\x` plus two hexadecimal characters (which +represents a single character with that ASCII code). + +Disregarding the whitespace in the file, what is *the number of +characters of code for string literals* minus *the number of characters +in memory for the values of the strings* in total for the entire file? + +For example, given the four strings above, the total number of +characters of string code (`2 + 5 + 10 + 6 = 23`) minus the total number +of characters in memory for string values (`0 + 3 + 7 + 1 = 11`) is +`23 - 11 = 12`. + +To begin, [get your puzzle input](8/input). + +Answer: + diff --git a/2015/08/solution.py b/2015/08/solution.py new file mode 100644 index 0000000..f995030 --- /dev/null +++ b/2015/08/solution.py @@ -0,0 +1,43 @@ +#!/bin/python3 +import sys,re +from pprint import pprint +sys.path.insert(0, '../../') +from fred import list2int,get_re,nprint,lprint,loadFile + +input_f = 'test' + +part = 1 +######################################### +# # +# Part 1 # +# # +######################################### + +def parse(line): + line = get_re(r'^"(.*)"$',line) + tmp = line + + +if part == 1: + instructions = loadFile(input_f) + + char = 0 + total = 0 + for i in instructions: + total += len(i) + print(i) + + print(total) + + + + + + +######################################### +# # +# Part 2 # +# # +######################################### +if part == 2: + exit()