Skip to content

Instantly share code, notes, and snippets.

Steve Miner miner

Block or report user

Report or block miner

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 smt.clj
;;; http://johnj.com/from-elegance-to-speed.html
;;;
;;; The author of the above blog post says that his `smt-8` was slow so he re-wrote it in
;;; Common Lisp and got nearly 300x improvement. I wrote some pure Clojure variations
;;; showing much improved performance over the original.
;;;
;;; Criterium for benchmarking: https://github.com/hugoduncan/criterium/
(ns miner.smt
(:require [criterium.core :as cc]))
@miner
miner / pal.clj
Created Oct 2, 2018
find longest palindromic substring using Clojure
View pal.clj
(ns miner.pal
(:require [criterium.core :as crit]
[clojure.string :as str]))
;; An exercise from Apropos Clojure #18 video cast:
;; https://www.youtube.com/watch?v=elF9BPa0Np4
;;
;; Their solution is something like this...
@miner
miner / apropos3.clj
Created Mar 19, 2018
a stateful transducer inspired by @apropos_cast episode #3
View apropos3.clj
(defn digits [n]
{:pre [(int? n) (>= n 0)]}
(loop [digs () remainder n]
(if (< remainder 10)
(conj digs remainder)
(recur (conj digs (rem remainder 10)) (quot remainder 10)))))
(defn digits+rev [n]
(let [ds (digits n)]
(concat ds (reverse ds))))
@miner
miner / map-alt.clj
Created Mar 14, 2018
map-alt transducer
View map-alt.clj
;; map-alt is like the map xform but calls the funtions in an alternating order
;; (f i0) (g i1) (h i2) (f i3) ...
;;
;; In other words, map-alt spreads fn calls across elements, whereas (mapcat (juxt ...)) calls all
;; fns on each element.
(defn map-alt
([] (map identity))
([f] (map f))
@miner
miner / kein.sh
Last active Apr 29, 2017 — forked from cgrand/kein.sh
Launch a plain clojure repl according to project.clj without leiningen (most of the time)
View kein.sh
#!/bin/bash
# launch a clojure plain repl but with options and classpath matching project.clj
# Except when project.clj changes (and on first launch), lein is not called.
if [ ! -f "project.clj" ]; then
echo "No project.clj"
exit 1
fi
# stat (mostly) protects against staleness of copied project dir
@miner
miner / bowling.clj
Last active May 19, 2016
Bowling Kata in Clojure
View bowling.clj
(ns miner.bowling)
;; http://codingdojo.org/cgi-bin/index.pl?KataBowling
;; https://www.javacodegeeks.com/2016/05/bowling-kata-clojure-f-scala.html
;; game is a string, encoding balls rolled
;; X for strike
;; / for spare
;; - for a miss or gutter ball
;; 1-9 for that many pins
@miner
miner / gdiff
Last active Nov 30, 2017
using FileMerge as git difftool on Mac OS X
View gdiff
#!/bin/bash
# my git difftool, calls FileMerge with project as -merge target
# better than using opendiff
#
# cd to your project dir and and run difftool like this:
# git difftool -d -x gdiff
# find top level of git project
dir=$PWD
until [ -e "$dir/.git" ]; do
View dijkstra_primes.clj
(ns miner.dijkstra-primes)
;; ----------------------------------------------------------------------
;; http://heinrichhartmann.com/2016/04/03/Dijkstra's-Prime-Number-Algorithm.html
;; https://github.com/HeinrichHartmann/DijkstraPrimes/blob/master/Primes.lua
;; Converted to Clojure by SEM. Note that there are lots of shadowing and recursive calls in
;; the Clojure code to avoid the mutation in the original code. The Clojure loops are a bit
;; ugly. Not sure if this is the best way to do things. However, the performance is pretty
;; good.
View keybase.md

Keybase proof

I hereby claim:

  • I am miner on github.
  • I am miner (https://keybase.io/miner) on keybase.
  • I have a public key whose fingerprint is DB15 4E49 B5BD BE5A 10B4 4437 6A9B 8B0A 4D6A 8900

To claim this, I am signing this object:

View lucky.clj
(ns miner.lucky
(:require [clojure.data.avl :as avl]))
;; http://en.wikipedia.org/wiki/Lucky_number
(defn lucky-avl
([max] (lucky-avl 1 (apply avl/sorted-set (range 1 max 2))))
([i avl]
(let [n (nth avl i nil)]
(if (and n (<= n (count avl)))
You can’t perform that action at this time.