Skip to content

Instantly share code, notes, and snippets.

@liorean
liorean / fib.js
Last active August 29, 2015 14:19
Experiments with memoization, using ECMAScript 2015 (ES6) fat arrow function syntax. fix is a variant of the applicative order fix point combinator (Y), memo is a memoization function for functions of a single argument that recurse using an external name, and fixmemo is a merging of the two into a memoizing fix point combinator for functions of …
/* Some experiments for memoization functions on Fibonacci sequence. */
/* This uses the SpiderMonkey JS Shell functions print and dateNow for its output. */
let
fix=
f=>(
(f=>f(f))
(g=>f((...a)=>g(g)(...a)))),
memo=
f=>(
(map=>a=>(
@liorean
liorean / FizzBuzz.js
Created April 23, 2015 00:59
Side effect free FizzBuzz in ECMAScript 2015/ES6
((fix=>(fix(z=>(f,a)=>(b,...c)=>(b===void 0?a:z(f,f(a,b))(...c)))
((a,b)=>(a+'\n\t'+((b%3===0?'Fizz':'')+(b%5===0?'Buzz':'')||b)),
'FizzBuzz 1-100:'))
(...fix(z=>(m,n,...y)=>(n<m?y:z(m+1,n,...y,m)))(1,100)))
(f=>((f=>f(f))(g=>f((...a)=>g(g)(...a))))))
@liorean
liorean / HRM.41.sorted linked list.hrm
Last active March 25, 2016 23:58
A failed try at using a sorted linked list to solve problem 41 in Human Resource Machine - Not enough registers for the longest input using my linked list
-- HUMAN RESOURCE MACHINE PROGRAM --
a:
COMMENT 0
COPYFROM 24
COPYTO 23
COPYTO 22
COPYTO 0
BUMPDN 0
BUMPUP 23
@liorean
liorean / generatorFizzBuzz.js
Created September 20, 2017 01:22
FizzBuzz using infinite iterators
function* everysooften(num,val){
let x=num;
while(0<--x)
yield;
yield val;
yield* everysooften(num,val)}
function* combine(...its){
while(true)
yield its
.map(it=>it.next().value)
//Original:
//
//const map = (f, [x, …xs]) => (
// (x === undefined && xs.length === 0) ? []
// : [f(x), …map(f, xs)]
//);
const map=(f,array)=>{
const iterator=array[Symbol.iterator]()
let {done,value}=iterator.next()
@liorean
liorean / bettermap.es
Created November 18, 2017 19:06
Improving on the bad map
// See https://gist.github.com/liorean/58667acd9b8b4554a9c7b4740065e93c
const map=(f,array)=>{
const iterator=array[Symbol.iterator]()
let {done,value}=iterator.next()
if(done){
if('return' in iterator)
iterator.return()
return []}
return [f(value),...map(f,iterator)]}
@liorean
liorean / itermap.es
Created November 18, 2017 19:17
Making an iterable map
// Continuing from https://gist.github.com/liorean/58667acd9b8b4554a9c7b4740065e93c
// and https://gist.github.com/liorean/fa6b1f147df2dd3bd0c99e3254dd21f0
const map=(f,array)=>{
const iterator=array[Symbol.iterator]()
return{
[Symbol.iterator](){return this}
,next(){
let {done,value}=iterator.next()
if(done){
@liorean
liorean / HRM.1.Mail Room.1.hrm
Last active August 18, 2018 19:24
Human Resource Machine Year 1 Mail Room solution1
-- HUMAN RESOURCE MACHINE PROGRAM --
INBOX
OUTBOX
INBOX
OUTBOX
INBOX
OUTBOX
@liorean
liorean / HRM.2.Busy Mail Room.1.hrm
Last active August 18, 2018 19:25
Human Resource Machine Year 2 Busy Mail Room solution 1
-- HUMAN RESOURCE MACHINE PROGRAM --
INBOX
OUTBOX
INBOX
OUTBOX
INBOX
OUTBOX
INBOX
OUTBOX
@liorean
liorean / HRM.2.Busy Mail Room.2.hrm
Last active August 18, 2018 19:26
Human Resource Machine Year 2 Busy Mail Room solution 2
-- HUMAN RESOURCE MACHINE PROGRAM --
a:
INBOX
OUTBOX
JUMP a