Skip to content

Instantly share code, notes, and snippets.

#include <stdio.h>
#define I(n) for(int i=0; i<n; i++)
#define J(n) for(int j=0; j<n; j++)
#define O(str) printf(str)
#define Oc(c) putc(c, stdout)
#define M(x,y,c) m[y][x]=c;
int main() {
char c; char m[22][10];
@tangentstorm
tangentstorm / k.bnf
Created June 24, 2016 03:14
lexer and parser for K language... part of IntelliK
{
parserClass="com.x1010data.intellik.parser.KParser"
extends="com.intellij.extapi.psi.ASTWrapperPsiElement"
psiClassPrefix="K"
psiImplClassSuffix="Impl"
psiPackage="com.x1010data.intellik.psi"
psiImplPackage="com.x1010data.intellik.psi.impl"
elementTypeHolderClass="com.x1010data.intellik.psi.KTypes"
@tangentstorm
tangentstorm / keypad_art.c
Created June 11, 2016 18:25
arduino stuff
#include <SoftwareSerial.h>
#include <LedControl.h>
#include <Key.h>
#include <Keypad.h>
const byte rows = 4;
const byte cols = 4;
@tangentstorm
tangentstorm / gramco.k
Last active July 8, 2021 07:34
Rough port of my grammar combinator thing to k3.
/ grammar combinators in K
/ for longer description (in python), see:
/ http://tangentstorm.github.io/draft/wejalboot.py.html
/ -- misc helper functions ------------------------------------
join:{[sep;strs] / join strs with 'sep' as delimiter
(#sep) _ ,/ sep,' strs}
"""
>>> ebnf_sc.scan('x = A | b')
[('x', 'IDENT', 0), ('=', '=', 2), ('A', 'IDENT', 4), ('|', '|', 6), ('b', 'IDENT', 8)]
"""
from collections import namedtuple
from warnings import warn
import string
def T(tag, doc, args):
"""Creates a new tuple type."""
def read_ints():
i = 0
while True:
s = input('enter number[%i]:' % i)
try:
yield int(s); i+=1
except ValueError:
if s == "": return
else: print "ignoring invalid number"
@tangentstorm
tangentstorm / HiRiQ.k
Created April 3, 2016 03:13
Kona program to render the HiRiQ board.
a:3 3#0; b:.[a; 1 1;+;1]; c:a+2; d:(c,'a,'c); e:(a,'b,'a); `0:".O "[d,e,d]
"""
usage: thing.py t a g s -- machine names
"""
import sys
# get the tags and machine names, each separated by spaces.
# the two groups are separated by --
args = sys.argv[1:]
/ ansi color palette:
p: ("#000"; "#800"; "#008"; "#880"; "#008"; "#808"; "#088"; "#ccc")
p:p,("#888"; "#f00"; "#00f"; "#0f0"; "#ff0"; "#f0f"; "#00f"; "#fff")
ansi:p
/ draw boxes of the given size:
boxes: {(;ansi; x # ,,/x #' !16)}[8]
/ background noise, so you can see the black box :)
/ script to expose an apparent bug in kona when combining
/ higher-order verbs.
/ j-style "monadic fork": our first higher order verb.
mf: {[f;g;h] { g[f[x]; h[x]] }}
/ cheq = check equality of two strings. (or complain if mismatched)
cheq: { :[ x~y; echo "."; echo "\nfailed: (", x, ") ~ (", y, ")\n"] }