Skip to content

Instantly share code, notes, and snippets.

View gsinclair's full-sized avatar

Gavin Sinclair gsinclair

  • Sydney, Australia
View GitHub Profile
Name,Sex,Age,Height (in),Weight (lbs)
Alex,M,41,74,170
Bert,M,42,68,166
Carl,M,32,70,155
Dave,M,39,72,167
Elly,F,30,66,124
Fran,F,33,66,115
Gwen,F,26,64,121
Hank,M,30,71,158
Ivan,M,53,72,175
# We read the data as just an array of words. No need for line-by-line, although
# that is fine as well.
def test_data_09():
return open("data/09.1.txt").read().split()
def real_data_09():
return open("data/09.txt").read().split()
D = test_data_09()
;; Problem 13 from Advent of Code 2021 -- origami
(defn fold-left [fold-x [x y :as point]]
(if (< x fold-x)
point
[(- (* 2 fold-x) x) y]))
(defn fold-up [fold-y [x y :as point]]
(if (< y fold-y)
point

Karabiner layouts for symbols and navigation

Gavin Sinclair, January 2022

Introduction

I use Karabiner (configured with Gosu) to make advanced key mappings on my Apple computer. Karabiner allows you to create “layers”, perhaps simulating those on a programmable mechanical keyboard. I make good use of these layers to give me easy access (home-row or nearby) to all symbols and navigational controls, and even a numpad.

The motivation is to keep hand movement to a minimum. Decades of coding on standard keyboards has unfortunately left me with hand and wrist pain. I will soon enough own a small split keyboard which will force me to use layers to access symbols etc., so this Karabiner solution, which has evolved over months, is a training run for that.

@gsinclair
gsinclair / karabiner-example.edn
Created January 10, 2022 10:25
A Karabiner/Goku example that among other things demonstrates swapping Win and Alt keys on an external keyboard to reflect the Mac Option-Command layout.
{
:devices {
:sculpt-keyboard [{:product_id 1957 :vendor_id 1118}]
}
:layers {:capslock-mode {:key :caps_lock :alone {:key :escape}}
; CAPSLOCK gives arrow keys with hjkl and Enter with m or Escape if tapped
}
@gsinclair
gsinclair / links.txt
Last active September 13, 2021 00:41
@gsinclair
gsinclair / guessing.py
Created February 18, 2021 01:19
Computer guessing game
import random
UPPER_LIMIT = 1000000
target = random.randint(1, UPPER_LIMIT)
print("I've chosen a number between 1 and", UPPER_LIMIT)
num_guesses = 0
while True:
# --- Question 1 ------------------------------------------- #
# Return the number of jumps required to get to zero.
def light_years(n):
return 0
def test_light_years(n):
assert light_years(10) == 4
assert light_years(11) == 4
if False:
LOC = [4,8,12,16,20,24,28,32,36,40,44]
COST = [4,9,4,6,9,2,6,5,4,8,3]
DISTANCE = 50
else:
LOC = [2, 6, 10, 11, 14, 16, 18, 22, 25, 27, 30, 32, 36, 40, 44, 48, 51, 55, 59, 61,
65, 67, 70, 71, 74, 77, 80, 84, 87, 91, 93, 97]
COST = [5, 7, 5, 8, 9, 8, 4, 4, 9, 2, 2, 5, 4, 1, 1, 3, 6, 1, 7, 3, 5, 1, 1, 2, 9, 9,
9, 1, 8, 3, 6, 4,]
@gsinclair
gsinclair / merge.py
Created March 30, 2020 06:34
Given two sorted lists, return a merged sorted list
# Given two sorted lists A and B, return a sorted list that has all
# the elements of A and all the elements of B.
def merge(A, B):
i, j = 0, 0
result = []
while True:
if i == len(A):
# Put the rest of B into result.
while j < len(B):
result.append(B[j])