Skip to content

Instantly share code, notes, and snippets.

module Q where
data Quarter = NE | NW | SE | SW deriving Show
type Vector = (Float, Float)
quarter :: Vector -> Vector -> Quarter
quarter look target = detect $ angle look - angle target
detect :: Float -> Quarter
detect x
import Control.Monad
import System.Random
import Data.List
size :: Int
size = 3
steps :: Int
steps = 10000
@sphynx
sphynx / gist:4aab07d3e8417f790ea0
Created March 26, 2015 21:38
Solver for probabilistic coupons problem
import Data.Ratio
main :: IO ()
main = print $ result 5
result :: Integer -> Rational
result size = abs $ sum
[ fromIntegral mult * infTailSum size d
| (mult, d) <- coeffs size
]
@sphynx
sphynx / KnightTour.hs
Last active August 29, 2015 14:24
Knight Tour at Haskell Hoodlums
module Main where
import Data.Array
import Data.List
import Data.Ord
import Text.Printf
type Coord = (Int, Int)
type Size = (Int, Int)
@sphynx
sphynx / pairings.hs
Created November 27, 2010 20:41
Pairings average difference calculation
module Main where
import Data.List
monkeys = [{-2416, -} 2117, 2085, 2018, 2013, 2010, 2006, 1929, 1749, 1746, 1678, 1622, 1622, 1586, 1543, 1497, 1487, 1445]
bishops = [2064, 2052, 2031, 1965, 1935, 1930, 1904, 1808, 1772, 1760, 1732, 1730, 1715, 1676, 1656, 1599, 1550, 1523, 1410]
diff :: Num a => [a] -> [a] -> [a]
diff = zipWith (-)
@sphynx
sphynx / gist:807908
Created February 2, 2011 16:04
Tweaking Raphael easing function ">"
// send first ball from (0, 0) to (200, 0)
animate(firstBall, 0, 200)();
// send second ball from (0, 0) to (100, 0) but with the tempo like it was sent to (200, 0)
animateWithTweak(secondBall, 0, 100, 200)();
function animate(ball, start, intended) {
return function () {
ball.animate({cx: intended}, 2000, ">");
}
@sphynx
sphynx / gist:807906
Created February 2, 2011 16:02
Easing function with tweak
// send first ball from (0, 0) to (200, 0)
animate(firstBall, 0, 200)();
// send second ball from (0, 0) to (100, 0) but with the tempo like it was sent to (200, 0)
animateWithTweak(secondBall, 0, 100, 200)();
function animate(ball, start, intended) {
return function () {
ball.animate({cx: intended}, 2000, ">");
}
@sphynx
sphynx / gist:817407
Created February 8, 2011 22:26
Task 3
module Main where
d = [3, 4, 9, 14, 15, 19, 28, 37, 47, 50, 54, 56, 59, 61, 70, 73, 78, 81, 92, 95, 97, 99]
superset [] = [[]]
superset (x:xs) = ss ++ map (x:) ss
where ss = superset xs
check [] = False
check xs = m == sum xs - m where m = maximum xs
@sphynx
sphynx / gist:841213
Created February 23, 2011 21:22
Primes test
primes :: [Integer]
primes = sieve [2..]
where
sieve (p:xs) = p : sieve [x | x <- xs, x `mod` p > 0]
main = print $ primes !! 10000
-- compile with `ghc --make primes.hs`, then run run run :)
@sphynx
sphynx / gist:878631
Created March 20, 2011 20:11
Haskell solution to Project Euler #14 (now with IOUArray, earlier with State)
module Main where
import Data.List (maximumBy)
import Data.Word (Word64)
import Data.Array.IO (IOUArray, newArray, readArray, writeArray, unsafeFreeze)
import Data.Array.Unboxed (UArray)
import Data.Array.IArray (assocs)
import Control.Monad (forM_)
type Cache = IOUArray Word64 Word64