Skip to content

Instantly share code, notes, and snippets.

View qntm's full-sized avatar

qntm qntm

View GitHub Profile
@qntm
qntm / doubleEquals.js
Last active November 18, 2017 20:33
An implementation of the JavaScript `==` operator without using `==` itself.
'use strict'
// <http://www.ecma-international.org/ecma-262/5.1/#sec-8> Type
var type = function (x) {
// The `typeof` operator gives us almost what we want
return (
typeof x === 'function' ? 'object'
: x === null ? 'null'
: typeof x
)
@qntm
qntm / variadic.js
Last active June 5, 2017 01:19
Variadic fixed point combinators? They're more likely than you think
/**
Analogous to Array.prototype.map but for objects. If you
REALLY don't want to modify Object.prototype you can
modify this into a regular function `objectMap(obj, f)` I GUESS
but it doesn't affect the basic idea of what happens below
*/
Object.prototype.map = function(f) {
const mapped = {};
Object.keys(this).forEach(key => {
mapped[key] = f(this[key], key, this);
@qntm
qntm / daylengths.js
Created November 17, 2016 19:54
Which day was the shortest?
"use strict";
var tai = require("t-a-i");
var prevlen = undefined;
var prevcount = 0;
for(var d = Date.UTC(1961, 0, 1); d < Date.UTC(2017, 0, 1); d += 86400000) {
var d2 = d + 86400000;
var len = tai.unixToAtomic(d2) - tai.unixToAtomic(d);
len = Math.round(len * 10000) / 10000;
@qntm
qntm / yearlengths.js
Last active July 5, 2019 19:10
Which year was the longest?
"use strict"
const tai = require("t-a-i")
for (let y = 1961; y <= new Date().getFullYear(); y++) {
const start = tai.unixToAtomic(Date.UTC(y, 0, 1))
const end = tai.unixToAtomic(Date.UTC(y + 1, 0, 1))
console.log(y, end - start)
}
@qntm
qntm / indent.py
Last active February 28, 2022 04:07
Fibonindentation! Works in Python!
if True:
pass
if True:
if True:
if True:
if True:
if True:
if True:
if True:
print("yup, syntactically valid Python")
@qntm
qntm / STag.regex
Created January 15, 2016 23:28
RegEx match open tags except XHTML self-contained tags
<[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\U00010000-\U000EFFFF][\-.0-9:A-Z_a-z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0300-\u036F\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\U00010000-\U000EFFFF]*([\u0020\u0009\u000D\u000A]+[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\U00010000-\U000EFFFF][\-.0-9:A-Z_a-z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0300-\u036F\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\U00010000-\U000EFFFF]*[\u0020\u0009\u000D\u000A]*=[\u0020\u0009\u000D\u000A]*("([^<&"]|&([:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\U
@qntm
qntm / STag.py
Created January 15, 2016 23:24
RegEx match open tags except XHTML self-contained tags
'''
"RegEx match open tags except XHTML self-contained tags"
<http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags>
The W3C grammar for an XHTML open tag is given by production "STag". This
production is not recursive and is in fact strictly regular. The relevant
portions of the XML grammar are as follows (<http://www.w3.org/TR/xml11/>):
NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
No constraints
@qntm
qntm / multiline.js
Last active October 16, 2023 12:39
// TODO: longer method name
Function.prototype.extractBlockCommentAsMultilineString = function() {
return this.toString().match(/^function \(\)\{\s*\/\*((?:[^*]|\*+[^*\/])*)\*+\/\s*\}$/)[1];
};
var s = function(){/*
STRING
GOES
HERE
*/}.extractBlockCommentAsMultilineString();