Skip to content

Instantly share code, notes, and snippets.

View justinhj's full-sized avatar

Justin Heyes-Jones justinhj

View GitHub Profile
@justinhj
justinhj / straightselectionsort.py
Created January 6, 2026 19:36
Straight Selection Sort in Python with Knuth's MMIX code in the comments
def selection_sort_mmix(records):
"""
Sorts a list of records in place using the selection sort algorithm
as described in the MMIX assembly program.
The algorithm finds the maximum element in the unsorted portion
and exchanges it with the element at the current end position (j).
"""
N = len(records)
@justinhj
justinhj / plugins.lua
Created September 11, 2025 23:31
neovim plugin config
local function isInGit()
local checkGit = vim.fn.system("git rev-parse --is-inside-work-tree")
return string.find(checkGit, "true", 1, true) == 1
end
local plugins = {
-- Just an experiment
{ "justinhj/whid",
dir = '~/projects/whid',
lazy = false,
@justinhj
justinhj / middleearth.ts
Created March 7, 2024 23:34
Weird use of Omit
type Species = 'hobbit' | 'orc' | 'elf' | 'man';
interface MiddleEarthDenizen {
name: string
species: Species
}
interface Hobbit extends Omit<MiddleEarthDenizen, 'species'> {
burrow: string
species: 'hobbit'
@justinhj
justinhj / main.cpp
Created October 7, 2023 03:10
leetcode.com/problems/multiply-strings
#include <iostream>
#include <vector>
#include <ranges>
#include <algorithm>
using namespace std;
class Solution {
public:
string m2(string num1, int multiplier, int zeros) {
@justinhj
justinhj / howto.txt
Last active August 23, 2021 04:56
How to do Rust on Windows with Gnu tools
Follow these instructions after you have Rustup, Scoopy and cmder installed.
https://jrhawley.ca/2020/05/25/rust-toolchain-windows
One extra bit of info is to set the path in cmder follow these instructions
https://jonathansoma.com/lede/foundations-2019/terminal/adding-to-your-path-cmder-win/
Find msys in the scoop folder and add the path, mine was here...
Found 546487 words in the book
Words with the most uncommon occurence in the English words found on the web
See https://www.kaggle.com/rtatman/english-word-frequency
sibilance (12720)
hubristic (12760)
hellishly (12784)
jerkily (12785)
antimissile (12799)
mildews (12801)
package org.justinhj
object Scala2WriterTWithCats extends App {
// Implement WriterT using Cats implementation of Monad and Monoids
import cats.{Monad, Monoid}
case class WriterT[F[_]: Monad,W,A](val wrapped: F[(W,A)])
@justinhj
justinhj / WriterTTest.scala
Last active January 29, 2021 02:01
Scala 3 WriterT
object WriterTest extends App {
trait Semigroup[A]:
def combine(al: A, ar: A): A
object Semigroup:
def apply[A](using s: Semigroup[A]) = s
trait Monoid[A] extends Semigroup[A]:
def zero: A
@justinhj
justinhj / WriterTOldSchool.scala
Last active January 27, 2021 23:44
Implementation of the WriterT monad transformer leveraging Cats for Monad and Monoid
package org.justinhj
object WriterTOldSchool extends App {
import cats.{Monad, Monoid}
case class WriterT[F[_]: Monad,W,A](val wrapped: F[(W,A)])
implicit def writerTMonad[F[_]: Monad,W: Monoid] = new Monad[WriterT[F,W,?]] {
@justinhj
justinhj / Scala3DefaultOptionMacro.scala
Created January 25, 2021 18:23
Macro that crashes the compiler
// Macro that crashes the compiler
import scala.quoted._
def takeOptionImpl[T](o: Expr[Option[T]], default: Expr[T])(using Quotes, Type[T]): Expr[T] = '{
$o match {
case Some(t1) => t1
case None: Option[T] => $default
}
}