0votos

Simplicidad y eficiencia en Haskell

por josejuan hace 6 años

Obviamente el problema está puesto para ser escrito en un lenguaje perezoso y por tema de escritura, funcional. Vamos Haskell. Sin embargo... (ver mi siguiente solución).

Definir simple y eficientemente la función f tal que f(x,y,z) = y, si x <= y; f(x,y,z) = f(f(x-1,y,z),f(y-1,z,x),f(z-1,x,y)), en caso contrario.

1
2
3
4
5
6
7
8
9
f x y z = if x <= y then y else f (f (x - 1) y z) (f (y - 1) z x) (f (z - 1) x y) 
g n = f n 0 (n + 1) 
 
#============================================================== 
# Prelude> g 242500 
# 242501 
# (0.94 secs, 136896680 bytes) 
#  
# NOTA: a veces supera el segundo, a veces no. 
2 comentarios
0votos

Escrito por josejuan hace 6 años

Compilándolo no se va mucho del de C, pero queda atrás :P

$ /usr/bin/time -f "%M, %E" ./f +RTS -K80000000 -RTS
600001
144888, 0:01.18
0votos

Escrito por jneira hace 6 años

Y el codigo c sin compilar? :-P

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.