Skip to content

Commit f819888

Browse files
authored
Merge pull request mouredev#6321 from Elmer125/main
#22 - Ruby
2 parents 29fac9a + 1c99076 commit f819888

File tree

1 file changed

+66
-0
lines changed
  • Roadmap/22 - FUNCIONES DE ORDEN SUPERIOR/ruby

1 file changed

+66
-0
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# * EJERCICIO:
2+
# * Explora el concepto de funciones de orden superior en tu lenguaje
3+
# * creando ejemplos simples (a tu elección) que muestren su funcionamiento.
4+
# Doc: https://medium.com/@jeffcoh23/eloquent-ruby-achieving-higher-order-functionality-933267a01f36
5+
# https://www.rubyguides.com/2016/02/ruby-procs-and-lambdas/
6+
# Ruby hasn't Higher Order Functions, but it has blocks, procs and lambdas.
7+
8+
# pass a lambda to a method
9+
def add_stuff(a, b, my_lambda)
10+
c = a + b
11+
my_lambda.call(c)
12+
end
13+
example_lambda = lambda { |c| puts "The sum is #{c}" }
14+
add_stuff(1, 2, example_lambda)
15+
16+
def multiply_stuff(a, b, my_proc)
17+
c = a * b
18+
my_proc.call(c)
19+
end
20+
multiply_stuff(2, 3, ->(c) { puts "The product is #{c}" })
21+
22+
def divide_stuff(a, b, &block)
23+
c = a / b
24+
block.call(c)
25+
end
26+
27+
divide_stuff(6, 3) { |c| puts "The division is #{c}" }
28+
29+
# * DIFICULTAD EXTRA (opcional):
30+
# * Dada una lista de estudiantes (con sus nombres, fecha de nacimiento y
31+
# * lista de calificaciones), utiliza funciones de orden superior para
32+
# * realizar las siguientes operaciones de procesamiento y análisis:
33+
# * - Promedio calificaciones: Obtiene una lista de estudiantes por nombre
34+
# * y promedio de sus calificaciones.
35+
# * - Mejores estudiantes: Obtiene una lista con el nombre de los estudiantes
36+
# * que tienen calificaciones con un 9 o más de promedio.
37+
# * - Nacimiento: Obtiene una lista de estudiantes ordenada desde el más joven.
38+
# * - Mayor calificación: Obtiene la calificación más alta de entre todas las
39+
# * de los alumnos.
40+
# * - Una calificación debe estar comprendida entre 0 y 10 (admite decimales).
41+
42+
# students = [
43+
# { name: 'Alice', birthdate: '1990-01-01', grades: [9, 8, 7, 10, 9] },
44+
# { name: 'Bob', birthdate: '1991-01-01', grades: [8, 7, 6, 9, 8] },
45+
# { name: 'Charlie', birthdate: '1992-01-01', grades: [7, 6, 5, 8, 7] },
46+
# ]
47+
48+
students = [ :name => 'Alice', :birthdate => '1990-01-01', :grades => [9, 8, 9, 10, 9] ] +
49+
[ :name => 'Bob', :birthdate => '1991-01-01', :grades => [8, 10, 6, 9, 5] ] +
50+
[ :name => 'Charlie', :birthdate => '1992-01-01', :grades => [7, 6, 5, 8, 7] ]
51+
52+
def average_grades(grades)
53+
grades.sum / grades.length
54+
end
55+
56+
puts "Average grades:"
57+
puts students.map { |student| "#{student[:name]}: #{average_grades(student[:grades])}" }
58+
59+
puts "Best students:"
60+
puts students.select { |student| average_grades(student[:grades]) >= 9 }.map { |student| student[:name] }
61+
62+
puts "Youngest students:"
63+
puts students.sort_by { |student| student[:birthdate] }.map { |student| student[:name] }.reverse
64+
65+
puts "Highest grade:"
66+
puts students.map { |student| student[:grades].max }.max

0 commit comments

Comments
 (0)