Skip to content

Instantly share code, notes, and snippets.

@jcreedcmu
jcreedcmu / type-shenanigans.ts
Created November 25, 2020 23:36
Typescript Shenanigans
// type Unary = 'Z' | `S${Unary}`; // considered circular
// Can implement unary addition and multiplication with template literal types
type Plus<T extends string, U extends string> = T extends `S${infer X}` ? `S${Plus<X, U>}` : U;
type Times<T extends string, U extends string> = T extends `S${infer X}` ? Plus<U, Times<X, U>> : 'Z';
// Trying to do length-aware vectors as dependent types
module Attempt1 {
type Vector<T, LEN> = LEN extends `S${infer X}` ? [T, ...Vector<T, X>] : [];
@jcreedcmu
jcreedcmu / 1-1.md
Last active July 23, 2020 18:02
adityasharad-1-1.md

Notes for meeting

Even though Project Wall-E may very well mean that I won't be diving aggressively into QL internals in the short term, I'm still interested in hearing what you've been working on, just out of curiosity.

Just to pick a few PRs that I see you've done:

https://git.semmle.com/Semmle/code/pull/36653 I'm kind of interested in how fastTC works at all, not very familiar with that area

@jcreedcmu
jcreedcmu / enumerate.ts
Last active March 23, 2020 20:17
taus puzzle
import * as cp from 'child_process';
type Prop = 'a' | 'b' | [Prop, Prop];
function propToStr(p: Prop): string {
if (typeof p === 'string') return p;
return `im(${propToStr(p[0])}, ${propToStr(p[1])})`;
}
function propToStrIleancop(p: Prop): string {

p0 1:1

2020-06-17

  • Was on break last week

  • Pagination for bqrs landed, need to finish up for interpreted, then can embrace the glorious future of massive red diffs at last.

const fs = require('fs');
const qs = require('querystring');
const https = require('https');
const query = {
key: fs.readFileSync('/home/jcreed/private/maps-api2', 'utf8').replace(/\n/g, ''),
input: "chipotle",
inputtype: "textquery",
fields: "formatted_address,name",
location: "40.7831,-73.9712", // manhattan
#include <stdio.h>
#define GOOD1 99586915107664152904966939075856564224.0
#define GOOD2 298759386401549014052982412761733529600.0
#define BAD 298759406683958617704652836708984815616.0
int isGood(float x) {
return 1.0 / (1.0 / x) == x;
}
float disc(float x) {
@jcreedcmu
jcreedcmu / pattern.ts
Created February 17, 2019 22:50
pattern.ts
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>
type Elim<T extends { t: string }, U extends string> = T extends { t: U } ? never : T;
type Choose<T extends { t: string }, U extends string> = T extends { t: U } ? T : never;
type Prog<T, U> = { k: 'src', v: T } | { k: 'ans', v: U };
interface PreMatcher<T extends { t: string }> {
cas<S extends string, U>(tag: S, f: (x: Omit<Choose<T, S>, 't'>) => U): Matcher<Elim<T, S>, U>;
}
interface Matcher<T extends { t: string }, U> {
@jcreedcmu
jcreedcmu / b.ts
Created January 1, 2019 20:08
b.ts
type Lang = 'en' | 'es';
type Intl<T> = {
forms: { new_form: T },
hello: T
};
type Dict<T extends string, U> = { [k in T]: U };
type LangDataIn = Dict<Lang, Intl<string>>;
type LangDataOut = Intl<Dict<Lang, string>>;
@jcreedcmu
jcreedcmu / enum2.ts
Last active September 16, 2018 17:48
enum2.ts
import { range, sum, uniq } from './util';
function paths(s) {
function swap(s, n) {
const sc = [].concat(s);
const tmp = sc[n];
sc[n] = sc[n + 1];
sc[n + 1] = tmp;
return sc;
}