Skip to content

Instantly share code, notes, and snippets.

@cgrand
Forked from scientific-coder/fib-seq-1.clj
Created March 8, 2012 15:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cgrand/2001504 to your computer and use it in GitHub Desktop.
Save cgrand/2001504 to your computer and use it in GitHub Desktop.
Code snippets for Duchess-fr Battle Language 2012-02-29 test it on http://tryclj.com/ !
(def fib-seq
"lazy seq of Fibonacci numbers"
(lazy-cat [0 1] (map + (rest fib-seq) fib-seq)))
(def fib-seq
(map first (iterate (fn[[a b]] [b (+ a b)]) [0 1])))
(def fizzbuzz
"lazy seq of fizzbuzz"
(lazy-seq (map #(let [s (str (if (zero? (rem % 3)) "Fizz")
(if (zero? (rem % 5)) "Buzz"))]
(if (empty? s) % s))
(iterate inc 1))))
(def fizzbuzzzapp
"lazy seq of fizzbuzzzapp more interesting (imo)than fizzbuzz
because it starts to pay off to factor some code "
(lazy-seq (map #(let [s (apply str (for [[val name] [[3 "Fizz"]
[5 "Buzz"]
[7 "Zapp"]]]
(if (zero? (rem % val)) name)))]
(if (empty? s) % s))
(iterate inc 1))))
(defn menu [budget items ]
"items is a collection of [food price] by C.Grand
returns the combination of food and total price with max price <= budget"
(letfn [(submenus [items]
(if-let [[[food price] & xs] (seq items)]
(let [menus (submenus xs)]
(concat menus (for [[m p] menus
:let [p (+ p price)]
:when (<= p budget)]
[(conj m food) p])))
[[#{} 0]]))]
(apply max-key second (submenus items))))
(menu 1505 [["Mixed Fruit" 215]["French Fries" 275]["Side Salad" 335]["Hot Wings" 355]["Mozzarella Sticks" 420]["Sampler Plate" 580]] )
(defn menu [budget items]
"items is a collection of [food price] by C.Grand
returns the combination of food and total price with max price <= budget"
(apply max-key second
(reduce (fn [current-menus [item price]]
(reduce (fn [cc-m [food p]]
(let [new-p (+ p price)]
(if (<= new-p budget)
(conj cc-m [(conj food item) new-p])
cc-m)))
current-menus
current-menus))
[[[] 0]]
items)))
(menu 1505 [["Mixed Fruit" 215]["French Fries" 275]["Side Salad" 335]["Hot Wings" 355]["Mozzarella Sticks" 420]["Sampler Plate" 580]] )
(defn menu
"items is a collection of [food price]
returns the combination of food and total price with max price <= budget"
[items budget]
(->
(reduce (fn [menus [food price]]
(into menus (for [[total foods] menus]
[(+ total price) (conj foods food)])))
(sorted-map 0 #{}) items)
(rsubseq <= budget)
first))
(menu [["Mixed Fruit" 215]["French Fries" 275]["Side Salad" 335]["Hot Wings" 355]["Mozzarella Sticks" 420]["Sampler Plate" 580]] 1505)
(defn menu [items budget]
"items is a collection of [food price]
returns the combination of food and total price with max price <= budget"
(apply max-key #(get % 1); take max price
(filter (fn [[food price]] (<= price budget )); budget restriction
(for [ i (range 0 (bit-shift-left 1 (count items)))]
(reduce (fn [[food price] [f p]] [(conj food f) (+ price p)])
[[] 0]; combine food and sum prices
(keep-indexed #(if (not= 0 (bit-and i (bit-shift-left 1 %1)))
%2)
items))))))
(menu [["Mixed Fruit" 215]["French Fries" 275]["Side Salad" 335]["Hot Wings" 355]["Mozzarella Sticks" 420]["Sampler Plate" 580]] 1505)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment