Skip to content

Instantly share code, notes, and snippets.

@mlhaufe
mlhaufe / UnionIntersection.ts
Created April 30, 2023 16:40
TypeScript Union and Intersection types
View UnionIntersection.ts
type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never
type IntersectionToUnion<I> = (I extends any ? (x: I) => any : never) extends ((x: infer U) => any) ? U : never;
@mlhaufe
mlhaufe / islanders.ts
Created May 5, 2022 01:42
12 islanders balancing problem
View islanders.ts
// Random Integer from m to n excluding e
const randInt = (m: number, n: number, e?: number): number => {
const result = Math.floor(Math.random() * m) + n;
return e == undefined ? result :
result == e ? randInt(m, n, e) :
result
}
class Person { constructor(public weight: number) {} }
@mlhaufe
mlhaufe / Functional.ts
Created April 16, 2022 03:37
Expression Problem
View Functional.ts
/** Number Expressions */
// data
type Exp =
{ tag: 'Lit', value: number } |
{ tag: 'Add', left: Exp, right: Exp }
// operations
function evaluate(exp: Exp): number {
switch (exp.tag) {
@mlhaufe
mlhaufe / error.txt
Created May 24, 2021 13:57
Magnolia SPAv2 error
View error.txt
Context: <https://groups.google.com/a/magnolia-cms.com/g/user-list/c/MRpHYKkOMhA>
Type Exception Report
Message com.machinezoo.noexception.WrappedException: java.net.ConnectException: Connection refused (Connection refused)
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
@mlhaufe
mlhaufe / cyclicPerms.js
Last active May 12, 2021 14:07
Permutations
View cyclicPerms.js
// cyclicPerms(5)
// "1,2,3,4,5
// 2,3,4,5,1
// 3,4,5,1,2
// 4,5,1,2,3
// 5,1,2,3,4"
const cyclicPerms = (n) =>
Array.from({length: n},(_,i) => i + 1)
.map((_, i, xs) => [...xs, ...xs].slice(i, i+n))
.join('\n')
@mlhaufe
mlhaufe / bool.ts
Created July 21, 2020 19:13
Boolean control structures
View bool.ts
interface Boolean {
ifTrue<T>(fn: () => T): T | undefined
ifFalse<T>(fn: () => T): T | undefined
}
Object.assign(Boolean.prototype, {
ifTrue(fn: Function) {
return this ? fn.apply(this) : undefined
},
ifFalse(fn: Function) {
@mlhaufe
mlhaufe / databinding.ts
Last active July 3, 2020 22:50
TypeScript databinding
View databinding.ts
function Bindable(proto: any, name: PropertyKey) {
const desc = Object.getOwnPropertyDescriptor(proto, name)
delete proto.name
if ((proto['_dispatchEvent']) == undefined) {
Object.defineProperty(proto, '_dispatchEvent', {
value(event: Event) {
}
@mlhaufe
mlhaufe / arith-bool.js
Created January 8, 2019 06:20
Booleans with arithmetic
View arith-bool.js
// x, y :: {0,1}
var and = (x,y) => x * y,
not = (x) => 1 - x,
or = (x,y) => 1 - (1 - x) * (1 - y)
and(0,0) // 0
and(0,1) // 0
and(1,0) // 0
and(1,1) // 1
@mlhaufe
mlhaufe / README.txt
Created December 10, 2018 05:39
A half assed, buggy implementation of a Tiny File System. Not useful for anything as is.
View README.txt
- The application is currently single threaded
- The following commands have been implemented:
- exit
- create <PATH>
- open <PATH>
- display
- ls
- cd <TFS> (partial)
- mkdir <TFS> (partial). currently buggy due to nibble manipulation
- import <PATH> <TFS> (partial) stub + error checking only
View hackathon-2016.ts
function main() {
console.log("question1(0) == 0");
console.assert(question1(0) == 0, `${question1(0)}`);
console.log("question1(1) == 1");
console.assert(question1(1) == 1, `${question1(1)}`);
console.log("question1(7) == 13");
console.assert(question1(7) == 13, `${question1(7)}`);
console.log("question1(12) == 144");
console.assert(question1(12) == 144, `${question1(12)}`);