Skip to content

Instantly share code, notes, and snippets.

@xsc
xsc / main.clj
Created November 18, 2012 22:40
Counting Characters in Clojure
(ns character-counter.main)
;; ------------------------------------------------------------------------
;;
;; SEE HERE: http://dev.xscheme.de/2012/11/counting-characters-in-clojure/
;;
;; ------------------------------------------------------------------------
;; Different Count Strategies
(def count-a-with-regex
@xsc
xsc / kasumi.hs
Created December 15, 2012 03:47
KASUMI implementation in Haskell
module Kasumi where
import Data.Bits
import Data.List
import Data.Word
-- Helpers
rol16 x 0 = x
rol16 x n = 0xFFFF .&. ((shiftL x n) .|. (shiftR x (16 - n)))
@xsc
xsc / repl.clj
Last active December 16, 2015 01:30
Clojure and Thrift using Java Interop (intended for the REPL)
;; Processor
(import '(org.example Person PersonIndex PersonIndex$Processor
PersonIndex$Client PersonIndex$Iface))
(def person-index-processor
(PersonIndex$Processor.
(proxy [PersonIndex$Iface] []
(store [p]
(println "Storing Person:")
@xsc
xsc / base64.clj
Created May 4, 2013 17:39
Base64 Encoding/Decoding in Clojure
(ns ^{ :doc "Base64 Encoding/Decoding in Clojure"
:author "Yannick Scherer" }
base64)
;; ## Conversion Functions
(def ^:private base64-chars
"Base64 Characters in the right order."
(vec
(concat
@xsc
xsc / fast_zip_utils.clj
Created August 7, 2013 10:47
node removal utilities for fast-zip
(ns fast-zip-utils
(:require [fast-zip.core :as z])
(:import [fast_zip.core ZipperPath ZipperLocation]))
(defn remove-right
"Remove right sibling of the current node (if there is one)."
[^ZipperLocation zloc]
(let [path ^ZipperPath (.path zloc)]
(if (zero? (count (.r path)))
zloc
@xsc
xsc / benchmark.patch
Created August 31, 2014 13:54
pjson benchmarks
From a74d2f6d2337d28a97d48aeb06299269bac6354d Mon Sep 17 00:00:00 2001
From: Yannick Scherer <[email protected]>
Date: Sun, 31 Aug 2014 15:51:53 +0200
Subject: [PATCH] benchmark adjustments.
---
src/main/bench/pjson/parse_bench.clj | 37 +++++++++++++++++-------------------
1 file changed, 17 insertions(+), 20 deletions(-)
diff --git a/src/main/bench/pjson/parse_bench.clj b/src/main/bench/pjson/parse_bench.clj
@xsc
xsc / restricted_spec.clj
Last active October 26, 2016 19:16
Restricted/Dynamic Specs
(s/def ::element
integer?)
(s/def ::list
(s/coll-of ::element))
(s/def ::map
(s/keys :req [::list]))
;; I'd like to make the '::map' spec more restrictive, i.e. only accept a
@xsc
xsc / ast_spec.clj
Last active October 29, 2016 12:37
Useless Language AST (clojure.spec)
;; The AST consists of declarations and calls.
(s/def :lang/ast
(s/keys :req [:lang/declarations :lang/calls]))
;; Throughout, we'll use variables/calls identified by their name.
(s/def :lang/name
(s/and string? #(re-matches #"[a-z]+" %)))
(s/def :lang/variable-name
:lang/name)
@xsc
xsc / user.clj
Created May 11, 2018 10:12
Transforming rewrite-clj's Midje testcases to standard Clojure tests
(ns user
(:require [rewrite-clj.zip :as z]
[rewrite-clj.node :as n]))
(defn token=
[loc v]
(and (= :token (z/tag loc))
(= v (z/sexpr loc))))
(defn fact?
@xsc
xsc / ListNode.java
Created March 22, 2020 17:28
Haxlike (Java)
package yannick.haxl;
import java.util.List;
import java.util.stream.Collectors;
import lombok.Value;
@Value
public class ListNode<T> implements Node<List<T>> {
List<Node<T>> elements;