Skip to content

Instantly share code, notes, and snippets.

@need12648430
need12648430 / gist:0fb5825c4268b988166e
Created June 21, 2014 08:30
HTTP requests parsed in 4 lines of Lua.
local verb, resource, version, headers, body = data:match("(.+)%s+(.+)%s+(HTTP/%d%.?%d?)\r\n(.-)\r\n\r\n(.-)")
headers:gsub("(.-)%s*:%s*(.-)\r\n", function(name, value)
-- do something with name and value here
end)
@need12648430
need12648430 / shuffle.js
Last active August 29, 2015 14:20
Shuffle an Array in 1 line, 108 bytes of JavaScript
function shuffle(set){
for (var c=set.slice(0),o=[],m=Math; c.length > 0; o.push(c.splice(m.floor(m.random() * c.length), 1)[0]));
return o;
}
with (Math)
for (
// c becomes shallow copy of array
// o is output
var c=set.slice(0),o=[];
@need12648430
need12648430 / lcg.js
Last active August 29, 2015 14:20
Linear congruential generator (Seedable PRNG) with weighted choices and shuffling in 1.4kb of clean JS.
var LCG = (function () {
var c = 0x93456789, a = 0x169659, mod, mask, r;
mask = (mod = Math.pow(2, 31)) - 1;
function LCG(seed) {
this.seed = seed || new Date().getTime();
}
LCG.prototype = {
nextInt:
@need12648430
need12648430 / example.js
Last active August 29, 2015 14:25
tiny mustache-like templating engine in 2.6kb/108 loc
var template = "{?condition}Condition exists! {condition}{/condition}\n\n" +
"{^whereami}I am not here!{/whereami}\n\n" +
"{#list}{name} is {age} years old! {?old}They are *old*!{/old}{!old}They are not old!{/old}\n{/list}";
console.log(stache(template, {
condition: "Hello world!",
list: [
{name: "Charles", age: "25"},
{name: "Bob", age: "42", old: true},
{name: "Samantha", age: "32"},
@need12648430
need12648430 / ago.py
Last active August 29, 2015 14:27
User friendly representation of times in 12 lines of Python.
def ago(elapsed):
o = []
for unit, size in [("yr",365*24*60*60),("mo",30*24*60*60),("wk",7*24*60*60),("d",24*60*60),("hr",60*60),("min",60),("sec",1)]:
if size > elapsed: continue
total = int(elapsed / size)
elapsed = elapsed % size
o.append(str(total) + unit)
@need12648430
need12648430 / display.js
Last active September 1, 2015 16:59
Maze Generator in 532 bytes.
// only semi-golfed, mostly because i was in the headspace; only used for debugging
var w, h, x, y, m=maze(w=16,h=16), g=[];
// generate fully walled grid
for(y = 0; y < h * 2 + 1; y ++) {
g[y]=[]
for(x = 0; x < w * 2 + 1; x ++)
g[y].push(!(y&1)?"#":!(x&1)?"#":" ");
}
@need12648430
need12648430 / example.py
Last active December 2, 2015 21:04
Quarrel: WSGI-style routing for command line tools, in about 50 lines
import sys
from quarrel import Quarrel
@Quarrel("multiply", int, int)
@Quarrel("multiply", int)
def multiply_int(a, b = 2):
print(a * b)
@Quarrel("greet", str)
def greet(name):
@need12648430
need12648430 / example.js
Created August 15, 2016 03:13
Metaview - A tiny, fast, simplified abstraction of JS DataViews (similar to AS3's ByteArray)
// writing
var o = new MetaView();
o.writeInt16(-128);
o.writeUint16(128);
o.writeFloat32(3.141592);
o.writeFloat32([1.5, 1.5]);
o.writeUTF8String("räksmörgås");
// saving
var s = o.finalize();
import java.util.Map;
import java.util.Comparator;
import java.util.Collections;
int index = 0;
PImage pokemon, current;
PGraphics pie;
HashMap<Integer,Integer> colorMap;
ArrayList<Integer> colorByCount;
@need12648430
need12648430 / EventManager.gd
Created January 16, 2021 19:26
A special event manager for keeping persistent game time.
# when loading a save, you'd use this to simulate time since last save
# EventManager.simulate_time_span(LAST_UNIX_TIMESTAMP, THIS_UNIX_TIMESTAMP)
# for example, this will simulate the last 30 seconds before the game opened
# EventManager.simulate_time_span(OS.get_unix_time() - 30, OS.get_unix_time())
# there is an optional third argument to that that specifies a minimum priority
# EventManager.simulate_time_span(LAST_UNIX_TIMESTAMP, THIS_UNIX_TIMESTAMP, Priority.UNSKIPPABLE)
# .. will only run unskippable events
# if the third argument is not specified, both skippable and unskippable events are run