Lasaña

Lasaña

Ejercicio de aprendizaje

Introducción

Todo el track de Julia te exigirá que trates tu solución como pequeñas bibliotecas, es decir, necesitas definir funciones, tipos, etc., que luego se ejecutarán contra una suite de pruebas. Por esa razón, presentaremos las funciones con nombre como el primerísimo concepto.

Julia es un lenguaje de programación dinámico y de tipado fuerte. El estilo de programación es principalmente funcional, aunque con más flexibilidad que en lenguajes como Haskell.

Variables y asignación

No es necesario declarar una variable de antemano. Solo asigna un valor a un nombre adecuado:

julia> myvar = 42  # an integer
42

julia> name = "Maria"  # strings are surrounded by double-quotes ""
"Maria"

Constantes

Si un valor debe estar disponible en todo el programa, pero no se espera que cambie, lo mejor es marcarlo como una constante.

Anteponer la palabra clave const a una asignación permite que el compilador genere código más eficiente que el que es posible para una variable.

Las constantes también te ayudan a protegerte de errores al programar. Si por accidente intentas cambiar el valor de const, obtendrás una advertencia:

julia> const answer = 42
42

julia> answer = 24
WARNING: redefinition of constant Main.answer. This may fail, cause incorrect answers, or produce other errors.
24

Ten en cuenta que un const solo se puede declarar fuera de cualquier función. Por lo general, esto va cerca del inicio del archivo *.jl, antes de las definiciones de funciones.

Operadores aritméticos

Son los mismos que en muchos otros lenguajes:

2 + 3  # 5 (addition)
2 - 3  # -1 (subtraction)
2 * 3  # 6 (multiplication)
8 / 2  # 4.0 (division with floating-point result)
8 % 3  # 2 (remainder)

Funciones

Hay dos maneras comunes de definir una función con nombre en Julia:

  1. Usar la palabra clave function

    function muladd(x, y, z)
        x * y + z
    end
    

    Sangrar con 4 espacios es lo convencional para que el código sea más legible, pero el compilador lo ignora. La palabra clave end es esencial.

    Ten en cuenta que podríamos haber escrito return x * y + z. Sin embargo, las funciones de Julia siempre devuelven la última expresión evaluada, así que la palabra clave return es opcional. Muchos programadores prefieren incluirla para dejar más clara su intención.

  2. Usar la «forma de asignación»

    muladd(x, y, z) = x * y + z
    

    Se usa con más frecuencia para crear funciones concisas de una sola expresión.

    En la forma de asignación, la palabra clave return nunca se usa.

Las dos formas son equivalentes y se usan exactamente de la misma manera, así que elige la que te resulte más legible.

Para invocar una función, se especifica su nombre y se pasan argumentos para cada uno de los parámetros de la función:

# invoking a function
muladd(10, 5, 1)

# and of course you can invoke a function within the body of another function:
square_plus_one(x) = muladd(x, x, 1)

Convenciones de nombres

Como en muchos lenguajes, Julia requiere que los nombres (de variables, funciones y muchas otras cosas) empiecen con una letra, seguida de cualquier combinación de letras, dígitos y guiones bajos.

Por convención, los nombres de variables, constantes y funciones van en minúsculas, con los guiones bajos reducidos a un mínimo razonable.

Instrucciones

En este ejercicio vas a escribir algo de código para ayudarte a cocinar una lasaña espectacular con tu libro de cocina favorito.

Tienes cuatro tareas, todas relacionadas con el tiempo dedicado a cocinar la lasaña.

1. Almacena el tiempo de horneado esperado en una constante

Define la constante expected_bake_time que indica cuántos minutos debe hornearse la lasaña en el horno.

Según el libro de cocina, la lasaña necesita estar en el horno un total de 60 minutos.

julia> expected_bake_time
60

2. Calcula el tiempo de preparación en minutos

Define la función preparation_time que toma como argumento el número de capas que le agregaste a la lasaña y devuelve cuántos minutos dedicaste a prepararla, suponiendo que preparar cada capa te toma 2 minutos.

julia> preparation_time(4)
8

3. Calcula el tiempo restante en el horno en minutos

Define la función remaining_time que toma como parámetro los minutos que la lasaña lleva en el horno y devuelve cuántos minutos le quedan aún en el horno.

julia> remaining_time(50)
10

4. Calcula el tiempo total de trabajo en minutos

Define la función total_working_time que toma dos argumentos: el primer argumento es el número de capas que le agregaste a la lasaña, y el segundo argumento es el número de minutos que la lasaña ha estado en el horno.

La función debe devolver cuántos minutos en total has dedicado a cocinar la lasaña, que es la suma del tiempo de preparación en minutos y del tiempo en minutos que la lasaña ha pasado en el horno hasta el momento.

julia> total_working_time(3, 20)
26
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Julia Exercism

¿Todo listo para empezar Lasaña?

Regístrate en Exercism para aprender y dominar Julia con 35 conceptos128 ejercicios y mentoría humana real, todo gratis.