Skip to content

Instantly share code, notes, and snippets.

@markjenkins
markjenkins / d2p1.py
Created December 8, 2016 08:36
Solution to http://adventofcode.com/2016/day/2 using reduce and accumulate
#!/usr/bin/env python3
# Solution to http://adventofcode.com/2016/day/2 part 1
# using reduce and accumulate for awesome functional programing style points
# Mark Jenkins <mark@markjenkins.ca>
from sys import stdin
from functools import reduce
from itertools import chain, accumulate, islice
@markjenkins
markjenkins / d1p2.py
Last active December 7, 2016 07:05
solution to https://adventofcode.com/2016/day/1 part 2, uses reduce(), nearly functional
#!/usr/bin/env python3
# solution to https://adventofcode.com/2016/day/1 part 2
# in a functional style with python 3.3+ enhanced accumulate() and dropwhile()
# Mark Jenkins <mark@markjenkins.ca>
from itertools import accumulate, dropwhile, chain
MOVEMENTS = ((0,1), (1,0), (0,-1), (-1,0))
DIRECTION_CHANGES = {"R": 1, "L": -1}
@markjenkins
markjenkins / d1p1.py
Created December 7, 2016 05:02
Functional solution to https://adventofcode.com/2016/day/1 part 1 with reduce() and lambda vs no lambda
#!/usr/bin/env python3
# Functional solution to https://adventofcode.com/2016/day/1 part 1
# with reduce() and lambda vs no lambda
# Mark Jenkins <mark@markjenkins.ca>
from functools import reduce
MOVEMENTS = ((0,1), (1,0), (0,-1), (-1,0))
DIRECTION_CHANGES = {"R": 1, "L": -1}
from sys import argv
# tab separated input from processing apache logs with awk to just have relevant fields and tab separation
ips = set()
with file(argv[1]) as f:
for line in f:
ip, date, url = line.split('\t')
if ip not in ips:
print "%s\t%s" % (ip, date)
#!/usr/bin/env python
# coding=UTF8
"""
Copyright (c) 2014 Rudolf Rocker Chess Club
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
@markjenkins
markjenkins / constants.py
Created March 22, 2016 17:32
peanut chess engine
BOARD_SIZE = 8
FIRST_RANK = 1
LAST_RANK = BOARD_SIZE
PAWN_START = 2
KING_START_FILE = 5
KNIGHT, KING, BISHOP, ROOK, QUEEN, PAWN = (
'N', 'K', 'B', 'R', 'Q', 'P'
@markjenkins
markjenkins / account.py
Last active March 22, 2016 17:27
ripple-validator-hognose
from .base58 import ripple_base58_decode, ripple_base58_encode
from .util import binary_encode_variable_data
from .crypto import double_sha256_checksum
ACCOUNT_NUM_BITS = 160
ACCOUNT_NUM_BYTES = 20
def extract_checksum(account_msg):
return account_msg[-4:]
@markjenkins
markjenkins / simple_arith.py
Created March 15, 2016 17:32
simple arithmetic expression parser
from pyparsing import Word, alphas, oneOf, operatorPrecedence, opAssoc
operand = Word(alphas)
signop = oneOf('+ -')
multop = oneOf('* /')
plusop = oneOf('+ -')
ARITH_EXPR = operatorPrecedence( operand,
[(signop, 1, opAssoc.RIGHT),
# Makefile
ZONE_LIST=zone_list_file
ZONE_FILE_SUFFIX=".db"
all: zone_list.zones internal_zone_list.zones
zone_list.zones: $(ZONE_LIST) Makefile
./make_zone_list --prefix "/etc/bind/" \
--suffix $(ZONE_FILE_SUFFIX) $^ > $@
@markjenkins
markjenkins / fibonacci_reduce.py
Created March 15, 2016 16:52
iterative, functional definition of the fibonacci sequence using reduce()
#!/usr/bin/evn python
# An iterative, functional definition of the fibonacci sequence using reduce()
# This is how I originally wrote this.
# map is going to be removed from the builtin namespace. So the newer
# version below doesn't use them.
#
# Advocates for removing lambda would consider this to be a good example
# of why it should be removed.