Skip to content

Instantly share code, notes, and snippets.

@hughdbrown
hughdbrown / trie.py
Created May 2, 2023 16:21
A class for looking up words
from collections import defaultdict
def trie():
return defaultdict(trie)
class Trie(object):
TERMINATOR = "<END>"
def __init__(self):
self.t = trie()
def insert_word(self, word):
@hughdbrown
hughdbrown / count_living_per_year_perf.py
Last active April 20, 2023 12:51 — forked from dorianturba/count_living_per_year_perf.py
Count how many people are alive per year, based on their birthyear and deathyear, aims for performances.
#!/usr/bin/env python3
import collections
import itertools
import random
import sys
import timeit
pop = [
(b := random.randint(1900, 2000), random.randint(b + 1, b + 100))
@hughdbrown
hughdbrown / vectorize_benchmark.py
Last active March 17, 2023 17:56
Test of numpy.vectorized function versus pandas.apply
#!/usr/bin/env python3
# Validation of code in Mewdium article:
# https://medium.com/the-modern-scientist/make-pandas-code-120x-faster-a-forbidden-mathematical-jutsu-87103030eb9c
import timeit
import pandas as pd
import numpy as np
sizes = [1_000, 10_000, 100_000, 1_000_000]
#!/usr/bin/env python3
from collections import deque
def possible(pos, legal_pos):
r, c = pos
can = {
(r + 2, c - 1), (r + 2, c + 1),
(r + 1, c - 2), (r + 1, c + 2),
(r - 1, c - 2), (r - 1, c + 2),
(r - 2, c - 1), (r - 2, c + 1)
@hughdbrown
hughdbrown / twenty.py
Last active March 30, 2022 12:48
Calculate and score all possible answers for twentyletters.com puzzle
Sample output
~/twenty.py preventionthionalist
process dictionary 0:00:00.057675
lookup tables 0:00:00.354845
search solutions 0:00:00.004037
[(304, 'trephinations', 'violent'),
(304, 'interventional', 'pithos'),
(304, 'interpolative', 'tonnish'),
(292, 'trephination', 'violents'),
@hughdbrown
hughdbrown / elisabethirgens.py
Last active December 23, 2021 17:48
Alternative sum of list of dictionaries
# O(n) alternative to:
# https://elisabethirgens.github.io/notes/2021/12/step-away/
from collections import defaultdict
mylist = [
{'thing': 'A', 'count': 4},
{'thing': 'B', 'count': 2},
{'thing': 'A', 'count': 6},
]
@hughdbrown
hughdbrown / email-gen.py
Last active November 26, 2021 17:17
Given a first name and last name and domain, generate probable permutations for email address
#!/usr/bin/env python3
import click
@click.command()
@click.option('--first')
@click.option('--last')
@click.option('--domain')
@click.option('--middle', default=None)
def main(first, last, domain, middle):
@hughdbrown
hughdbrown / count_stable_particles.py
Last active September 1, 2021 02:47
Come sort of code challenge
from itertools import groupby
def cumulative(arr):
return [arr[i] - arr[i - 1] for i in range(1, len(arr))]
def stable_particle(arr):
"""
>>> stable_particle([-1, 1, 3, 3, 3, 2, 3, 2, 1, 0])
5
@hughdbrown
hughdbrown / so_read_url_write_file.py
Created October 7, 2015 16:02
Read from URL, write to file
"""
Code to write data read from a URL to a file
Based on an answer on SO:
http://stackoverflow.com/questions/22676/how-do-i-download-a-file-over-http-using-python/22721
"""
import urllib2
mp3file = urllib2.urlopen("http://www.example.com/songs/mp3.mp3")
@hughdbrown
hughdbrown / swing.py
Created November 4, 2020 04:13
2020 presidential election
AZ: (0.3804329085751007, 0.6195670914248993, 332493.15068493155, 541493.1506849315, -209000.00000000003)
FL: (0.6779600278494492, 0.3220399721505508, 727637.3626373624, 345637.36263736244, 381999.99999999994)
GA: (0.5798898071625344, 0.42011019283746565, 1219448.2758620693, 883448.2758620695, 335999.99999999977)
IA: (0.43084455324357407, 0.5691554467564259, 352000.0, 465000.0, -112999.99999999997)
MI: (0.5424654351109562, 0.45753456488904376, 1628720.9302325586, 1373720.9302325582, 255000.0000000003)
NC: (0.6079855936413314, 0.3920144063586686, 208319.14893617015, 134319.14893617015, 74000.00000000003)
OH: (0.6330845907837039, 0.36691540921629606, 711172.8395061726, 412172.8395061726, 299000.0)
PA: (0.5496743418035043, 0.4503256581964957, 1997333.333333333, 1636333.333333333, 361000.0)
TX: (0.5517922189231381, 0.4482077810768619, 2002944.444444445, 1626944.444444445, 375999.99999999994)
WI: (0.5267461143892939, 0.47325388561070614, 718842.105263158, 645842.105263158, 73000.00000000007)