Skip to content

Instantly share code, notes, and snippets.

Avatar

Gavin Sinclair gsinclair

  • Sydney, Australia
View GitHub Profile
View origami.clj
;; 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
View karabiner-layers.md

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.
View karabiner-example.edn
{
: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
View links.txt
@gsinclair
gsinclair / guessing.py
Created February 18, 2021 01:19
Computer guessing game
View guessing.py
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:
View cat-code-1.py
# --- 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
View trek.py
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
View merge.py
# 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])
View pr2019.py
# Initial data, for testing.
ItemNo = [31, 42, 27, 81, 99, 46]
Description = ["Vase", "Chair", "Painting", "Piano", "Tuba", "Model car"]
NumBids = [3, 0, 1, 9, 7, 0]
Reserve = [19, 80, 300, 120, 99, 5]
Bid = [25, 0, 50, 437, 105, 0]
Buyer = [108, None, 199, 176, 155, None]
Result = [None, None, None, None, None, None]
N = 6
@gsinclair
gsinclair / gravel.py
Created February 22, 2020 23:19
Work-in-progress solution to pre-release problem (Feb 2020)
View gravel.py
def name(sack_type):
if sack_type == 'S': return 'sand'
elif sack_type == 'G': return 'gravel'
elif sack_type == 'C': return 'cement'
def input_sack_details(n):
global NREJECTS
while True:
prompt = "Sack " + str(n) + "> "
user_input = input(prompt)