Skip to content

Instantly share code, notes, and snippets.

@fredyr
fredyr / gist:4269003
Created December 12, 2012 16:05
Find sub-squares from a sudoku board
(defn get-squares [cells]
(let [p (partition 3 cells)
q (for [x [0 1 2]] (drop x p))]
r (map #(take-nth 3 %) q)
(partition 9 (flatten r))))
@fredyr
fredyr / gist:4559314
Created January 17, 2013 20:14
Gilded rose hack
def update(item_original, attr, value):
"""
Returns a new dict with attr=value
item = {"name": "+5 Dexterity Vest", "sell_in": 10, "quality": 20}
=> {'sell_in': 10, 'quality': 20, 'name': '+5 Dexterity Vest'}
update(item, 'quality', 5)
=> {'sell_in': 10, 'quality': 5, 'name': '+5 Dexterity Vest'}
"""
item = item_original.copy()
item[attr] = value
@fredyr
fredyr / gilded.clj
Last active December 11, 2015 08:28
Gilded rose in Clojure
; gilded.clj
; (def item {:name "Aged Brie" :sell-in 12 :quality 3})
(defn force-range [quality]
(cond
(< quality 0) 0
(> quality 50) 50
:else quality))
(defn backstage [quality sell-in]
import random
board = ["GO", "A1", "CC1", "A2", "T1", "R1", "B1", "CH1", "B2", "B3", "JAIL",
"C1", "U1", "C2", "C3", "R2", "D1", "CC2", "D2", "D3", "FP",
"E1", "CH2", "E2", "E3", "R3", "F1", "F2", "U2", "F3", "G2J",
"G1", "G2", "CC3", "G3", "R4", "CH3", "H1", "T2", "H2"]
double_board = board * 2
visits = [0] * len(board)
cc_cards = ["GO", "JAIL"] + ["NOP"] * 14
@fredyr
fredyr / es.clj
Last active December 15, 2015 18:38
Event source hack
(def game-results {:rock {:rock :tie, :paper :lose, :scissor :win}
:paper {:rock :win, :paper :tie, :scissor :lose}
:scissor {:rock :lose, :paper :win, :scissor :tie}})
(defn create-game-command
[{:keys [aggregate-id player move]} state]
[{:event :game-created :game-id aggregate-id :creator player
:state-change {:state :started :creator player}}
{:event :move-decided :game-id aggregate-id :player player :move move
:state-change {:move move}}])
@fredyr
fredyr / frp.cljs
Last active December 21, 2015 06:19
FRP version of swannodette's examples on CSP and core.async. http://swannodette.github.io/2013/07/12/communicating-sequential-processes/
;; Mouse move handler
(let [el "#only-mouse"
ch (Bacon.fromEventTarget js/window "mousemove")]
(-> ch
(.map (ƒ [e] (str (.-offsetX e) ", " (.-offsetY e))))
(.onValue (js/$ el) "text")))
(defn location [ch]
(.map ch (ƒ [[tag e]]
[tag {:x (.-offsetX e) :y (.-offsetY e)}])))
@fredyr
fredyr / mcons.clj
Last active December 21, 2015 17:38
Scheme's mcons in Clojure. (Feels kind of dirty to build a mutable data structure, but fun nonetheless)
;; http://docs.racket-lang.org/reference/mpairs.html
(defprotocol IMCons
(mcar [p])
(mcdr [p])
(set-mcar! [p val])
(set-mcdr! [p val]))
(deftype MCons [^{:volatile-mutable true} car ^{:volatile-mutable true} cdr]
IMCons
@fredyr
fredyr / mvar.clj
Last active February 3, 2017 00:52
Haskell's MVars in Clojure
;; MCons Hack - https://gist.github.com/fredyr/6341286
;; Haskell MVars - http://chimera.labs.oreilly.com/books/1230000000929/ch07.html
;; http://www.haskell.org/ghc/docs/latest/html/libraries/base/Control-Concurrent-MVar.html
defn empty-mvar []
(let [take-sem (java.util.concurrent.Semaphore. 1)
put-sem (java.util.concurrent.Semaphore. 1)]
(.acquire take-sem)
(mcons nil (mcons take-sem put-sem))))
@fredyr
fredyr / leader.el
Created September 5, 2013 21:16
evil-leader
(evil-leader/set-leader ",")
(evil-leader/set-key
"f" 'ido-find-file
"b" 'ido-switch-buffer
"w" 'save-buffer
"s" 'save-buffer
"K" 'kill-buffer
"k" 'kill-this-buffer
"T" 'eshell
@fredyr
fredyr / interp.clj
Last active December 22, 2015 19:39
Very basic scheme interpreter based on PAIP (http://norvig.com/paip.html)
(ns interp.core)
(defn get-var [var env] (@env var))
(defn set-var! [var val env]
(swap! env conj {var val}))
(def global-env (atom {}))
(defn ext-env [vars vals env]
(->> (zipmap vars vals)