Skip to content

Instantly share code, notes, and snippets.

Peter Fraenkel pnf

Block or report user

Report or block pnf

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
View viewducers.scala
trait ViewTransformer[-A,+B] {
def sequence(in: Iterable[A]) = transform(in.view).to(IterableFactory.toSpecific(in.iterableFactory))
def transform(v: View[A]): View[B]
def map[C](f: B => C): ViewTransformer[A,C] = new ViewTransformerImpl[A,C,B](this) {
override def transform(v: View[A]): View[C] = prev.transform(v).map(f)
def flatMap[C](f: B => IterableOnce[C]): ViewTransformer[A,C] = new ViewTransformerImpl[A,C,B](this) {
override def transform(v: View[A]): View[C] = prev.transform(v).flatMap(f)
View quicksort.hs
{-# LANGUAGE RankNTypes #-}
import Data.STRef
import Data.Vector (fromList, toList, freeze, thaw)
import Control.Monad
import Data.Vector.Mutable (MVector, STVector, read, write, swap)
import qualified Data.Vector as V (Vector, length)
import Data.List (sortOn)
import Prelude hiding (read)
import GHC.ST
View qaxl.clj
(ns qaxl.core
(:use clojure.walk clojure.pprint qaxl.cache)
(:require [co.paralleluniverse.pulsar.async :as qa]
[clojure.core.async :as a]
[co.paralleluniverse.pulsar.core :as q]
[clojure.test :refer [function?]]
[co.paralleluniverse.fiber.httpkit.client :as hk]
[co.paralleluniverse.pulsar.core :refer [fiber]]
[clojure.core.match :refer [match]]))
View quattro.el
;; La bella vita di quattro finestre
(global-set-key "\C-col" 'windmove-left)
(global-set-key "\C-cor" 'windmove-right)
(global-set-key "\C-cou" 'windmove-up)
(global-set-key "\C-cod" 'windmove-down)
(global-set-key "\C-cow" 'ido-jump-to-window)
(defun windmove-opposite () (interactive)
(if (windmove-find-other-window 'up) (windmove-up) (windmove-down))
(if (windmove-find-other-window 'right) (windmove-right)(windmove-left)))
(global-set-key "\C-coo" 'windmove-opposite)
pnf /
Last active Dec 21, 2015
Two algorithms for finding the longest anagram in a list of words.
die "Note that there are two different algorithms here. Don't expect it to run as is."
# ~0.15s on i7 1.7GHz
my @all;
my $m=0;
while(<>) {
$l = length($_);
$m = $l if $l>$m;
View lazysieve.clj
(defn maintain-non-primes [non-primes]
"Remove first non-prime entry, and create new entries based on it"
(let [[n ps] (first non-primes)
xs (dissoc non-primes n)
new-non-primes (map (fn [p] [(+ n p) (cons p (xs (+ n p))) ]) ps)]
(into xs new-non-primes)))
(defn seive
([] (seive (sorted-map) 2))
([n] (take n (seive (sorted-map) 2)))
([non-primes n]
pnf / tictactoe.clj
Last active Dec 19, 2015
AI-ish tic-tac-toe.
View tictactoe.clj
; list of winning positions
(def wp
[2r111000000 2r000111000 2r000000111 2r100100100 2r010010010 2r001001001 2r100010001 2r001010100])
;; Is a particular bitmask winning?
(defn winner? [p]
(some (fn [c] (= (bit-and c p) c)) wp))
;; list of possible moves, filtering out ones already made
(defn moves [p]
(filter pos? (map #(bit-and (bit-not p) (bit-shift-left 1%)) (range 9))))
;; A board position comprises a bitarray for each player and an indicaiton of whose turn it is.
pnf / frascii
Created Jun 24, 2013
Print out a fractal tree
View frascii
#!/usr/bin/env python
from math import *
import sys
# draw line from x,y of length s at angle theta, spawn growth of length s*r, theta+/-q unless n==0
def grow(x, y, theta, s, q, r, n):
ret = [(x,y,theta,s)]
n = n-1
if n>0:
x2 = x + s*cos(theta)
View view-bounds
Welcome to Scala version 2.10.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_21).
Type in expressions to have them evaluated.
Type :help for more information.
scala> implicit def strToInt(x:String) = x.toInt
warning: there were 1 feature warning(s); re-run with -feature for details
strToInt: (x: String)Int
scala> class C[A](v:A){def a(implicit ev:A=>Int)=123+ev(v)}
defined class C
pnf /
Created Jun 21, 2013
Draw a sort-of-pretty ascii graph from input data in outline form.
#!/usr/bin/env python
import re
import sys
from collections import deque
class Frame:
def __init__(self,node,indent):
self.node = node
self.indent = indent
You can’t perform that action at this time.