Skip to content

Instantly share code, notes, and snippets.

View sciyoshi's full-sized avatar

Samuel Cormier-Iijima sciyoshi

View GitHub Profile
@sciyoshi
sciyoshi / patchclean.py
Created April 14, 2025 16:41
Removes blank line removals from a patch
#!/usr/bin/env python3
"""
patchclean.py - Process a patch file to handle blank line removals.
This script reads a patch file from stdin, processes it to convert blank line
removals (single "-" lines) to context lines (" "), and updates line numbers
in hunk headers accordingly. It also removes hunks that no longer have changes
and files that no longer have any modification hunks.
Special handling is added for deleted files to preserve their patch structure.
@sciyoshi
sciyoshi / outline-mcp.py
Created March 21, 2025 15:52
Outline MCP
# /// script
# dependencies = [
# "mcp",
# "httpx",
# "dotenv",
# ]
# ///
import os
from typing import Any
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 / 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");
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)
@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()
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)