Skip to content

Instantly share code, notes, and snippets.

View gurgeous's full-sized avatar

Adam Doppelt gurgeous

  • Seattle, WA
View GitHub Profile
@gurgeous
gurgeous / v
Created January 24, 2024 17:16
#!/bin/bash
set -euo pipefail
# sanity checking
if [[ $# -ne 1 ]] ; then
echo 'usage: v <file>'
exit 0
fi
if ! [ -f "$1" ]; then
@gurgeous
gurgeous / reload.osa
Created September 24, 2022 15:48
reload a chrome tab when a file changes
#
# Reload localhost tabs. Sample usage:
#
# $ brew install watchexec
# $ watchexec --watch <DIRNAME> reload.osa
#
tell application "Google Chrome"
set window_list to every window
repeat with the_window in window_list
def tally(data, ii)
Hash.new(0).tap do |h|
data.each { h[_1[ii]] += 1 }
end
end
n = data.first.length
# part 1
gamma = (0...n).map do |ii|
1000tablets.com
100sildenafil.com
100viagra.com
20tadalafil.com
365tablets.com
366pills.com
555meds.com
555pharmacy.com
999pills.com
999tabs.com
@gurgeous
gurgeous / rake.zsh
Created May 26, 2021 21:16
Improved zsh rake autocomplete
#
# Improved rake autocomplete. It completes three different items:
#
# (1) options like "rake --trace" or "rake --verbose"
# (2) tasks like "rake db:migrate"
# (3) files like "rake test/lib/util.rb"
#
# Options and tasks are defined using the variables below. This doesn't try to
# build a task name cache or anything like that.
#
def solve(key)
(0..).inject(1) do |memo, n|
return n if memo == key
(memo * 7) % 20201227
end
end
def transform(subject, n)
(1..n).inject(1) { |memo, _| (memo * subject) % 20201227 }
end
DIRS = {
'e' => [ 1, 0 ],
'w' => [ -1, 0 ],
'sw' => [ -1, -1 ],
'se' => [ 0, -1 ],
'nw' => [ 0, 1 ],
'ne' => [ 1, 1 ],
}.freeze
#
# append to data
data += (data.max + 1..1000000).to_a
max = data.max
#
# build cups/lookup from data
#
Node = Struct.new(:value, :next)
players = data.split("\n\n").map do |s|
s.lines[1..].join.ints
end
# part 1
loop do
top = players.map(&:shift)
(top[0] > top[1]) ? players[0] += top : players[1] += top.reverse
if loser = players.find_index(&:empty?)
p players[1 - loser].reverse.map.with_index { |c, ii| c * (ii + 1) }.sum
# parse
foods = data.lines.map do |s|
s =~ /(.*) \(contains (.*)\)/
[ $1.split, $2.split(', ') ]
end
ingredients = foods.map(&:first).flatten.uniq.sort
allergens = foods.map(&:second).flatten.uniq.sort
#
# part 1