This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; I posted an earlier version on my blog: | |
;; http://fnclojure.wordpress.com/2012/08/06/roman-numerals-in-clojure/ | |
;; This version is faster and more readable. | |
(defn range-down | |
"Returns a seq of integers from HIGH (exclusive) down to LOW (inclusive). | |
LOW defaults to 0. STEP is a positve decrement, defaults to 1. Like | |
`(reverse (range low high step))' but a bit faster." | |
([high] (range (dec high) -1 -1)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;;; 01/14/14 16:18 by miner -- Steve Miner revised this code to be more idiomatic Clojure. | |
;;; | |
; Short sidebar: Clojure has a special form for the efficient compilation of tail recursion. | |
; Something like this would work as a factorial function: | |
(defn fact2 [n] | |
(loop [n n acc 1] | |
(if (zero? n) acc (recur (dec n) (* n acc))))) | |
; We're not going to discuss `recur` any further as we're imagining a language that doesn't |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns miner.infix) | |
;; Inspired by the excellent book "The Joy of Clojure". | |
;; http://fogus.me/fun/unfix/infix-src.html | |
;; | |
;; Converted to be used as a data-reader by Steve Miner. The main change is to preserve | |
;; the prefix forms rather than calculating the result. Also, the reader gets symbols, not | |
;; the actual functions. | |
(def && #(and % %2)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; inspired by https://twitter.com/puredanger/status/241282082268143619 | |
;; reduce-kv is faster than destructuring with maps | |
;; use (get m k) instead of (k m) to be safe with non-keyword keys | |
(defn sub= | |
"Like = for most things, but maps compare recursively by only the keys in a, so it returns true | |
if a is a 'submap' of b." | |
[a b] | |
(if (and (map? a) (map? b)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns miner.roman | |
(:require [clojure.test :refer :all])) | |
;; inspired by | |
;; http://www.jayway.com/2012/08/04/a-decimal-to-roman-numeral-converter-in-just-a-few-lines/ | |
(def roman-map {1000 "M" 900 "CM" 500 "D" 400 "CD" | |
100 "C" 90 "XC" 50 "L" 40 "XL" | |
10 "X" 9 "IX" 5 "V" 4 "IV" 1 "I"}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns sudoku | |
(:refer-clojure :exclude [==]) | |
(:use clojure.core.logic)) | |
(defn get-square [rows x y] | |
(for [x (range x (+ x 3)) | |
y (range y (+ y 3))] | |
(get-in rows [x y]))) | |
(defn init [vars hints] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; http://rosettacode.org/wiki/Four_bit_adder | |
(ns miner.fourbit) | |
;; a bit is represented as a boolean (true/false) | |
;; a word is a big-endian vector of bits [true false true true] = 11 | |
;; maybe little endian is more convenient??? | |
(defn bvec |
NewerOlder