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.
Feu una funció
serieCollatz :: Integer -> [Integer] que, donat un
natural, retorni la seva sèrie de Collatz.
Feu una funció
collatzMesLlarga :: Integer -> Integer que, donat
natural
,
digui quina és la longitud de la sèrie més llarga dels naturals menors o
iguals a
.
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
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.
Cada funció puntua 25 punts.
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]