Skip to content

Instantly share code, notes, and snippets.

View derrickturk's full-sized avatar
💭
(Come in under the shadow of this red rock)

Derrick Turk derrickturk

💭
(Come in under the shadow of this red rock)
View GitHub Profile
@derrickturk
derrickturk / plot_petra.rs
Last active March 21, 2023 17:20
Using plotters and petra_grid to half-ass something
use std::{
env,
error::Error,
fs::File,
process::ExitCode,
};
use plotters::prelude::*;
use petra_grid::{Grid, GridData};
@derrickturk
derrickturk / petra_grid.map
Created March 6, 2023 17:27
An experiment with GNU Poke
load petra_grid;
%%
%entry
%name header
%type Header
%offset 0x0#B
%entry
@derrickturk
derrickturk / pop_char.rs
Created January 22, 2023 20:12
"Uncons" a char from a Rust &str
#[inline]
fn pop_char(s: &str) -> Option<(char, &str)> {
let mut chars = s.chars();
chars.next().map(|c| (c, chars.as_str()))
}
@derrickturk
derrickturk / queue.awk
Last active December 11, 2022 15:36
SICKOS: hahahahah, yes
function push(q, val) {
if (empty(q)) {
q["head"] = 0
q["tail"] = 0
q[0] = val
} else {
q[q["tail"] + 1] = val
q["tail"] = q["tail"] + 1
}
}
@derrickturk
derrickturk / ziptree.py
Last active December 8, 2022 21:15
zippin' zippers in Python
# Language path: Haskell->Ocaml->Python, mypy typesystem [semantic loss ~31%]
# Subject: Zippers as the key insight
# what great fun! since mypy ~0.991 (?) we can finally, finally work with
# recursive types. this opens up Python to some traditional functional
# programming practices with a minimum of bullshit.
from typing import NamedTuple, TypeAlias
# let's walk amongst the trees for a bit.
@derrickturk
derrickturk / good.hs
Last active November 30, 2022 22:04
hell with type-level map
{-# LANGUAGE DataKinds, GADTs, KindSignatures, TypeOperators #-}
{-# LANGUAGE TypeFamilies #-}
module Data.HList
( HList(..)
, TypeMap
) where
import Data.Kind (Type)
import Data.Maybe (fromJust, fromMaybe)
@derrickturk
derrickturk / base26.hs
Last active November 21, 2022 20:53
say, Excel column names, super inefficiently
base26 :: Integer -> String
base26 n =
let (m, n') = n `divMod` 26
ones = [toEnum (fromEnum 'A' + fromInteger n')]
in case m of
0 -> ones
m -> base26 (m - 1) ++ ones
@derrickturk
derrickturk / Deque.java
Created March 19, 2018 03:26
A mutable, generic deque, implemented as a doubly-linked list in Java for didactic purposes (download zip and extract, compile with javac Deque.java DequeDemo.java, run with java DequeDemo)
/* a deque (double-ended queue)
* implemented as a mutable, generic, doubly-linked list in Java
*
* what do we mean by this?
* deque: a Double-Ended QUEue. a data structure supporting fast insertion or
* removal at either end, used in various algorithms and data-sharing
* techniques.
*
* mutable: the structure contains state which may be altered by various
* mutating operations. for example, when we enqueue an element at the
@derrickturk
derrickturk / so_you_have_VB.txt
Last active October 27, 2022 19:18
So You've Inherited a VB6/VBA Project!
So You've Inherited a VB6/VBA Project!
Congratulations! You've inherited a large, complex, Visual Basic 6 or VBA
project written by another programmer. In terms of transmissible conditions...
well, at least it's not AIDS.
[Sidebar: why "Visual Basic 6 or VBA"? Well, in 2000-something, Microsoft
introduced the .NET platform. This is a managed runtime in the vein of the
Java virtual machine, and one of its selling points was the ability to
compile multiple source languages to .NET assemblies. Visual Basic was chosen
@derrickturk
derrickturk / rev_ll.c
Created October 26, 2022 14:49
every time I see someone bitch about "reversing linked lists" I have this terrible compulsion
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
typedef struct node {
int value;
struct node *next;
} node, *list;
void list_free(list l)