Exemple #1
0
 def __init__(self, filename):
     self.lines = readInput(filename)
     self.wrong = ["(]", "(}", "(>", "[)", "[}", "[>",
                   "{)", "{]", "{>", "<)", "<]", "<}"]
     self.good = ["()", "[]", "{}", "<>"]
     self.counter = [0, 0, 0, 0]
     self.scores = []
Exemple #2
0
 def __init__(self, filename):
     lines = readInput(filename)
     self.m = {}
     self.xlim = len(lines[0])
     self.ylim = len(lines)
     for y in range(len(lines)):
         for x in range(len(lines[0])):
             self.m[x, y] = Octopus(int(lines[y][x]))
     self.flashes = 0
Exemple #3
0
    def __init__(self, filename):
        vents = readInput(filename)

        self.segs = []
        for v in vents:
            v = v.split(" -> ")
            self.segs.append(
                Line(Coord(*map(int, v[0].split(","))),
                     Coord(*map(int, v[1].split(",")))))

        lim = self.findMax()
        self.field = np.zeros(shape=(lim + 1, lim + 1))
Exemple #4
0
from utils import readInput

lines = readInput("input_19.txt", True)

dir = (0, 1)
for y, l in enumerate(lines):
    x = l.find("|")
    if x != -1:
        start = (x, y)
        break

phrase = ""
count = 0
while True:
    start = (start[0] + dir[0], start[1] + dir[1])
    count += 1
    char = lines[start[1]][start[0]]
    if 65 <= ord(char) <= 90:
        phrase += char
    elif char == "+":
        if dir[0] == 0:
            if start[0] + 1 < len(lines[start[1]]) - 1 and lines[start[1]][
                    start[0] + 1] != " ":
                dir = (1, 0)
            elif start[0] - 1 >= 0 and lines[start[1]][start[0] - 1] != " ":
                dir = (-1, 0)
            else:
                break
        else:
            if start[1] + 1 < len(lines) - 1 and lines[start[1] +
                                                       1][start[0]] != " ":
Exemple #5
0
from utils import readInput
from collections import Counter

lines = readInput("input_6.txt")

words = ["" for _ in  range(len(lines[0]))]
for l in lines:
    for i in range(len(l)):
        words[i] += l[i]

msg = ""
for i in range(len(words)):
    d = Counter(words[i])
    #print (d)
    msg += max(d, key=d.get)

print ("🎄Part 1: {}".format(msg))
Exemple #6
0
 def __init__(self, filename):
     lines = readInput(filename)
     self.cm = np.zeros(shape=(len(lines[0]), len(lines)))
     for i, l in enumerate(lines):
         m = [int(c) for c in l]
         self.cm[:, i] = np.array(m)
Exemple #7
0
from utils import readInput


def search(s, idx=0, length=0):
    while idx < len(s):
        if s[idx] == "(":
            parc = s[idx:].find(")")
            decompression = list(map(int, s[idx + 1:idx + parc].split("x")))
            if "(" in s[idx + parc + 1:idx + parc + 1 + decompression[0]]:
                l = search(s[idx + parc + 1:idx + parc + 1 + decompression[0]],
                           0, 0)
                length += l * decompression[1]
            else:
                length += decompression[0] * decompression[1]
            idx += parc + decompression[0] + 1
        else:
            idx += 1
            length += 1
    return length


lines = readInput("input_9.txt")
p = search(lines[0])

print("�🎄Part 2: {}".format(p))
Exemple #8
0
from utils import readInput
import numpy as np

vents = readInput("input_5.txt")

vent_coords = []
for v in vents:
    v = v.split(" -> ")
    c1 = list(map(int, v[0].split(",")))
    c2 = list(map(int, v[1].split(",")))

    if (c1[0] < c2[0]):
        vent_coords.append([c1, c2])
    else:
        vent_coords.append([c2, c1])

xmin = min(min([v[0][0] for v in vent_coords], [v[1][0] for v in vent_coords]))
xmax = max(max([v[0][0] for v in vent_coords], [v[1][0] for v in vent_coords]))

ymin = min(min([v[0][1] for v in vent_coords], [v[1][1] for v in vent_coords]))
ymax = max(max([v[0][1] for v in vent_coords], [v[1][1] for v in vent_coords]))

lim = max(xmax, ymax)
vent_map = np.zeros(shape=(lim + 1, lim + 1))

n = 0
for c1, c2 in vent_coords:
    if c1[0] == c2[0]:
        dx = 0
    else:
        dx = 1
Exemple #9
0
from utils import readInput

#lines = readInput("input_4.txt")
lines = readInput("test.txt")

#print ("🎁🎄Part 2: {}".format())
Exemple #10
0
from utils import readInput, printMap
import numpy as np
from matplotlib import pyplot as plt

filename = "input_13.txt"
points = []
foldings = []

lines = readInput(filename)
for l in lines:
    if l.strip() == "":
        continue
    if "," in l:
        points.append(list(map(int, l.split(","))))
    elif "y" in l:
        foldings.append(("y", int(l.split("=")[-1])))
    elif "x" in l:
        foldings.append(("x", int(l.split("=")[-1])))

xmax = max([x[0] for x in points])+1
ymax = max([x[1] for x in points])+1
                        
cm = np.zeros(shape=(xmax, ymax))
for p in points:
    cm[p[0], p[1]] = 1
#printMap(cm)

for i, f in enumerate(foldings):
    if f[0] == "y":
        new_cm = cm[:, :f[1]]
        temp = np.flip(cm[:, f[1]+1:], 1)
Exemple #11
0
        if t == "oxy":
            if counts >= thrs:
                res = "1"
            else:
                res = "0"
        elif t == "co2":
            if counts >= thrs:
                res = "0"
            else:
                res = "1"
        rating += res

        tmp_tmp_lines = [l for l in tmp_lines if l[col] == res]
        tmp_lines = tmp_tmp_lines
        col += 1
    else:
        if len(rating) != len(lines[0]):
            rating += tmp_lines[0][len(rating):]
    return rating


import time
tstart = time.time()
lines = readInput("input_3.txt")
oxygen = ratingCalc(lines, "oxy")
scrubber = ratingCalc(lines, "co2")
res = int(scrubber, 2) * int(oxygen, 2)

print("🎄🎅 Part 2: ", res)
print(time.time() - tstart)
Exemple #12
0
            if args[0] == 'x' and val == -1:
                x = v[args[0]]
                if x >= 1 and x <= 9:
                    v['w'] = x
                    inputs[digit - 1] = x
                    val = x
                else:
                    return v, inputs
 
            v[args[0]] = 1 if v[args[0]] == val else 0
        else:
            raise Exception(f'Unknown cmd {cmd}')
    return v, inputs
 
 
prog = readInput('input_24.txt')
 
for i in product(range(9, 0, -1), repeat=7):
    full_input = [i[0], i[1], i[2], i[3], -1, -1, i[4], -1, i[5], -1, i[6], -1, -1, -1]
    res, inp = ALU(prog, full_input)

    if res['z'] == 0 and -1 not in inp:
        print ("🎄 Part 1: {}".format("".join([str(i) for i in inp])))
        break
 
for i in product(range(1, 10), repeat=7):
    full_input = [i[0], i[1], i[2], i[3], -1, -1, i[4], -1, i[5], -1, i[6], -1, -1, -1]
    res, inp = ALU(prog, full_input)
 
    if res['z'] == 0 and -1 not in inp:
        print ("🎄🎅 Part 2: {}".format("".join([str(i) for i in inp])))
Exemple #13
0
import re


def lookAba(s):
    a = []
    for i in range(len(s) - 2):
        if s[i] == s[i + 2] and s[i] != s[i + 1]:
            a.append(s[i:i + 3])
    if a == []:
        return None
    else:
        return a


r = re.compile(r"\w+")
lines = readInput("input_7.txt")

ipv7 = []
for l in lines:
    matches = r.findall(l)
    if matches:
        hasAba = []
        for im in range(0, len(matches), 2):
            aba = lookAba(matches[im])
            if aba is not None:
                hasAba += aba
        if len(hasAba) > 0:
            hasBab = 0
            for aba in hasAba:
                bab = aba[1] + aba[0] + aba[1]
                for im in range(1, len(matches), 2):
Exemple #14
0
            return []
        paths = []
        for vertex in graph[start]:
            insert = False
            if (vertex == cave and path.count(cave) < 2):
                insert = True
            if (vertex == vertex.lower() and vertex not in path):
                insert = True
            elif vertex != vertex.lower():
                insert = True
            if insert:
                extended_paths = self.find_all_paths2(cave, vertex, end, path)
                for p in extended_paths:
                    paths.append(p)
                    
        return paths

g = Graph()
edges = readInput("input_12.txt")
for edge in edges:
    e = edge.split("-")
    g.add_edge(e)

paths = g.find_all_paths("start", "end")
#print (p)
print ("🎄 Part 1: {}".format(len(paths)))

paths = g.find_special_paths("start", "end")
print ("🎄🎅 Part 2: {}".format(len(paths)))

from keras.layers.normalization import BatchNormalization
from keras.models import Model, Sequential
from keras.callbacks import EarlyStopping, ModelCheckpoint, ReduceLROnPlateau
from keras.preprocessing.image import ImageDataGenerator
from keras.applications.vgg16 import VGG16
from sklearn.model_selection import train_test_split
from utils import readInput, plotLoss, plotAccuracy, plotConfusionMatrix
import pickle

#  (0=Angry, 1=Disgust, 2=Fear, 3=Happy, 4=Sad, 5=Surprise, 6=Neutral).
class_labels = [
    'Angry', 'Disgust', 'Fear', 'Happy', 'Sad', 'Surprise', 'Neutral'
]

#### read input
x_total, y_total = readInput()
num_classes = np.shape(y_total)[1]
input_shape = (48, 48, 1)

#### normalize input feature to range -1..1
x_total = ((x_total / 255.0) - 0.5) * 2.0

#### IMPORTANT: VGG16 requires RGB input -> convert them
gray = np.reshape(x_total, (-1, 48, 48))
x_total = np.stack((gray, ) * 3, axis=-1)

### split train/valid/test data
x_train, x_test, y_train, y_test = train_test_split(x_total,
                                                    y_total,
                                                    test_size=0.2,
                                                    stratify=y_total,
Exemple #16
0
class Particle:
    def __init__(self, i, p, v, a):
        self.n = i
        self.p = np.array(p)
        self.a = np.array(a)
        self.v = np.array(v)

    def move(self):
        self.v += self.a
        self.p += self.v

    def distance(self):
        return abs(self.p[0]) + abs(self.p[1]) + abs(self.p[2])


lines = readInput("input_20.txt")
particles = []
for i, l in enumerate(lines):
    parts = l.split(">,")
    p = list(map(int, parts[0][3:].split(",")))
    v = list(map(int, parts[1][4:].split(",")))
    a = list(map(int, parts[2][4:-1].split(",")))
    particles.append(Particle(i, p, v, a))

min_dist = None
for t in range(1000):
    for p in particles:
        p.move()

    min_dist = min([p.distance() for p in particles])
    idx = [p.distance() for p in particles].index(min_dist)
Exemple #17
0
    return code, ID, checksum


def freq(s):
    f = {}
    for c in s:
        f[c] = f.setdefault(c, 0) + 1

    res = {
        val[0]: val[1]
        for val in sorted(f.items(), key=lambda x: (-x[1], x[0]))
    }
    checksum = "".join(res.keys())
    return res, checksum[:5]


rooms = readInput("input_4.txt")

real_rooms = []
for r in rooms:
    code, ID, checksum = decodeRoom(r)
    if freq(code)[1] == checksum:
        real_rooms.append(r)

for r in real_rooms:
    code, ID, checksum = decodeRoom(r)
    name = decypher(code, int(ID))
    if "north" in name:
        print("🎁🎄Part 2: {}-{}".format(name, ID))
        break
Exemple #18
0
from utils import readInput


def diff(a, b):
    res = a
    for char in a:
        if char in b:
            res = res.replace(char, '')
    return res


lines = readInput("input_8.txt")

codes = []
numbers = []
for l in lines:
    temp1, temp2 = l.split("|")
    codes.append(["".join(sorted(t)) for t in temp1[:-1].split(" ")])
    numbers.append(["".join(sorted(t)) for t in temp2[1:].split(" ")])

c = 0
for n in numbers:
    for d in n:
        if len(d) == 2 or len(d) == 4 or len(d) == 3 or len(d) == 7:
            c += 1

print("🎄 Part 1: {}".format(c))

grand_tot = 0
digit_map = {}
for nc, code in enumerate(codes):
Exemple #19
0
from utils import readInput


def sumInt(n):
    return n * (n + 1) // 2


timers = readInput("input_7.txt")
pos = list(map(int, timers[0].split(",")))

deltas = [
    sum([sumInt(abs(p - i)) for p in pos])
    for i in range(min(pos),
                   max(pos) + 1)
]
print("🎄🎅 Part 2: {}".format(min(deltas)))
Exemple #20
0
class Decoder:
    def __init__(self):
        self.decoded_msg = {}
        self.main_loop = True

#    def lv(self):
#        n = ""
#        while True:
#            pack = self.scroll(5)
#            n += pack[1:]
#            if pack[0] == "0":
#                break
#        return n
#
#

    def hexToBin(self, msg):
        binary = ""
        for c in msg:
            binary += bin(int(c, 16))[2:].zfill(4)
        return binary

    def scroll(self, req, offset, binary):
        return binary[offset:offset+req]

    def decode(self, msg):
        binary = self.hexToBin(msg)
        self.payload(binary)
        print (self.decoded_msg)

    def litteral(self, b):
        idx = 0
        n = ""
        while True:
            pack = b[idx:idx+5]
            n += pack[1:]
            idx += 5
            if pack[0] == "0":
                break
        print ("val:", int(n, 2))
        return idx

#    def skip(self, b, offset):
#        diff = 0
#        while True:
#            if offset == len(b):
#                self.main_loop = False
#                break
#            val = int(self.scroll(4, offset, b), 2)
#            if val == 0:
#                diff += 4
#                offset += diff
#            else:
#                break
#        return diff

    def payload(self, b, oper=False):
        print("total length:", len(b))
        offset = 0
        for ib in range(len(ib)):
        while True:
            if len(b) == 0:
                print ("PIPPO")
                break
            print ("a"+b[offset:]+"a")
            if offset % 4 != 0:
                diff = 4 - offset%4
                if "1" not in b[offset:offset+diff]:
                    offset += diff
            print (offset, len(b))
            print (b[offset:offset+4])
            while b[offset:] != "":
                if "1" not in b[offset:offset+4]:
                    offset += 4
                else:
                    break
            print (offset, len(b))
            
            print (b[offset:])
            if offset == len(b):
                break
            header = self.scroll(6, offset, b)
            version = int(header[:3], 2)
            id = int(header[3:6], 2)
            print (version, id)
            offset += 6
            if id == 4:
                self.decoded_msg.setdefault("LV", []).append((version, id))
                
                offset += self.litteral(b[offset:])
                #if not oper:
                #    offset += 4 - offset % 4
                #    offset += self.skip(b, offset)
                #    print (offset)
                #if offset == len(b):
                #    break
            else:
                typ = self.scroll(1, offset, b)
                offset += 1
                if typ == "0":
                    self.decoded_msg.setdefault("OP0", []).append((version, id))
                    print (self.decoded_msg)
                    length = int(self.scroll(15, offset, b), 2)
                    offset += 15
                    self.payload(b[offset:offset+length], True)
                    offset += length
                    print ("DOPO", b[offset:])
                    #
                    #offset += 4 - offset % 4
                    #offset += self.skip(b, offset)
                    #print (offset)
                    #if offset == len(b):
                    #    break
                elif typ == "1":
                    self.decoded_msg.setdefault("OP1", []).append((version, id))
                    npacks = int(self.scroll(11, offset, b), 2)
                    offset += 11
                    self.payload(b[offset:offset*11*npacks], True)
                    offset += 11*npacks
            if len(b) == 0:
                break

lines = readInput("test.txt")

d = Decoder()
for l in lines[0:2]:
    d.decode(l)
Exemple #21
0
from utils import readInput, printPath
import numpy as np
from heapdict import heapdict

scale = 5
lines = readInput("input_15.txt")
xmax = len(lines[0])
ymax = len(lines)

a = np.zeros(shape=(xmax, ymax))
for y in range(ymax):
    for x in range(xmax):
        a[(x, y)] = int(lines[y][x])

cavern = np.zeros(shape=(xmax * scale, ymax * scale))
s = 0
for x in range(0, scale):
    for y in range(0, scale):
        cavern[xmax * x:xmax * (1 + x), ymax * y:ymax * (1 + y)] = a + x + y
        s += 1

cavern[cavern > 9] = cavern[cavern > 9] % 9

xmax *= scale
ymax *= scale

start = (0, 0)
end = (xmax - 1, ymax - 1)
neighs = [(0, -1), (0, 1), (-1, 0), (1, 0)]
shortest = np.ones(shape=(xmax, ymax)) * -1
shortest[0, 0] = 0
Exemple #22
0
from imports import *
import utils
from desAndRes import designAndResponse
from priors import getPriors
from groupPredictors import groupPredictors
from miAndClr import mi, mixedCLR
from bayesianRegression import BBSR

utils.loadJob('default')
utils.loadJob(sys.argv[1])
pars = utils.getParams()
random.seed(pars['jobSeed'])

# Read in data
data = utils.readInput(
    pars['inputDir'], pars['expMatFile'], 
    pars['tfNamesFile'], pars['metaDataFile'], 
    pars['priorsFile'], pars['goldStandardFile'])

# Generate design and response matricies
desResp = designAndResponse(
    data['metaData'], data['expMat'], 
    pars['delTMin'], pars['delTMax'], pars['tau'])

# Generate priors
priors = getPriors(
    data['expMat'], data['tfNames'], 
    data['priorsMat'], data['gsMat'], 
    pars['evalOnSubset'], pars['jobSeed'], 
    pars['percTp'], pars['permTp'], 
    pars['percFp'], pars['permFp'], pars['prSelMode'])