Skip to content

Instantly share code, notes, and snippets.

@devnoo
Created September 19, 2012 13:53
Show Gist options
  • Save devnoo/3749812 to your computer and use it in GitHub Desktop.
Save devnoo/3749812 to your computer and use it in GitHub Desktop.
seven languages in seven weeks: clojure day2
(defn ceasarEncodeChar [char, shift] (nth infAlphabetSeq (+ shift (indexInAlphabet char) )))
(defrecord CeasarCipher [shift] Cipher
(encode [c, message] (reduce str (map #(ceasarEncodeChar %1 shift) message )))
)
(def ceasar1 (CeasarCipher. 3))
(println (.encode ceasar1 "message"))
(println (encode ceasar1 alphabet ))
(def ceasar2 (CeasarCipher. 15))
(println (.encode ceasar2 "message"))
(println (encode ceasar2 alphabet ))
(require 'clojure.string )
(use '[clojure.string :only [lower-case]])
(defprotocol Cipher (encode [c, message]) )
(def alphabet "abcdefghijklmnopqrstuvwxyz")
(def infAlphabetSeq (cycle (seq alphabet)))
(defn indexInKey[key, letter] (.indexOf key, (lower-case letter)))
(defn indexInAlphabet [letter] (indexInKey alphabet, letter ))
(defrecord SubstitutionCipher [key] Cipher
(encode [c, message] (reduce str (map #(nth (distinct (concat key alphabet )) (indexInAlphabet %1)) message )))
)
(def c (SubstitutionCipher. "zebra"))
(println (.encode c "message"))
(println (encode c alphabet ))
(defmacro unless [test body elsebody] (list 'if-not test body elsebody))
(unless false (println "if") (println "else"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment