alimento-alu0100946499 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +12 -0
  4. data/.rspec +2 -0
  5. data/.travis.yml +7 -0
  6. data/CODE_OF_CONDUCT.md +74 -0
  7. data/Gemfile +6 -0
  8. data/Guardfile +82 -0
  9. data/LICENSE.txt +21 -0
  10. data/README.md +45 -0
  11. data/Rakefile +66 -0
  12. data/alimento.gemspec +29 -0
  13. data/bin/console +14 -0
  14. data/bin/setup +8 -0
  15. data/docs/Alimento.html +129 -0
  16. data/docs/Alimento/AliGra.html +181 -0
  17. data/docs/Alimento/AliRicCar.html +181 -0
  18. data/docs/Alimento/Alimento.html +474 -0
  19. data/docs/Alimento/Bebidas.html +181 -0
  20. data/docs/Alimento/CarDer.html +181 -0
  21. data/docs/Alimento/Frutas.html +181 -0
  22. data/docs/Alimento/HueLacHel.html +181 -0
  23. data/docs/Alimento/PesMar.html +181 -0
  24. data/docs/Alimento/Plato.html +368 -0
  25. data/docs/Alimento/VerHor.html +181 -0
  26. data/docs/Array.html +200 -0
  27. data/docs/DLL.html +124 -0
  28. data/docs/DLL/DLL.html +510 -0
  29. data/docs/created.rid +8 -0
  30. data/docs/css/fonts.css +167 -0
  31. data/docs/css/rdoc.css +590 -0
  32. data/docs/fonts/Lato-Light.ttf +0 -0
  33. data/docs/fonts/Lato-LightItalic.ttf +0 -0
  34. data/docs/fonts/Lato-Regular.ttf +0 -0
  35. data/docs/fonts/Lato-RegularItalic.ttf +0 -0
  36. data/docs/fonts/SourceCodePro-Bold.ttf +0 -0
  37. data/docs/fonts/SourceCodePro-Regular.ttf +0 -0
  38. data/docs/images/add.png +0 -0
  39. data/docs/images/arrow_up.png +0 -0
  40. data/docs/images/brick.png +0 -0
  41. data/docs/images/brick_link.png +0 -0
  42. data/docs/images/bug.png +0 -0
  43. data/docs/images/bullet_black.png +0 -0
  44. data/docs/images/bullet_toggle_minus.png +0 -0
  45. data/docs/images/bullet_toggle_plus.png +0 -0
  46. data/docs/images/date.png +0 -0
  47. data/docs/images/delete.png +0 -0
  48. data/docs/images/find.png +0 -0
  49. data/docs/images/loadingAnimation.gif +0 -0
  50. data/docs/images/macFFBgHack.png +0 -0
  51. data/docs/images/package.png +0 -0
  52. data/docs/images/page_green.png +0 -0
  53. data/docs/images/page_white_text.png +0 -0
  54. data/docs/images/page_white_width.png +0 -0
  55. data/docs/images/plugin.png +0 -0
  56. data/docs/images/ruby.png +0 -0
  57. data/docs/images/tag_blue.png +0 -0
  58. data/docs/images/tag_green.png +0 -0
  59. data/docs/images/transparent.png +0 -0
  60. data/docs/images/wrench.png +0 -0
  61. data/docs/images/wrench_orange.png +0 -0
  62. data/docs/images/zoom.png +0 -0
  63. data/docs/index.html +106 -0
  64. data/docs/js/darkfish.js +161 -0
  65. data/docs/js/jquery.js +4 -0
  66. data/docs/js/navigation.js +142 -0
  67. data/docs/js/navigation.js.gz +0 -0
  68. data/docs/js/search.js +109 -0
  69. data/docs/js/search_index.js +1 -0
  70. data/docs/js/search_index.js.gz +0 -0
  71. data/docs/js/searcher.js +228 -0
  72. data/docs/js/searcher.js.gz +0 -0
  73. data/docs/table_of_contents.html +223 -0
  74. data/lib/DLL/fuente.rb +107 -0
  75. data/lib/DLL/version.rb +3 -0
  76. data/lib/alimento.rb +17 -0
  77. data/lib/alimento/fuente.rb +216 -0
  78. data/lib/alimento/version.rb +3 -0
  79. data/lib/array/fuente.rb +24 -0
  80. data/lib/plato/fuente.rb +75 -0
  81. metadata +221 -0
@@ -0,0 +1,107 @@
1
+ # Este módulo se ha creado para la asignatura de
2
+ # Lenguajes y Paradigmas de la Programación impartida
3
+ # en la Universidad de la Laguna como práctica,
4
+ # haciendo uso del lenguaje de programación Ruby.
5
+ #
6
+ # Author:: Javier Esteban Pérez Rivas (mailto:alu0100946499@ull.edu.es)
7
+ # Copyright:: Creative Commons
8
+ # License:: Distributes under the same terms as Ruby
9
+
10
+ module DLL
11
+
12
+ # Esta clase permite crear una lista
13
+ # doblemente enlazada.
14
+ # Se ha incluido el mixin Enumerable.
15
+ class DLL
16
+
17
+ include Enumerable
18
+
19
+ Node = Struct.new(:value, :next, :prev)
20
+
21
+ attr_reader :head, :tail
22
+
23
+ # La lista se crea vacía por defecto.
24
+ def initialize()
25
+ @head, @tail = nil, nil
26
+ end
27
+
28
+ # Devuelve true si la lista está vacía, false en otro caso.
29
+ def empty()
30
+ return true if (@head == nil && @tail == nil)
31
+ false
32
+ end
33
+
34
+ # Muestra los elementos de la lista como si fuese un string.
35
+ def to_s()
36
+ out = ""
37
+ aux = @tail
38
+ while (aux != nil) do
39
+ if(aux[:next] == nil)
40
+ out << "#{aux[:value]}"
41
+ else
42
+ out << "#{aux[:value]}, "
43
+ end
44
+ aux = aux.next
45
+ end
46
+
47
+ out
48
+
49
+ end
50
+
51
+ # Inserta los elementos por el principio de la lista.
52
+ def insert_head(*objects)
53
+ objects.each{ |x|
54
+ if(self.empty)
55
+ aux = Node.new(x, nil, @head)
56
+ @tail = aux
57
+ @head = aux
58
+ else
59
+ aux = Node.new(x, nil, @head)
60
+ @head[:next] = aux
61
+ @head = aux
62
+ end
63
+ }
64
+ end
65
+
66
+ # Inserta los elementos por el final de la lista.
67
+ def insert_tail(*objects)
68
+ objects.each{ |x|
69
+ if(self.empty)
70
+ aux = Node.new(x, @tail, nil)
71
+ @tail = aux
72
+ @head = aux
73
+ else
74
+ aux = Node.new(x, @tail, nil)
75
+ @tail[:prev] = aux
76
+ @tail = aux
77
+ end
78
+ }
79
+ end
80
+
81
+ # Elimina el elemento al que apunta head.
82
+ def erase_head()
83
+ aux = @head[:prev]
84
+ aux[:next] = nil
85
+ @head = aux
86
+ end
87
+
88
+ #Elimina el elemento al que apunta tail.
89
+ def erase_tail()
90
+ aux = @tail[:next]
91
+ aux[:prev] = nil
92
+ @tail = aux
93
+ end
94
+
95
+ # Se incluye el metodo del mixin Enumerable
96
+ # Se define como la iteración entre los valores de los nodos.
97
+ def each # :yields: value
98
+ aux = @tail
99
+ while (aux != nil) do
100
+ yield aux[:value]
101
+ aux = aux.next
102
+ end
103
+ end
104
+
105
+ end
106
+
107
+ end
@@ -0,0 +1,3 @@
1
+ module DLL
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,17 @@
1
+ require "alimento/fuente.rb"
2
+ require "alimento/version.rb"
3
+
4
+ module Alimento
5
+ $alimentos = [HueLacHel.new("Huevo frito", 14.1, 0.0, 19.5), HueLacHel.new("Leche vaca", 3.3, 4.8, 3.2), HueLacHel.new("Yogurt", 3.8, 4.9, 3.8),
6
+ CarDer.new("Cerdo", 21.5, 0.0, 6.3), CarDer.new("Ternera", 21.1, 0.0, 3.1), CarDer.new("Pollo", 20.6, 0.0, 5.6),
7
+ PesMar.new("Bacalao", 17.7, 0.0, 0.4), PesMar.new("Atún", 21.5, 0.0, 15.5), PesMar.new("Salmón", 19.9, 0.0, 13.6),
8
+ AliGra.new("Aceite de oliva", 0.0, 0.2, 99.6), AliGra.new("Mantequilla", 0.7, 0.0, 83.2), AliGra.new("Chocolate", 5.3, 47.0, 30.0),
9
+ AliRicCar.new("Azúcar", 0.0, 99.8, 0.0), AliRicCar.new("Arroz", 6.8, 77.7, 0.6), AliRicCar.new("Lentejas", 23.5, 52.0, 1.4), AliRicCar.new("Papas", 2.0, 15.4, 0.1),
10
+ VerHor.new("Tomate", 1.0, 3.5, 0.2), VerHor.new("Cebolla", 1.3, 5.8, 0.3), VerHor.new("Calabaza", 1.1, 4.8, 0.1),
11
+ Frutas.new("Manzana", 0.3, 12.4, 0.4), Frutas.new("Platano", 1.2, 21.4, 0.2), Frutas.new("Pera", 0.5, 12.7, 0.3)]
12
+
13
+ $equivalencias = {cucharada: 20, cucharadita: 5, cucharón: 240, taza: 150, tacita: 50, tazón: 300, pieza: 100, piezapequena: 50, piezagrande: 200, vaso: 220, gramo: 1}
14
+
15
+
16
+
17
+ end
@@ -0,0 +1,216 @@
1
+ require "alimento/version"
2
+
3
+ # Este módulo se ha creado para la asignatura de
4
+ # Lenguajes y Paradigmas de la Programación impartida
5
+ # en la Universidad de la Laguna como práctica,
6
+ # haciendo uso del lenguaje de programación Ruby.
7
+ #
8
+ # Author:: Javier Esteban Pérez Rivas (mailto:alu0100946499@ull.edu.es)
9
+ # Copyright:: Creative Commons
10
+ # License:: Distributes under the same terms as Ruby
11
+
12
+ module Alimento
13
+
14
+ # Esta clase permite representar un alimento.
15
+ # Se ha incluido el mixin Comparable.
16
+
17
+ class Alimento
18
+ include Comparable
19
+
20
+ attr_reader :nombre, :proteinas, :glucidos, :lipidos
21
+
22
+ # Se guarda el nombre y valor para proteínas, glúcidos y lípidos.
23
+ def initialize(nombre, proteinas, glucidos, lipidos)
24
+ @nombre, @proteinas, @glucidos, @lipidos = nombre.to_s, proteinas, glucidos, lipidos
25
+ end
26
+
27
+ # Calcula el valor enérgetico del alimento.
28
+ def val_energ
29
+ @proteinas*4+@glucidos*4+@lipidos*9
30
+ end
31
+
32
+ # Calcula el área incremental bajo de la curva del array de datos que recibe.
33
+ def aibc(array)
34
+ bfr = array.collect{|x| x-array[0]}
35
+ res = array.drop(1).collect!{|x| if x < array[0] then 0.0 else x-array[0] end}.zip(bfr).collect!{|x, y| if x!=0.0 then (x+y)*2.5 else 0.0 end}
36
+ res.reduce(:+)
37
+ end
38
+
39
+ # Calcula el índice glucémico del alimento cuyos datos haya en el fichero que recibe.
40
+ def ind_glu(filename)
41
+ file = File.new(filename.to_s, "r")
42
+ number = file.gets
43
+
44
+ inds = []
45
+ number.to_i.times {
46
+ aux = file.gets.split(" ").collect{|x| x.to_f}
47
+ inds << aux
48
+ }
49
+
50
+ glucs = []
51
+ number.to_i.times {
52
+ aux = file.gets.split(" ").collect{|x| x.to_f}
53
+ glucs << aux
54
+ }
55
+
56
+
57
+ inds.collect!{|x| aibc(x)}
58
+ glucs.collect!{|x| aibc(x)}
59
+
60
+ res = inds.zip(glucs).collect{|x, y| x/y*100}.reduce(:+)/2
61
+
62
+ end
63
+
64
+ # Muestra la información del objeto formateada. Lo convierte a string.
65
+ def to_s
66
+ "%-15s" % ["#{@nombre.capitalize}: "] + "#{@proteinas} #{@glucidos} #{@lipidos}" + " grupo: #{@grupo}"
67
+ end
68
+
69
+ # Se define para incluir el mixin comparable
70
+ # Se usa como valor para la comparación el valor energético.
71
+ def <=>(other)
72
+ return nil unless other.is_a?Alimento
73
+ self.val_energ <=> other.val_energ
74
+ end
75
+
76
+ def ==(other)
77
+ if other.is_a?Alimento
78
+ self.nombre == other.nombre && self.proteinas == other.proteinas && self.glucidos == other.glucidos && self.lipidos == other.lipidos
79
+ else
80
+ false
81
+ end
82
+ end
83
+
84
+ end
85
+
86
+
87
+ class HueLacHel < Alimento
88
+
89
+ # Esta clase permite representar alimentos dentro
90
+ # del grupo "Huevos, Lácteos y Helado".
91
+ # Hereda de la clase alimento.
92
+
93
+ attr_reader :grupo
94
+
95
+ def initialize(nombre, proteinas, glucidos, lipidos)
96
+ super(nombre, proteinas, glucidos, lipidos)
97
+ @grupo = "Huevos, Lácteos y Helado"
98
+ end
99
+
100
+ end
101
+
102
+
103
+ class CarDer < Alimento
104
+
105
+ # Esta clase permite representar alimentos dentro
106
+ # del grupo "Carnes y Derivados".
107
+ # Hereda de la clase alimento.
108
+
109
+ attr_reader :grupo
110
+
111
+ def initialize(nombre, proteinas, glucidos, lipidos)
112
+ super(nombre, proteinas, glucidos, lipidos)
113
+ @grupo = "Carnes y Derivados"
114
+ end
115
+
116
+ end
117
+
118
+
119
+ class PesMar < Alimento
120
+
121
+ # Esta clase permite representar alimentos dentro
122
+ # del grupo "Pescados y Mariscos".
123
+ # Hereda de la clase alimento.
124
+
125
+ attr_reader :grupo
126
+
127
+ def initialize(nombre, proteinas, glucidos, lipidos)
128
+ super(nombre, proteinas, glucidos, lipidos)
129
+ @grupo = "Pescados y Mariscos"
130
+ end
131
+
132
+ end
133
+
134
+
135
+ class AliGra < Alimento
136
+
137
+ # Esta clase permite representar alimentos dentro
138
+ # del grupo "Alimentos Grasos".
139
+ # Hereda de la clase alimento.
140
+
141
+ attr_reader :grupo
142
+
143
+ def initialize(nombre, proteinas, glucidos, lipidos)
144
+ super(nombre, proteinas, glucidos, lipidos)
145
+ @grupo = "Alimentos Grasos"
146
+ end
147
+
148
+ end
149
+
150
+
151
+ class AliRicCar < Alimento
152
+
153
+ # Esta clase permite representar alimentos dentro
154
+ # del grupo "Alimentos Ricos en Carbohidratos".
155
+ # Hereda de la clase alimento.
156
+
157
+ attr_reader :grupo
158
+
159
+ def initialize(nombre, proteinas, glucidos, lipidos)
160
+ super(nombre, proteinas, glucidos, lipidos)
161
+ @grupo = "Alimentos Ricos en Carbohidratos"
162
+ end
163
+
164
+ end
165
+
166
+
167
+ class VerHor < Alimento
168
+
169
+ # Esta clase permite representar alimentos dentro
170
+ # del grupo "Verduras y Hortalizas".
171
+ # Hereda de la clase alimento.
172
+
173
+ attr_reader :grupo
174
+
175
+ def initialize(nombre, proteinas, glucidos, lipidos)
176
+ super(nombre, proteinas, glucidos, lipidos)
177
+ @grupo = "Verduras y Hortalizas"
178
+ end
179
+
180
+ end
181
+
182
+
183
+ class Frutas < Alimento
184
+
185
+ # Esta clase permite representar alimentos dentro
186
+ # del grupo "Frutas".
187
+ # Hereda de la clase alimento.
188
+
189
+ attr_reader :grupo
190
+
191
+ def initialize(nombre, proteinas, glucidos, lipidos)
192
+ super(nombre, proteinas, glucidos, lipidos)
193
+ @grupo = "Frutas"
194
+ end
195
+
196
+ end
197
+
198
+
199
+ class Bebidas < Alimento
200
+
201
+ # Esta clase permite representar alimentos dentro
202
+ # del grupo "Bebidas".
203
+ # Hereda de la clase alimento.
204
+
205
+ attr_reader :grupo
206
+
207
+ def initialize(nombre, proteinas, glucidos, lipidos)
208
+ super(nombre, proteinas, glucidos, lipidos)
209
+ @grupo = "Bebidas"
210
+ end
211
+
212
+ end
213
+
214
+ MAX = Alimento.new("MAX", Float::MAX, Float::MAX, Float::MAX)
215
+
216
+ end
@@ -0,0 +1,3 @@
1
+ module Alimento
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,24 @@
1
+
2
+ class Array
3
+
4
+ def for_sort
5
+ vector = Array.new(self)
6
+ res = []
7
+ for i in 0...vector.size do
8
+ res << vector.delete(vector.min)
9
+ end
10
+ res
11
+ end
12
+
13
+ def each_sort
14
+ vector = Array.new(self)
15
+ res = []
16
+ vector.each{
17
+ min = vector.min
18
+ res << min
19
+ vector[vector.index(min)] = Alimento::MAX
20
+ }
21
+ res
22
+ end
23
+
24
+ end
@@ -0,0 +1,75 @@
1
+ module Alimento
2
+
3
+ #Esta clase permite representar un plato
4
+
5
+ class Plato
6
+
7
+ attr_accessor :name, :vegetales, :frutas, :granos, :proteinas, :aceites
8
+
9
+ #Se guarda el nombre del plato y se recibe un bloque con los ingredientes
10
+ def initialize(name, &block)
11
+ @name = name
12
+ @vegetales = []
13
+ @frutas = []
14
+ @granos = []
15
+ @proteinas = []
16
+ @aceites = []
17
+
18
+ if block_given?
19
+ if block.arity == 1
20
+ yield self
21
+ else
22
+ instance_eval(&block)
23
+ end
24
+ end
25
+ end
26
+
27
+ #Guarda un alimento dentro de la clase
28
+ def ingrediente(grupo, nombre, medida)
29
+ alimento = $alimentos.find{|x| x.nombre == nombre}
30
+ aux = medida.split(" ").first.split("/")
31
+ valor = 0
32
+ if(aux.size > 1)
33
+ valor = aux[0].to_f/aux[1].to_f
34
+ else
35
+ valor = aux[0].to_f
36
+ end
37
+
38
+ cantidad = $equivalencias[medida.sub("ñ", "n").split(" ").drop(1).each{|x| x.gsub!(/s\z/, "")}.reduce(:+).to_sym].to_f
39
+ cantidad *= valor
40
+
41
+
42
+ if(grupo == "vegetal" || grupo == "vegetales")
43
+ @vegetales << [alimento, cantidad]
44
+ elsif(grupo == "fruta" || grupo == "frutas")
45
+ @frutas << [alimento, cantidad]
46
+ elsif(grupo == "grano" || grupo == "granos" || grupo == "cereal" || grupo == "cereales")
47
+ @granos << [alimento, cantidad]
48
+ elsif(grupo == "proteina" || grupo == "proteína" || grupo == "proteinas" || grupo == "proteínas")
49
+ @proteinas << [alimento, cantidad]
50
+ elsif(grupo == "aceite" || grupo == "aceites")
51
+ @aceites << [alimento, cantidad]
52
+ else
53
+ "#{grupo} no es un grupo de alimento permitido"
54
+ end
55
+ end
56
+
57
+ #Muestra el contenido del plato
58
+ def to_s
59
+ total = 0
60
+ output = @name
61
+ output << "\n#{'=' * @name.size}\n\n"
62
+ output << "Composición nutricional:\n"
63
+ output << "%20s" % "" + "%-10s" % "glúcidos" + "%-10s" % "proteínas" + "%-10s" % "lípidos" + "%-20s" % "valor energético\n"
64
+ @vegetales.each{ |x, y| output << "%-20s" % x.nombre + "%-10s" % x.glucidos + "%-10s" % x.proteinas + "%-10s" % x.lipidos + "%-20f\n" % (x.val_energ/100*y); total += x.val_energ/100*y}
65
+ @frutas.each{ |x, y| output << "%-20s" % x.nombre + "%-10s" % x.glucidos + "%-10s" % x.proteinas + "%-10s" % x.lipidos + "%-20f\n" % (x.val_energ/100*y); total += x.val_energ/100*y}
66
+ @granos.each{ |x, y| output << "%-20s" % x.nombre + "%-10s" % x.glucidos + "%-10s" % x.proteinas + "%-10s" % x.lipidos + "%-20f\n" % (x.val_energ/100*y); total += x.val_energ/100*y}
67
+ @proteinas.each{ |x, y| output << "%-20s" % x.nombre + "%-10s" % x.glucidos + "%-10s" % x.proteinas + "%-10s" % x.lipidos + "%-20f\n" % (x.val_energ/100*y); total += x.val_energ/100*y}
68
+ @aceites.each{ |x, y| output << "%-20s" % x.nombre + "%-10s" % x.glucidos + "%-10s" % x.proteinas + "%-10s" % x.lipidos + "%-20f\n" % (x.val_energ/100*y); total += x.val_energ/100*y}
69
+ output << "%-41s" % "Valor energético total" + "%20f" % total
70
+ output
71
+ end
72
+
73
+ end
74
+
75
+ end