Menu Close

Polinomio digital

Definir la función

   polinomioDigital :: Int -> Polinomio Int

tal que (polinomioDigital n) es el polinomio cuyos coeficientes son los dígitos de n. Por ejemplo,

   λ> polinomioDigital 5703 
   5*x^3 + 7*x^2 + 3

Nota: Este ejercicio debe realizarse usando únicamente las funciones de la librería I1M.Pol que se encuentra aquí y se describe aquí.

Soluciones

import I1M.Pol
 
polinomioDigital :: Int -> Polinomio Int
polinomioDigital = creaPolDensa . digitos
 
-- (digitos n) es la lista de las dígitos de n. Por ejemplo,        
--    dígitos 142857  ==  [1,4,2,8,5,7]
digitos :: Int -> [Int]
digitos n = [read [x]| x <- show n]
 
-- (creaPolDensa xs) es el polinomio cuya representación densa es
-- xs. Por ejemplo, 
--    creaPolDensa [7,0,0,4,0,3]  ==  7*x^5 + 4*x^2 + 3
creaPolDensa :: (Num a, Eq a) => [a] -> Polinomio a
creaPolDensa []     = polCero
creaPolDensa (x:xs) = consPol (length xs) x (creaPolDensa xs)

6 soluciones de “Polinomio digital

  1. alerodrod5
    import I1M.PolOperaciones
     
    polinomioDigital :: Int -> Polinomio Int
    polinomioDigital x = creaPolDispersa [read [d] | d <- show x]
     
    creaPolDispersa :: (Num a, Eq a) => [a] -> Polinomio a
    creaPolDispersa []     = polCero
    creaPolDispersa (x:xs) = consPol (length xs) x (creaPolDispersa xs)
  2. esppercab
    import I1M.Pol
     
    polinomioDigital :: Int -> Polinomio Int
    polinomioDigital n =
      creaPolDis (length (digitos n)-1) (digitos  n)
     
    creaPolDis :: Int -> [Int] -> Polinomio Int
    creaPolDis _ []     = polCero
    creaPolDis y (x:xs) = consPol y x (creaPolDis (y-1) xs)
     
    digitos :: Int -> [Int]
    digitos n = [read [x] | x <- show n]
  3. angruicam1
    import I1M.Pol   (Polinomio, consPol, polCero)
    import Data.Char (digitToInt)
     
    polinomioDigital :: Int -> Polinomio Int
    polinomioDigital =
      foldl (flip (uncurry consPol)) polCero . 
      zip [0..] . reverse . map digitToInt . show
  4. albcarcas1
    import I1M.Pol
     
    polinomioDigital :: Int -> Polinomio Int
    polinomioDigital n =
      aux (zip (map digitToInt a) (reverse [0..length a - 1]))
      where a = show n
            aux []         = polCero
            aux ((x,y):xs) = consPol y x (aux xs)
  5. goncarlop
    import I1M.Pol
     
    polinomioDigital :: Int -> Polinomio Int
    polinomioDigital n
      | n < 10 && n >= 0 = consPol 0 n polCero
      | n < 0            = polinomioDigital (abs n)
      | n >= 10          = consPol (length c - 1)
                                   (head [read [x] | x <- c])
                                   (polinomioDigital (read (tail c)))
      where c = show n
  6. Chema Cortés
    import I1M.Pol
     
    polinomioDigital :: Int -> Polinomio Int
    polinomioDigital n = foldr ($) polCero fs
      where
        digitos = [read [c] | c <- show n]
        fs = zipWith consPol [0..] (reverse digitos)

Escribe tu solución

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.