Mayor número con dos dígitos dados
Definir la función
1 |
numeroMayor :: Int -> Int -> Int |
tal que (numeroMayor x y)
es el mayor número de dos cifras que puede construirse con los dígitos x
e y
. Por ejemplo,
1 2 |
numeroMayor 2 5 == 52 numeroMayor 5 2 == 52 |
Soluciones
A continuación se muestran las soluciones en Haskell y las soluciones en Python.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
-- 1ª definición: numeroMayor1 :: Int -> Int -> Int numeroMayor1 x y = 10 * max x y + min x y -- 2ª definición: numeroMayor2 :: Int -> Int -> Int numeroMayor2 x y | x > y = 10*x+y | otherwise = 10*y+x -- Comprobación de equivalencia -- ============================ -- La propiedad es prop_numeroMayor :: Bool prop_numeroMayor = and [numeroMayor1 x y == numeroMayor2 x y | x <- [0..9], y <- [0..9]] -- La comprobación es -- λ> prop_numeroMayor -- True |
El código se encuentra en GitHub.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# 1ª definición def numeroMayor1(x: int, y: int) -> int: return 10 * max(x, y) + min(x, y) # 2ª definición def numeroMayor2(x: int, y: int) -> int: if x > y: return 10 * x + y return 10 * y + x # La propiedad de equivalencia de las definiciones es def test_equiv_numeroMayor(): # type: () -> bool return all(numeroMayor1(x, y) == numeroMayor2(x, y) for x in range(10) for y in range(10)) # La comprobación es # >>> test_equiv_numeroMayor() # True |
El código se encuentra en GitHub.