Skip to content

Instantly share code, notes, and snippets.

View dmalikov's full-sized avatar
🥞
!

Dmitry Malikov dmalikov

🥞
!
View GitHub Profile
@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 / 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 / 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 / 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 / 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)