Skip to content

Instantly share code, notes, and snippets.

View alexbowe's full-sized avatar
👁️‍🗨️

Alex Bowe alexbowe

👁️‍🗨️
View GitHub Profile
@alexbowe
alexbowe / tree_iterators.py
Last active July 5, 2023 23:41
Method to simplify many programming interview tree questions.
'''
Interview hack: Memorize preorder/inorder/postorder tree ITERATORS (no recursion) and their reverses.
It simplifies a disproportionate number of questions to simple for loops (see below).
I consider the implementations below the simplest way to memorize the iterative tree traversal algorithms,
because they are so similar to each other, and to their respective recursive versions.
Notes:
- We only visit a node after we have expanded its children (i.e. added them to the stack) in the desired order.
- `x is curr` does the expanded flagging for us, because we always expand the current node.
@alexbowe
alexbowe / get_readwise_data.py
Last active February 23, 2023 23:48
Get Readwise Highlights
import requests
READWISE_API_KEY = "" # Go to readwise.io/access_token
def get_readwise_data():
next_page = None
while True:
# See https://readwise.io/api_deets for more info
response = requests.get(
url="https://readwise.io/api/v2/export/",
@alexbowe
alexbowe / nltk-intro.py
Created March 21, 2011 12:59
Demonstration of extracting key phrases with NLTK in Python
import nltk
text = """The Buddha, the Godhead, resides quite as comfortably in the circuits of a digital
computer or the gears of a cycle transmission as he does at the top of a mountain
or in the petals of a flower. To think otherwise is to demean the Buddha...which is
to demean oneself."""
# Used when tokenizing words
sentence_re = r'''(?x) # set flag to allow verbose regexps
([A-Z])(\.[A-Z])+\.? # abbreviations, e.g. U.S.A.
@alexbowe
alexbowe / streams.py
Created April 23, 2011 19:03
Lazy functional style streams for Python
null_stream = (None, None)
def map(f, stream):
if stream is null_stream: return null_stream
return (f(head(stream)), lambda: map(f, tail(stream)))
def reduce(f, result, stream):
if stream is null_stream: return result
return reduce(f, f(result, head(stream)), tail(stream))
@alexbowe
alexbowe / keybase.md
Created March 23, 2021 07:21
Keybase Verification

Keybase proof

I hereby claim:

  • I am alexbowe on github.
  • I am alexbowe (https://keybase.io/alexbowe) on keybase.
  • I have a public key ASASPBNsdnHoE-uJo2gxeVYU0sQsQnIAEG3CBPQVNtz4zgo

To claim this, I am signing this object:

@alexbowe
alexbowe / tweet_finder.py
Last active May 17, 2017 12:12
Find the Nth Tweet from your Twitter archive .csv file
# To run, from shell type: python tweet_finder.py
# Must be run in the same directory as the downloaded csv file.
import csv
# Modify this number if you want a different nth Tweet
# Should be 1-based (i.e. first tweet is the 1th, not 0th)
num = 40000
# Change the path if you want to run it from a different directory
path = "tweets.csv"
@alexbowe
alexbowe / 750kotoba.html
Created January 11, 2014 03:31
Example of using TinySegmenter.js to tokenize Japanese and provide the word count of the input from a textbox.
<!DOCTYPE html>
<html>
<head>
<!-- http://chasen.org/~taku/software/TinySegmenter/ -->
<script type="text/javascript" src="tiny_segmenter.js" charset="UTF-8"></script>
<script>
var segmenter = new TinySegmenter();
function countWords() {
s = document.getElementById("inputText").value;
@alexbowe
alexbowe / int_mapper_one_liner.py
Created August 17, 2013 00:50
A shorthand way to get a unique integer mapper in Python
# here is a tidy way to get a hashable object (such as a word) to map to a unique int in python
from collections import defaultdict
mapper = defaultdict(lambda: len(mapper))
mapper["hello"] # 0
mapper["world"] # 1
mapper["and"] # 2
mapper["hello"] # 0
mapper["alex"] # 3
@alexbowe
alexbowe / funky_typedef.c
Last active December 20, 2015 15:19
C function pointer typedef example (for nicer variable declarations).
/*
I have read a bunch of posts about function pointers,
such as http://denniskubes.com/2013/03/22/basics-of-function-pointers-in-c/
but I rarely see this *one weird trick*.
It is C's (admittedly clunky) syntax for typedefing a function pointer of a given signiature.
Hide the clunkiness in the typedef to keep your code tidy and maintainable.
*/
#include <stdio.h>
@alexbowe
alexbowe / composite_rank.py
Created July 28, 2011 07:17
Ranks k-composites that sum to n
def gam_to_lam(c, n):
i, m = 0, 0
L = [0] * n
while 1:
i = i+1
if c[i-1] > 0:
for j in range(1, c[i-1] + 1):
m = m + 1
L[m-1] = i