Haskell - Collatz P77791


Statement
 

pdf   zip

thehtml

En aquest problema es proposen algunes funcions referents a la coneguda conjectura de Collatz.

Considereu el procés següent: donat un natural, si és parell es divideix per dos, altrament es multiplica per tres i se li suma una unitat.

La conjectura de Collatz diu que aplicant iterativament aquest procés a qualsevol natural finalment s’arriba a u.

Definim una relació d’equivalència: dos naturals estan relacionats si i només si la longitud de les respectives sèries de Collatz és la mateixa.

  1. Feu una funció serieCollatz :: Integer -> [Integer] que, donat un natural, retorni la seva sèrie de Collatz.
  2. Feu una funció collatzMesLlarga :: Integer -> Integer que, donat natural n, digui quina és la longitud de la sèrie més llarga dels naturals menors o iguals a n.
  3. Feu una funció representantsCollatz :: [Integer] -> [Integer] que retorni un representant, el mínim, de cada classe, ordenades creixentment per longitud de sèrie, del conjunt de naturals donats
  4. Feu una funció classeCollatz :: Integer -> Either Int [Integer] que, donat el representant d’una classe, retorni la longitud de la seva sèrie de Collatz si aquesta és major a trenta-cinc o altrament retorni la classe ordenada creixentment.

Puntuació

Cada funció puntua 25 punts.

Public test cases
  • Input

    serieCollatz 3
    collatzMesLlarga 500
    representantsCollatz [1..20]
    classeCollatz 27
    classeCollatz 12
    

    Output

    [3,10,5,16,8,4,2,1]
    144
    [1,2,4,8,16,5,10,3,6,12,17,11,7,14,9,18]
    Left 112
    Right [12,13,80,84,85,512]
    
  • Information
    Author
    Jan Mas Rovira
    Language
    Catalan
    Official solutions
    Haskell
    User solutions
    Haskell