Jump to content

Fraction reduction: Difference between revisions

m
Line 1,370:
 
possibleFractions :: [Int] -> [Fraction]
possibleFractions xs = [(n,d) | n <- validIntegers xs
[(n,d) | n , d <- validIntegers xs
, dn <- validIntegers xsd
, gcd n < d /= 1]
, gcd n d /= 1 ]
 
digits :: Integral a => a -> a -> [a]
Line 1,382 ⟶ 1,381:
digitsToIntegral = sum . zipWith (*) (iterate (*10) 1)
 
findReductionfindReductions :: Fraction -> [Reduction]
findReductionfindReductions z@(n1, d1) = foldr f [] $ commonDigits z
where
commonDigits (n1, n2) = digits 10 n1 `intersect` digits 10 n2
Line 1,395 ⟶ 1,394:
decimalWithDrop = realToFrac n2 / realToFrac d2
 
findReductionsfindGroupReductions :: [Int] -> [Reduction]
findReductionsfindGroupReductions = (findReductionfindReductions =<<) . possibleFractions
 
showReduction :: Reduction -> IO ()
Line 1,413 ⟶ 1,412:
mapM_ (uncurry showCount) $ zip groups [2..]
where
groups = [ findReductionsfindGroupReductions [10^1..99], findReductions findGroupReductions [10^2..999]
, findReductionsfindGroupReductions [10^3..9999], findReductionsfindGroupReductions [10^4..99999] ]</lang>
{{out}}
<pre>16/64 = 1/4 by dropping 6
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.