Skip to content

Instantly share code, notes, and snippets.

@jsoffer
Created February 3, 2010 05:16
Show Gist options
  • Save jsoffer/293348 to your computer and use it in GitHub Desktop.
Save jsoffer/293348 to your computer and use it in GitHub Desktop.
paso :: (Integer, Integer, Integer) -> (Integer, Integer, Integer)
paso (1, n, 0) = (1, n, 0)
-- paso (-1, 2, 1) = (1, 1, 0)
paso (1, 2, n) = paso (2, 3, n) -- directo (3x+1)/2
paso (1, 3, n)
| even n = paso (1, 2, 3 * (div n 2)) -- convierto 3*2*k en 2*3*k
| odd n = paso (2, 3, div (n-1) 2) -- muevo un 3 al lado izquierdo, divido
paso (2, 3, n)
| even n = paso (1, 3, div n 2) -- divido
| odd n = paso (-1, 2, 3 * (div (n + 1) 2)) -- 3 al lado derecho, convierto
paso (-1, 2, n) = paso (-1, 3, n) -- directo
paso (-1, 3, n)
| even n = paso (-1, 2, 3 * (div n 2)) -- convierto 3*2*k en 2*3*k
| odd n = paso (1, 3, div (n-1) 2) -- muevo un 3 al lado izquierdo, divido
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment