Skip to content

Instantly share code, notes, and snippets.

View dmalikov's full-sized avatar
🥞
!

Dmitry Malikov dmalikov

🥞
!
View GitHub Profile
@dmalikov
dmalikov / pr187.hs
Created November 27, 2011 11:45
Project Euler 187 (21 min)
import Data.Numbers.Primes
semiPrime :: Int -> Bool
semiPrime list = 2 == (length $ primeFactors list)
semiPrimesBelow :: Int -> Int
semiPrimesBelow n = length $ filter semiPrime [1..n-1]
main = putStrLn $ show $ semiPrimesBelow (10^8)
@dmalikov
dmalikov / pr188.hs
Created November 27, 2011 14:46
Project Euler 188 (0.3 s)
moddule = 10 ^ 8
lastDigits x = x `mod` moddule
fastPow :: Integer -> Integer -> Integer -> Integer
fastPow base 1 m = mod base m
fastPow base pow m | even pow = mod ((fastPow base (div pow 2) m) ^ 2) m
| odd pow = mod ((fastPow base (div (pow-1) 2) m) ^ 2 * base) m
tetration a 1 = lastDigits a
tetration a k = lastDigits ( fastPow a' (tetration a' k') moddule)
@dmalikov
dmalikov / pr89.hs
Created November 27, 2011 20:12
Project Euler 89 (0.02 s)
import Roman
import System.Environment
import Data.Char (toUpper)
import Control.Arrow ((&&&))
redundantChars :: String -> Int
redundantChars = (\(x,y) -> length x - length y) . (id &&& (toRoman . fromRoman))
main = do
romans <- getContents
@dmalikov
dmalikov / pr124.hs
Created November 27, 2011 20:42
Project Euler 124 (0.3 s)
import Data.List (nub, sort)
import Data.Numbers.Primes
import Control.Arrow ((&&&))
radical :: Integer -> Integer
radical = product . nub . primeFactors
radicalsSortedBelow :: Integer -> [Integer]
radicalsSortedBelow = map snd . sort . map ((&&&) radical id) . enumFromTo 1
@dmalikov
dmalikov / pr205.hs
Created November 28, 2011 11:13
Project Euler 205 (0.7 s)
import Control.Monad (replicateM, join)
import Data.List (nub, sort, group)
import Control.Arrow ((&&&), (***))
import Numeric (showFFloat)
allVariantsNumber :: Integer
allVariantsNumber = 4^9 * 6^6
groupVariants :: [[Integer]] -> [(Integer,Integer)]
groupVariants = map ((&&&) head (toInteger . length)) . group . sort . map sum
@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
@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 / 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 / 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 / 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)]