Rutas
/
Ruby
Ruby
/
Ejercicios
/
Línea de montaje
Línea de montaje

Línea de montaje

Ejercicio de aprendizaje

Introducción

Números

Los dos tipos de números más comunes en Ruby son:

  • Enteros: números sin dígitos detrás del separador decimal (números enteros). Por ejemplo, -6, 0, 1, 25, 976 y 500000.
  • Números de coma flotante: números con uno o más dígitos detrás del separador decimal. Por ejemplo, -2.4, 0.1, 3.14, 16.984025 y 1024.0.

Se implementan mediante las clases Integer y Float.

Estas clases tienen métodos que convierten valores de un tipo al otro. Los números Integer son exactos hasta la unidad entera, mientras que la precisión de Float es fraccionaria con respecto a un número entero:

  • Integer#to_f: Convierte a un nuevo número de coma flotante
  • Float#ceil: Redondea hacia arriba al entero más cercano
  • Float#floor: Redondea hacia abajo al entero más cercano
  • Float#round: Redondea al entero más cercano
  • Float#to_i: Trunca al entero más cercano

Condicionales

Ruby tiene lo que se conoce como expresiones de control de flujo; se usan para controlar cómo se ejecutará el programa y toman un valor truthy o falsey. Hay operadores que se pueden usar para crear valores truthy o falsey; se conocen como operadores de comparación.

Hay dos expresiones de control principales que se usan para controlar qué código se ejecutará y cuál no. Es decir, cuál de las ramas se ejecutará.

Esas dos son: la expresión if y la expresión unless.

Operadores de comparación

Los operadores de comparación se usan para comparar valores y devolver un valor true o false. Los siguientes operadores requieren que se comparen dos valores del mismo tipo. Si los valores no son del mismo tipo, el compilador lanzará un error. Aquí tienes una lista de los operadores y un ejemplo de cuándo dan un valor true:

Método Descripción Ejemplo
< menor que 4 < 5
<= menor o igual que 4 <= 4
> mayor que 3 > 1
>= mayor o igual que 2 >= 2

Los operadores de igualdad y desigualdad se pueden usar para comparar cualquier tipo de valor, a diferencia de los operadores ya mencionados. El operador == se usa para comprobar si dos valores son iguales, lo que incluye comprobar el tipo del valor. El != funciona igual, pero devolverá true si los valores no son iguales y false si son iguales. Aquí tienes una lista de los operadores de igualdad y desigualdad y un ejemplo de cuándo dan un valor true:

Método Descripción Ejemplo
== igual 4 == 4
!= distinto 5 != 4

El condicional if

El condicional if se usa para comprobar si una condición dada es «truthy» o «falsey». Si la condición es truthy, se ejecutará el código dentro del condicional if. Un condicional if termina con la palabra clave end.

value = 1
if value == 1
  "1 is equal to 1"
end
# => "1 is equal to 1"

if value > 2
  "1 is greater than 2"
end
# => nil

La instrucción unless

La instrucción unless funciona de forma muy parecida al condicional if, pero ejecutará el código dentro de la instrucción unless si la condición es falsey.

value = 1
unless value == 1
  "1 is not equal to 1"
end
# => nil

unless value > 2
  "1 is not greater than 2"
end
# => "1 is not greater than 2"

La instrucción else

La instrucción else se puede usar junto con el condicional if. La instrucción else se ejecutará si no se ejecuta la rama if.

value = 1
if value == 1
  "1 is equal to 1"
else
  "1 is not equal to 1"
end
# => "1 is equal to 1"

Instrucciones «if» en cascada

La instrucción elsif se puede usar junto con el condicional if. La instrucción elsif se ejecutará si no se ejecuta la rama if y la condición de la instrucción elsif es truthy. Las instrucciones elsif se pueden encadenar y se ejecutará la primera condición truthy. También puede haber una instrucción else al final del condicional if que se ejecutará si ninguna de las instrucciones anteriores ha sido verdadera.

value = 1
if value != 1
  "1 is not equal to 1"
elsif value > 2
  "1 is greater than 2"
else
  "1 is not equal to 1 and 1 is not greater than 2"
end
# => "1 is not equal to 1 and 1 is not greater than 2"

Instrucciones

En este ejercicio vas a escribir código para analizar la producción de una cadena de montaje en una fábrica de coches. La velocidad de la cadena de montaje puede ir de 0 (apagada) a 10 (máxima).

A su velocidad más lenta (1), se producen 221 coches cada hora. La producción aumenta de forma lineal con la velocidad. Así, con la velocidad ajustada a 4, debería producir 4 * 221 = 884 coches por hora. Sin embargo, las velocidades más altas aumentan la probabilidad de que se produzcan coches defectuosos, que después hay que desechar. La siguiente tabla muestra cómo influye la velocidad en la tasa de éxito:

  • Del 1 al 4: 100 % de tasa de éxito.
  • Del 5 al 8: 90 % de tasa de éxito.
  • 9: 80 % de tasa de éxito.
  • 10: 77 % de tasa de éxito.

Tienes dos tareas.

1. Calcula la tasa de producción por hora

Implementa el método AssemblyLine#production_rate_per_hour para calcular la tasa de producción por hora de la cadena de montaje, teniendo en cuenta su tasa de éxito. Ten en cuenta que el valor devuelto es una instancia de Float.

AssemblyLine.new(6).production_rate_per_hour
#=> 1193.4

2. Calcula el número de coches funcionales producidos por minuto

Implementa el método AssemblyLine#working_items_per_minute para calcular cuántos coches terminados y funcionales se producen por minuto. Ten en cuenta que el valor devuelto es una instancia de Integer.

AssemblyLine.new(6).working_items_per_minute
#=> 19
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Ruby Exercism

¿Listo para empezar Línea de montaje?

Regístrate en Exercism para aprender y dominar Ruby con 21 conceptos121 ejercicios y mentoría humana real, todo gratis.