Skip to content

Instantly share code, notes, and snippets.

View kachayev's full-sized avatar
🇺🇦
Fighting for freedom

Oleksii Kachaiev kachayev

🇺🇦
Fighting for freedom
View GitHub Profile
(ns kleene)
;;
;; Inspired by "Regexes, Kleene Algebras and Real Ultimate Power"
;; http://plastic-idolatry.com/erik/oslo2014.pdf
;;
;; What do we want to do?...
;;
;; (def p1 (times (Var. "w") (Var. "o") (Var. "w"))
;; (matches? p1 "wow") ;; true
@kachayev
kachayev / barber.go
Last active December 11, 2015 17:29
Solve "Sleeping Barber Problem" with Golang (more about problem - http://en.wikipedia.org/wiki/Sleeping_barber_problem)
package main
import (
"fmt"
"time"
"math/rand"
)
const (
CUTTING_TIME = 20
@kachayev
kachayev / pingpong.scala
Created February 6, 2013 12:07
Simplest ping-pong example of Scala Actors
import scala.actors.Actor
import scala.actors.Actor._
case object Ping
case object Pong
case object Stop
class Ping(count: Int, pong: Actor) extends Actor {
def act() {
var pingsLeft = count - 1
@kachayev
kachayev / sleep_barber.erl
Last active December 12, 2015 09:19
Solve sleeping barber problem with many barbers and many client generators
%%
%% Solve sleeping barber problem in most general case
%% Task description on Wikipedia:
%% http://en.wikipedia.org/wiki/Sleeping_barber_problem
%%
%% Additions to classic variant:
%% * many barbers
%% * many clients generators with random timeouts between clients
%% * calculation for total served clients
%% * random time for each client to make barber's job
@kachayev
kachayev / sleep_barber_monitor.erl
Created February 11, 2013 16:59
Solve sleeping barber problem with many barbers and many client generators and barber failures (monitor)
%%
%% Solve sleeping barber problem in most general case
%% Task description on Wikipedia:
%% http://en.wikipedia.org/wiki/Sleeping_barber_problem
%%
%% Additions to classic variant:
%% * many barbers
%% * many clients generators with random timeouts between clients
%% * calculation for total served clients
%% * random time for each client to make barber's job
@kachayev
kachayev / sleep_barber_exit.erl
Created February 11, 2013 17:30
Solve sleeping barber problem with many barbers and many client generators and barber failures (exit)
%%
%% Solve sleeping barber problem in most general case
%% Task description on Wikipedia:
%% http://en.wikipedia.org/wiki/Sleeping_barber_problem
%%
%% Additions to classic variant:
%% * many barbers
%% * many clients generators with random timeouts between clients
%% * calculation for total served clients
%% * random time for each client to make barber's job
@kachayev
kachayev / uniq_substr.hs
Last active December 13, 2015 17:38
Define function that returns count of unique substrings consuming O(1) memory
import Data.List
uniqSubstr :: String -> Int
uniqSubstr = sum . (map pair) . pairwise . sort . tails
where
pairwise l@(_:ht) = zip l ht
prefix pre post = length $ takeWhile (uncurry (==)) $ zip pre post
pair (pre, post) = length $ drop (prefix pre post) post
@kachayev
kachayev / closest.py
Last active December 18, 2015 18:29
Simple visualization for finding closest points algorithm (2D variant)
import Tkinter as tk
import time
from operator import itemgetter
from math import sqrt
from random import randint
from Queue import Queue
from threading import Thread
def vdist(q, (x1,y1), (x2,y2)):
@tonyg
tonyg / mtl2.rkt
Last active December 18, 2015 22:59
From zero to cooperative threads in 15 lines of Racket code (after <http://www.haskellforall.com/2013/06/from-zero-to-cooperative-threads-in-33.html>)
#lang racket/base
(require data/queue)
(provide fork yield done run-threads)
(define current-runqueue (make-parameter #f))
(define (fork thunk)
(enqueue! (current-runqueue) (lambda () (thunk) (done))))
(define (yield)
@kachayev
kachayev / pipes_example.ex
Created September 2, 2013 08:24
Push Notifications sending with #riak_pipe #Elixir #Pipes
import Pipes
# defservice Profile do ... end
# defservice Device do ... end
# defservice Push do ... end
send = pipe do
profile <- Profile.all &1
badge <- Profile.get_badge_size profile
device <- Device.sessions profile