Skip to content

Instantly share code, notes, and snippets.

def swap_max(digits):
i = len(digits) - 1
while i > 0:
if digits[i] == 0:
i-= 1
else:
break
max_i = i
min_i = i
pot_i = i
@triclops200
triclops200 / CollatzPrimeRatio.lisp
Last active December 21, 2015 00:58
Collatz Prime Ratio Visualizer
(defmacro while (test &body body)
`(do ()
((not ,test))
,@body))
(defmacro with-gensyms (syms &body body)
`(let ,(mapcar #'(lambda (x) `(,x (gensym))) syms)
,@body))
(defmacro collect-list (end-condition next-value var)
(defun nfib (a b c n)
(if (= n 0)
a
(nfib b c (/ (+ b c) a) (1- n))))
(defmacro while (test &body body)
`(do ()
((not ,test))
,@body))
(defmacro defmem
[name parms & body]
(let [fname (gensym) memname (gensym)]
`(do (declare ~name)
(letfn [(~fname ~parms ~@body)]
(let [~memname (atom {})]
(defn ~name ~parms
(if (contains? @~memname ~parms)
(get @~memname ~parms)
(do (swap! ~memname assoc ~parms (~fname ~@parms))

Keybase proof

I hereby claim:

  • I am triclops200 on github.
  • I am triclops200 (https://keybase.io/triclops200) on keybase.
  • I have a public key whose fingerprint is 4431 1C41 2E68 1420 F8BB 42C2 F1FD 4C42 277B 46E7

To claim this, I am signing this object:

(defun iterator-from-combos (&rest lists)
"Takes a set of lists, and returns an iterator that iterates through every
possible combo of values where each value is from the list passed at its
index."
; If any of the passed lists are nil, no combos can be made.
(if (contains nil lists)
; There are no combos, return an empty iterator.
(lambda () (values nil t))
; Otherwise, build the combos iterator.
(labels
(defun iterator-from-combos (&rest lists)
"Takes a set of lists, and returns an iterator that iterates through every
possible combo of values where each value is from the list passed at its
index."
(if (contains nil lists) ;; If any of the passed lists are nil, no combos can be made.
(lambda () (values nil t)) ;; There are no combos, return an empty iterator.
(labels ;; Otherwise, build the combos iterator.
((shift (lists base) ;; Shifts the set of lists down by one.
;; Returns two values, the new lists, and whether we have hit the end
(if (not lists) ;; If no lists have been passed, we are done shifting.
class Literal:
def __init__(self,value):
self.value = value
class State:
def __init__(self,oldstate=None):
if(oldstate != None):
self.oldstate = [oldstate]
else:
self.oldstate = []
@triclops200
triclops200 / markov.clj
Created August 20, 2014 17:22
markovV2
(defn increment-counter [res word]
(update-in res [word] (fnil inc 0)))
(defn increment-link [dict word1 word2]
(update-in dict [word1] increment-counter word2))
(defn split-text [text]
(filter #(not (re-matches #"\s+" %)) (clojure.string/split text #"[.!?>\-\"\*\)\(]")))
(defn fix-sentences [sentences]
1 3 4 5 7 8 2 3 4 9
20 30
45
108 202