Skip to content

Instantly share code, notes, and snippets.

View sciyoshi's full-sized avatar

Samuel Cormier-Iijima sciyoshi

View GitHub Profile
@sciyoshi
sciyoshi / esbuild-relay.js
Created February 19, 2021 16:34
Esbuild plugin for compiling relay queries
import { promises } from "fs";
import crypto from "crypto";
import path from "path";
import { print, parse } from "graphql";
const plugin = {
name: "relay",
setup: build => {
build.onLoad({ filter: /\.tsx$/, namespace: "" }, async args => {
let contents = await promises.readFile(args.path, "utf8");
BEGIN MESSAGE.
65hLapBEOn4NOxF egwcqIO20ortY0d na6S7EY81Qh8tCs QSLVmAVHIqqn3ad
h29hB5xx5GvRGgE aVFTWvLjWLkTCKq 6Xr2MZHgg6SdpCJ TM9zHVJotbsq3wI
lAtXO8mikSV1xga sUzGicn8NsMBiUU nTW4dABMOWXRxE1 nbIuenrRNb9lyhP
vCe0UMMbuselAJl g3V2jeGTpVJPxt6 UtPtN0Qz5Z.
END MESSAGE.
import numpy as np
from scipy.ndimage import convolve
lines = INPUT.splitlines()
alg = [i for i, c in enumerate(lines[0]) if c == "#"]
img = np.pad(np.array([[int(c == "#") for c in l] for l in lines[2:]]), ((50, 50), (50, 50)))
rot = np.array([[1, 2, 4], [8, 16, 32], [64, 128, 256]])
for i in range(50):
img = np.isin(convolve(img, rot, mode="constant", cval=i % 2), alg).astype(int)
def convert(l, d=0):
for i, e in enumerate(l):
if isinstance(e, list):
yield from convert(e, d + 1)
else:
yield (e, d)
def reduce(l):
c = list(l)
from utils import Pt, Grd
import math
grd = Grd()
for i, l in enumerate(LINES):
for j, c in enumerate(l):
grd[Pt(i, j)] = int(c)
def expand(pt):
@sciyoshi
sciyoshi / day20.py
Last active February 15, 2021 04:43
import functools
import operator
import itertools
import networkx
import numpy as np
tiles = {}
for tiledata in open("inputs/day20").read().strip().split("\n\n"):
a, *tilelines = tiledata.splitlines()
import collections
all_ingredients = collections.Counter()
possible_ingredients = collections.defaultdict(set)
for line in open("inputs/day21").read().splitlines():
ingredients, allergens = line.rstrip(")").split(" (contains ")
ingredients = ingredients.split()
allergens = allergens.split(", ")
all_ingredients.update(ingredients)
class ParseError(Exception):
pass
def parse_rule(alts):
def parse(inp):
for rule in alts:
s = inp
for el in rule:
try:
s = rules[el](s)
class a(int):
def __mul__(self, b):
return a(int(self) + b)
def __add__(self, b):
return a(int(self) + b)
def __sub__(self, b):
return a(int(self) * b)
def ev(expr, pt2=False):
expr = re.sub(r"(\d+)", r"a(\1)", expr)
@sciyoshi
sciyoshi / day17.py
Last active December 17, 2020 05:53
import numpy as np
from scipy.ndimage import convolve
LINES = open("inputs/day17").read().splitlines()
dims = 3 # 4 for part 2
steps = 6
front = 2 * steps + 1
filt = np.full((3,) * dims, 1)
filt[(1,) * dims] = 100