Skip to content

Instantly share code, notes, and snippets.

View dmalikov's full-sized avatar
🥞
!

Dmitry Malikov dmalikov

🥞
!
View GitHub Profile
@dmalikov
dmalikov / pr214.hs
Created December 31, 2011 00:00
Project Euler 214 (190s)
import PECore (eulerTotient)
import Data.Numbers.Primes
import Control.Arrow ((&&&))
eulerChains :: Integer -> Integer
eulerChains 1 = 1
eulerChains n = 1 + eulerChains (eulerTotient n)
main = print . sum . map fst . filter ( (== 25) . snd ) . map ((&&&) id eulerChains) . takeWhile (<40000000) $ primes
@dmalikov
dmalikov / pr95.hs
Created December 30, 2011 13:37
Project Euler 95 (35s)
import Data.Numbers.Primes
import Data.List (group, sort)
import Control.Arrow ((&&&))
sumOfDivisors :: Integer -> Integer
sumOfDivisors n = (-n +) . product . map ( productOfPowers . (&&&) head length ) . group . primeFactors $ n
where
productOfPowers :: (Integer, Int) -> Integer
productOfPowers (base, power) = sum [ base ^ powers | powers <- [0..power] ]
@dmalikov
dmalikov / pr78.hs
Created December 28, 2011 20:01
Project Euler 78 (14s)
import Data.Array
pentagonals :: [Int]
pentagonals = [ n*(3*n-1) `div` 2 | n <- pentagonalIndices ]
where
pentagonalIndices :: [Int]
pentagonalIndices = concatMap (\x -> [x,-x]) [1..]
partition :: Array Int Integer
partition = listArray (0, 100000) $ 1 : 1 : map partition' [2..]
import Control.Arrow (second)
class Fluffy f where
furry :: (a -> b) -> f a -> f b
-- Exercise 1
-- Relative Difficulty: 1
instance Fluffy [] where
furry _ [] = []
furry f xs = foldr ((:) . f) [] xs
@dmalikov
dmalikov / pr75.hs
Created December 1, 2011 20:47
Project Euler 75 (3 s)
import Data.List
possibleTriangles :: Integer -> Int
possibleTriangles n = length . filter (\x -> length x == 1) . group . sort . concat $ [ [s,2*s..n] | i <- [1,3..(upperBound n)]
, j <- [2,4..(upperBound n)-i]
, gcd i j == 1
, let s = abs (j*j - i*i) + 2*i*j + i*i + j*j ]
upperBound :: Integer -> Integer
upperBound = truncate . sqrt . fromIntegral
@dmalikov
dmalikov / BooleanMatrix.hs
Created December 1, 2011 19:34
Research R- and L-classes over boolean matrices
import Data.List (find, partition)
import Control.Monad (replicateM, join)
import Control.Arrow ((***))
import Data.Maybe (fromJust)
import BooleanMatrixCore
{-- Matrix researches --}
pairsFromRclass :: (Int, Int) -> [(BooleanMatrix, BooleanMatrix)]
@dmalikov
dmalikov / pr123.hs
Created November 30, 2011 20:21
Project Euler 123 (0.02 s)
import Data.Numbers.Primes
main = print . fst . head . dropWhile (\x -> snd x < (10^10)) . map (\(n,p) -> (n, (2 * p * n)) ) $ zip [2..] primes
@dmalikov
dmalikov / pr179.hs
Created November 29, 2011 21:39
Project Euler 179 (54s)
import Data.Numbers.Primes
import Control.Arrow ((***))
import Control.Monad (join)
import Data.List (group)
main = print . length . filter (==True) . map (uncurry (==) . join (***) (product . map ((1+) . length) . group . primeFactors)) $ [(x,x+1) | x <- [1..(10^7)]]
@dmalikov
dmalikov / pr118.hs
Created November 28, 2011 18:05
Project Euler 118 (4m 46s)
import Data.List.Split (splitPlaces)
import Data.List (permutations, sort, nub)
import Data.Numbers.Primes
import Data.Bits
import Data.Digits
import Data.Char (digitToInt)
listToNum :: [Int] -> Integer
listToNum = toInteger . foldl1 ((+).(*10))
@dmalikov
dmalikov / pr206.hs
Created November 28, 2011 16:54
Project Euler 206 (1 s)
import Data.List (find)
import Control.Monad (replicateM)
import Data.Maybe (fromJust)
import Numeric (showFFloat)
isSquare :: Integer -> Bool
isSquare x = x'*x' == x
where x' = truncate $ sqrt (fromIntegral x :: Double)
sew :: [Integer] -> Integer