Skip to content

Instantly share code, notes, and snippets.

View rmfbarker's full-sized avatar

Richard Barker rmfbarker

View GitHub Profile
;; add lein dep:
;; [org.bouncycastle/bcpg-jdk15on "1.51"]
;; export gpg public & private keys to armored files:
;; gpg -ao pub.asc --export XXXXXXXX
;; gpg -ao pk.asc --export-secret-keys XXXXXXXX
;; usage:
;; (encrypt "foo.txt" "foo.gpg" (pub-key "pub.asc"))
;; (decrypt "foo.gpg" (io/output-stream "foo.txt") (secret-key "ks-pk.asc") "passphrase")
(defn ignore-trailing-slash
"Modifies the request uri before calling the handler.
Removes a single trailing slash from the end of the uri if present.
Useful for handling optional trailing slashes until Compojure's route matching syntax supports regex.
Adapted from http://stackoverflow.com/questions/8380468/compojure-regex-for-matching-a-trailing-slash"
[handler]
(fn [{uri :uri :as request}]
(handler (assoc request :uri (cond (= "/" uri) uri
(.endsWith uri "/") (apply str (butlast uri))
@rmfbarker
rmfbarker / poker.scala
Created September 10, 2013 23:58
Poker
import scala.io.Source
// object Main extends App {
// hands in form of '5H 5C 6S 7S KD'
val ROYAL_FLUSH = "TJQKA"
val PROGRESSION = "23456789TJQKA"
def rank(hand: String): (Int, String) = {
@rmfbarker
rmfbarker / Sieve.scala
Created August 28, 2013 01:45
Sieve in Scala
import scala.collection.mutable.BitSet
def sieve_of_eratosthenes(max: Int) = {
val sieve = BitSet()
def index(k: Int): Int = (k - 3) / 2
def validIdx(k: Int): Boolean = k >= 3 && (k % 2) == 1
def is_composite(k: Int): Boolean = {
@rmfbarker
rmfbarker / Factors.java
Created August 23, 2013 05:59
Work out the prime factors from a given integer and also the number of factors for that integer. Adopted from http://introcs.cs.princeton.edu/java/13flow/Factors.java.html
import java.util.*;
public class Factors {
public static List<Long> primeFactors(long n) {
List<Long> result = new ArrayList<Long>();
// for each potential factor i
for (long i = 2; i*i <= n; i++) {
// if i is a factor of N, repeatedly divide it out
import java.util.BitSet;
import java.util.List;
import java.util.ArrayList;
public class Sieve {
private BitSet sieve;
private Sieve(int size) {
sieve = new BitSet((size + 1) / 2);
}