Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

object Util {
/** Merges a collection of streams into a single stream.
*
* Returns a sorted stream if all input streams are sorted.
*/
def mergeStreams[A](streams: Traversable[Stream[A]])(implicit ord: Ordering[A]): Stream[A] = {
val streams1 = streams.toList filterNot (_.isEmpty) sortBy (_.head)
if (streams1.isEmpty)
Stream.empty
else {
/** Implicit class for adding `|>` and `tap` operations to `AnyVal`.
*
* See `http://stackoverflow.com/a/11120847/839131`.
*/
implicit class PipeAndTap[A](val x: A) extends AnyVal {
/** Applies `f` to the underlying value and returns the result. */
def |>[B](f: A => B) = f(x)
/** Applies `f` to the underlying value `x` (presumably with side effects)
* and returns `x`.
;; ummels's solution to Squares Squared
;; https://4clojure.com/problem/138
(fn [start end]
(letfn
[(squares [start end]
(take-while #(<= % end) (iterate #(* % %) start)))
(arrange [x]
(let [n (count x)
dim (int (Math/ceil (Math/sqrt n)))
(fn [s e]
(let [squares (apply str (take-while #(<= % e) (iterate #(* % %) s)))
filler (drop (count squares) (repeat (#(* % %) (Math/ceil (Math/sqrt (count squares)))) \*))
elements (concat squares filler)
dimension (int (Math/sqrt (count elements)))
cardinal (- (* 2 dimension) 1)
canvas (vec (repeat cardinal ""))
start-pos (* 2 (quot (dec dimension) 2))
path (take (count elements) (mapcat #(repeat (+ 2 (* 2 %)) (if (odd? %) dec inc)) (range)))
balance (fn [c] (#(apply str `(~@% ~@(interpose \ c) ~@%)) (repeat (/ (- cardinal (- (* 2 (count c)) 1)) 2) \ )))]
(fn [l u]
(let [s (apply str (take-while #(<= % u) (iterate #(* % %) l)))
d (int (Math/ceil (Math/sqrt (count s))))
n (concat (seq s) (repeat (- (* d d) (count s)) \*))
m (loop [m {} sx n
r (if (even? d) (- d 2) (dec d)) c (- d 1)
dr (mapcat #(repeat (* % 2) (if (even? %) -1 1)) (range))
dc (mapcat #(repeat (inc (* % 2)) (if (even? %) 1 -1)) (range))]
(if (empty? sx) m
(recur (assoc m [r c] (first sx)) (rest sx)
;; ummels's solution to Love Triangle
;; https://4clojure.com/problem/127
(fn [mine]
(let [n (count mine)
ln #(loop [r 1 v %] (if (< v 2) r (recur (inc r) (quot v 2))))
m (apply max (map ln mine))
lmax (fn [xs] ; treats nil as -infinity
(let [a (first xs) r1 (rest xs) b (first r1) r2 (rest r1)]
(cond (empty? r1) a
@ummels
ummels / hack.sh
Created March 31, 2012 12:03 — forked from erikh/hack.sh
OSX For Hackers
#!/usr/bin/env sh
##
# This is script with usefull tips taken from:
# https://github.com/mathiasbynens/dotfiles/blob/master/.osx
#
# install it:
# curl -sL https://raw.github.com/gist/2108403/hack.sh | sh
#
@ummels
ummels / fontforge.patch
Created August 21, 2012 20:56
Patch for compiling FontForge under OS X 10.7
diff --git a/fontforge/macbinary.c b/fontforge/macbinary.c
index a452d5b..d90f567 100644
--- a/fontforge/macbinary.c
+++ b/fontforge/macbinary.c
@@ -37,7 +37,7 @@
#include "psfont.h"
#if __Mac
# include <ctype.h>
-# include </Developer/Headers/FlatCarbon/Files.h>
+# include <CoreServices/CoreServices.h>
@ummels
ummels / Tram-BS.md
Last active November 9, 2015 15:29
Tram Braunschweig Werbeliste

Tram Braunschweig Werbeliste

Fahrzeugliste

GT6S (AEG/LHB)

9551 grau-weiß
9552 Fliesen Winter
9553 Schwarzer Herzog/Wolters Pilsener
9554 Mc V

val m = Map(0 -> 'a')
for (n <- 0 until 2) {
m.get(n) match {
case Some(x) => println(s"Value found for key $n: $x")
case None => println(s"No value found for key $n")
}
}