Skip to content

Instantly share code, notes, and snippets.

@ray1729
ray1729 / gist:453499
Created Jun 25, 2010
Process Jan's SNP data with Clojure
View gist:453499
;; This is a suggested improvement for processing SNP data, in response
;; to Jan Aerts' blog post <http://saaientist.blogspot.com/2010/06/encounter-with-incanter-about-clojure.html>.
;; Note that this example is for Clojure 1.1.0; if you're using Clojure 1.2, change the ns definition
;; to use clojure.contrib.io instead of duck-streams.
(ns ray1729.clojure.bio.snps
(:use [clojure.contrib.duck-streams :only (read-lines)]))
(defn parse-line
[s]
@ray1729
ray1729 / gist:521160
Created Aug 12, 2010
Process common chunks of a sorted input stream
View gist:521160
#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';
my ( $key, @values ) = next_record();
while ( defined $key ) {
my ( $next_key, @next_values ) = next_record();
if ( defined $next_key and $next_key eq $key ) {
@ray1729
ray1729 / secret_santa.clj
Created Nov 23, 2010
Pair up names for Secret Santa
View secret_santa.clj
(defn secret-santa
[names]
(let [s (shuffle names)]
(partition 2 1 (cons (last s) s))))
@ray1729
ray1729 / gist:848069
Created Feb 28, 2011
Example keep-only implementation to keep at most n elements in each bucket of a sequence
View gist:848069
(defn keep-only
[n bucket-fn s]
(letfn [(my-filter
[s seen]
(when (seq s)
(let [e (first s)
b (bucket-fn e)
c (inc (get seen b 0))]
(if (> c n)
(recur (rest s) seen)
@ray1729
ray1729 / gist:896702
Created Mar 31, 2011
Possible Regexp::Common API for Clojure
View gist:896702
;; Perl: $RE{num}{-base => 2}{real}{-group => 3}{-sep => ','}
(re-seq (re :real {:base 2 :group 3 :sep \,} ) "1.345")
View gist:903268
(defn parse-flags
"Parse a list of flags. Each flag name must be a keyword, and the
value must not be a keyword. If the value is omitted, true is
assumed. Returns a map.
e.g. (parse-flags [:i :j 1 :k \"two\"])
=> {:i true, :j 1, :k \"two\"}"
[flags]
(loop [flags (seq flags) accum {}]
(if flags
@ray1729
ray1729 / gist:1217621
Created Sep 14, 2011
Minimal set containing at least one element from each of a list of sets
View gist:1217621
(ns clj-playground.enzyme-selection
(:require [clojure.data.csv :as csv]
[clojure.java.io :as io]))
(defn read-enzyme-data
"Read clone/analysis/enzyme data from CSV file filename. Group
enzymes for each clone/analysis pair into a set and return a list of
sets of enzymes"
[filename]
(with-open [in-file (io/reader filename)]
@ray1729
ray1729 / gist:1349435
Created Nov 8, 2011
How many ways can we roll 10 dice and have all the digits 1-6 appear at least once?
View gist:1349435
(defn factorial [n] (reduce * (range 1 (inc n))))
(defn multinomial [n & ms]
(/ (factorial n) (reduce * (map factorial ms))))
(def N (reduce + (for [m1 (range 1 6)
m2 (range 1 (- 7 m1))
m3 (range 1 (- 8 m1 m2))
m4 (range 1 (- 9 m1 m2 m3))
m5 (range 1 (- 10 m1 m2 m3 m4))
@ray1729
ray1729 / uniq.pl
Created Jun 14, 2012
Build array of unique data from a file
View uniq.pl
#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';
my %seen;
my @uniq;
while ( <> ) {
chomp;
View gist:2929488
#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';
use List::Util qw(max min);
my @COLS = qw( label _ chr strand start end );
my @KEY_COLS = qw( label chr strand );