Skip to content

Instantly share code, notes, and snippets.

View shayelkin's full-sized avatar

Shay Elkin shayelkin

View GitHub Profile
@shayelkin
shayelkin / thumbtack-golf.py
Last active August 23, 2020 20:24
11 lines solution for https://www.thumbtack.com/engineering/pycon-2015/, based on https://gist.github.com/shayelkin/2397850f9b2c3df7e3aa (please excuse the golfing, I'm aiming for length)
import operator, itertools
def inspiration(*nums):
assert all(isinstance(x, int) and x > 0 for x in nums), "a deck of cards contains only integers"
ops = {operator.add: '+', operator.sub: '-', operator.mul: '*', operator.div: '/'}
possibilities = {reduce(lambda v, t: t[0](v,t[1]), zip(o, n[1:]), n[0]): (n, o) \
for n in itertools.permutations(nums[:-1]) for o in itertools.product(ops.keys(), repeat=len(nums)-2)}
try:
result_nums, result_ops = possibilities[nums[-1]]
return ' '.join('%s %s' % x for x in zip(result_nums, (ops[o] for o in result_ops))) + ' %s' % str(result_nums[-1])
except KeyError:
@shayelkin
shayelkin / tornado_delay.py
Created June 24, 2015 18:54
Tornado sever that responds after a given delay
import logging
import tornado.web
import tornado.ioloop
from tornado.options import options, define, parse_command_line
define('port', default=8888, type=int, metavar='PORT', help='port to listen on')
define('timeout', default=20.0, type=float, metavar='SECONDS', help='number of seconds to timeout calls after')
class MainHandler(tornado.web.RequestHandler):
@shayelkin
shayelkin / private.xml
Last active August 29, 2015 14:04
Karabiner config: switch langauge with Option(Alt)+Shift
<?xml version="1.0"?>
<root>
<vkchangeinputsourcedef>
<name>KeyCode::VK_CHANGE_INPUTSOURCE_HEBREW</name>
<languagecode>he</languagecode>
<inputsourceid_equal>org.unknown.keylayout.Hebrew</inputsourceid_equal>
</vkchangeinputsourcedef>
<item>
<name>Option+Shift to switch between English and Hebrew</name>
// ==UserScript==
// @name Event Merge for Google Calendar™ (by @imightbeAmy. Thanks!)
// @namespace gcal-multical-event-merge
// @include https://www.google.com/calendar/*
// @include http://www.google.com/calendar/*
// @require https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @version 1
// @grant none
// ==/UserScript==
@shayelkin
shayelkin / gist:2397850f9b2c3df7e3aa
Last active August 29, 2015 14:01
What is the smallest natural number that can not be generated using the numbers 1,2,3,4 (exactly once each) and four basic arithmetic operations?
import operator
from sys import maxint
from itertools import permutations, product
ops = [operator.add, operator.sub, operator.mul, operator.div]
possibilities = set(reduce(lambda v, t: t[0](v,t[1]), zip(o, n[1:]), n[0]) for n in permutations(range(1,5)) for o in product(ops, repeat=3))
# Without repeating operators:
# possibilities = set(reduce(lambda v, t: t[0](v,t[1]), zip(o, n[1:]), n[0]) for n in permutations(range(1,5)) for o in permutations(ops, repeat=3))
class BooleanFunctor:
"""
A neat trick: this can be used in conditions, where it returns the value of b,
or as a decorator, where it returns the decorated function if b, or a lambda returning
falseValue otherwise.
>>> if BooleanFunctor(cond):
... # only if cond is true
... pass
@shayelkin
shayelkin / hnrobot.py
Created November 18, 2013 10:00
Twitter bot that does disassociate press from Hacker News
# -*- coding: utf-8 -*-
# <nbformat>3.0</nbformat>
# <codecell>
from urllib2 import urlopen
import json
@shayelkin
shayelkin / set-bing-wallpaper.rb
Created October 31, 2013 20:26
Download and set the current Bing wallpaper as GNOME wallpaper
#!/usr/bin/env ruby
OUT_FILE = "#{ENV['HOME']}/Pictures/BingWallpaper.jpg"
require 'open-uri'
f = open('http://www.bing.com/HPImageArchive.aspx?format=xml&idx=1&n=1&mkt=en-US')
s = f.read
img_base = s.match('<urlBase>(.*)</urlBase>').captures[0]
img_url = 'http://www.bing.com/' + img_base + '_1920x1200.jpg'
@shayelkin
shayelkin / take-random.sh
Created October 29, 2013 10:05
Outputs N random lines from stdin.
#!/bin/sh
#
# Outputs $1 random lines from stdin.
# Sample usage: cat src_file | sort -R | head -n 100
sort -R | head -n $1
@shayelkin
shayelkin / 10bis.rb
Last active December 26, 2015 00:39
Prints 10Bis pending orders
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
TENBIS_ID = 'xxx' # Get this value by inspecting the AJAX request
NOTIFY_EXPIRE = '30000'
require 'open-uri'
require 'json'