Skip to content

Instantly share code, notes, and snippets.

Mark Jenkins markjenkins

Block or report user

Report or block markjenkins

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
View d4p1.py
#!/usr/bin/env python3
# Solution to http://adventofcode.com/2016/day/4 part 1
# Mark Jenkins <mark@markjenkins.ca>
from sys import stdin
from collections import Counter
from itertools import islice
CHECKSUM_SIZE = 5
View d3p1.py
#!/usr/bin/env python3
# functional solution to http://adventofcode.com/2016/day/3 part 1
# Mark Jenkins <mark@markjenkins.ca>
from sys import stdin
def possible_triangle(args):
assert(len(args)==3)
sum_args = sum(args)
@markjenkins
markjenkins / d2p1.py
Created Dec 8, 2016
Solution to http://adventofcode.com/2016/day/2 using reduce and accumulate
View d2p1.py
#!/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 Dec 7, 2016
solution to https://adventofcode.com/2016/day/1 part 2, uses reduce(), nearly functional
View d1p2.py
#!/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 Dec 7, 2016
Functional solution to https://adventofcode.com/2016/day/1 part 1 with reduce() and lambda vs no lambda
View d1p1.py
#!/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}
View first_querry_by_ip.py
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)
View update_glicko2_csv.py
#!/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 Mar 22, 2016
peanut chess engine
View constants.py
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 Mar 22, 2016
ripple-validator-hognose
View account.py
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 Mar 15, 2016
simple arithmetic expression parser
View simple_arith.py
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),
You can’t perform that action at this time.