P06axz 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.travis.yml +5 -0
  4. data/CODE_OF_CONDUCT.md +74 -0
  5. data/Gemfile +6 -0
  6. data/Guardfile +82 -0
  7. data/LICENSE.txt +21 -0
  8. data/P06.gemspec +44 -0
  9. data/README.md +7 -0
  10. data/Rakefile +6 -0
  11. data/bin/console +14 -0
  12. data/bin/setup +8 -0
  13. data/doc/Alimento.html +825 -0
  14. data/doc/Alimento_concreto.html +396 -0
  15. data/doc/List.html +858 -0
  16. data/doc/Node.html +423 -0
  17. data/doc/P06.html +117 -0
  18. data/doc/_index.html +151 -0
  19. data/doc/class_list.html +51 -0
  20. data/doc/css/common.css +1 -0
  21. data/doc/css/full_list.css +58 -0
  22. data/doc/css/style.css +492 -0
  23. data/doc/file.README.html +78 -0
  24. data/doc/file_list.html +56 -0
  25. data/doc/frames.html +17 -0
  26. data/doc/index.html +78 -0
  27. data/doc/js/app.js +248 -0
  28. data/doc/js/full_list.js +216 -0
  29. data/doc/js/jquery.js +4 -0
  30. data/doc/method_list.html +243 -0
  31. data/doc/top-level-namespace.html +112 -0
  32. data/docs/Alimento.html +682 -0
  33. data/docs/Alimento_concreto.html +389 -0
  34. data/docs/List.html +858 -0
  35. data/docs/Node.html +423 -0
  36. data/docs/P06.html +117 -0
  37. data/docs/_index.html +151 -0
  38. data/docs/class_list.html +51 -0
  39. data/docs/css/common.css +1 -0
  40. data/docs/css/full_list.css +58 -0
  41. data/docs/css/style.css +492 -0
  42. data/docs/file.README.html +79 -0
  43. data/docs/file_list.html +56 -0
  44. data/docs/frames.html +17 -0
  45. data/docs/index.html +79 -0
  46. data/docs/js/app.js +248 -0
  47. data/docs/js/full_list.js +216 -0
  48. data/docs/js/jquery.js +4 -0
  49. data/docs/method_list.html +227 -0
  50. data/docs/top-level-namespace.html +112 -0
  51. data/lib/P06.rb +11 -0
  52. data/lib/P06/alimento.rb +37 -0
  53. data/lib/P06/version.rb +3 -0
  54. data/lib/P07/alimento_concreto.rb +10 -0
  55. data/lib/P07/list.rb +80 -0
  56. data/lib/P08/alimento_concreto.rb +25 -0
  57. data/lib/P08/list.rb +108 -0
  58. data/lib/P10/modified_array.rb +29 -0
  59. data/lib/P11/alimento.rb +29 -0
  60. data/lib/P11/plato.rb +108 -0
  61. data/lib/P11/porciones.rb +31 -0
  62. metadata +233 -0
data/lib/P06.rb ADDED
@@ -0,0 +1,11 @@
1
+ require "P10/modified_array"
2
+ require "P06/version"
3
+ require "P11/alimento"
4
+ require "P08/list"
5
+ require "P08/alimento_concreto"
6
+ require "P11/plato"
7
+ require "P11/porciones"
8
+
9
+ module P06
10
+
11
+ end
@@ -0,0 +1,37 @@
1
+ # Esta clase permite representar la información básica
2
+ # de un alimento dado, sus proteinas, glúcidos y lípidos
3
+ # además, calcula el índice calórico del mismo.
4
+ #
5
+ # Author:: Alberto González (mailto:alu0100949568@ull.edu.es)
6
+ # Copyright:: Cretive Commons
7
+ # License:: Distributes under the same terms as Ruby
8
+ class Alimento
9
+ attr_reader :nom, :prot, :gluc, :lip, :cal_index
10
+ include Enumerable, Comparable
11
+ # Se asigna el nombre y la información nutricional del alimento
12
+ def initialize(nom, prot, gluc, lip, gluc_data = nil)
13
+ @nom = nom
14
+ @prot = prot
15
+ @gluc = gluc
16
+ @lip = lip
17
+ @gluc_data = gluc_data
18
+ @cal_index = (@prot.to_f*4 + @gluc.to_f*4 + @lip.to_f*9).round(2)
19
+ end
20
+
21
+ # Muestra la información de un alimento en concreto
22
+ def to_s
23
+ #El huevo frito tiene 14.1 proteinas, 0.0 glúcidos, 19.5 lípidos
24
+ " #{@nom}: #{@prot} proteinas, #{@gluc} glúcidos, #{@lip} lípidos, #{@cal_index} calorías"
25
+ end
26
+
27
+ # Se comprueba que no sea un valor negativo, en caso de serlo, se sustituye por un 0
28
+ def not_negative(n)
29
+ n < 0 ? n = 0 : n = n
30
+ end
31
+
32
+ # Calcula el área bajo la curva para los datos tomados en una medición de glucosa en intervalos de tiempo de 5 minutos
33
+ def aibc
34
+ @gluc_data.map{|indv| zero = indv.at(0); prev = -2; indv.map{|index| prev = prev + 1; ((index-zero) + (indv.at(not_negative(prev))-zero))*2.5}.reduce(:+).round(2)}
35
+ end
36
+ end
37
+
@@ -0,0 +1,3 @@
1
+ module P06
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,10 @@
1
+ class Alimento_concreto < Alimento
2
+ def initialize(group_name, food_name, prot, gluc, lip)
3
+ @group_name = group_name
4
+ super(food_name, prot, gluc, lip)
5
+ end
6
+
7
+ def to_s
8
+ "(#{@group_name} ->#{super.to_s})"
9
+ end
10
+ end
data/lib/P07/list.rb ADDED
@@ -0,0 +1,80 @@
1
+ Node = Struct.new(:value, :next, :prev)
2
+
3
+ class List
4
+ def initialize
5
+ @head = @tail = nil
6
+ end
7
+
8
+ def push(value)
9
+ ##Si es un array
10
+ if value.is_a?(Array)
11
+ value.each do |val|
12
+ prev = @tail unless @tail.nil?
13
+ while prev != @head do
14
+ prev = prev.next
15
+ end
16
+
17
+ node = Node.new(val, nil, prev)
18
+
19
+ @tail = node if @tail.nil?
20
+ @head.next = node unless @head.nil?
21
+
22
+ @head = node
23
+ end
24
+ else #Si es un único valor
25
+ prev = @tail unless @tail.nil?
26
+ while prev != @head do
27
+ prev = prev.next
28
+ end
29
+
30
+ node = Node.new(value, nil, prev)
31
+
32
+ @tail = node if @tail.nil?
33
+ @head.next = node unless @head.nil?
34
+
35
+ @head = node
36
+ end
37
+ end
38
+
39
+ def head
40
+ @head.value unless @head.nil?
41
+ end
42
+
43
+ def tail
44
+ @tail.value unless @tail.nil?
45
+ end
46
+
47
+ def remove_tail
48
+ @tail = @tail.next
49
+ end
50
+
51
+ def remove_head
52
+ @head = @head.prev
53
+ @head.next = nil
54
+ end
55
+
56
+ def to_s
57
+ array = "["
58
+ next_val = @tail unless @tail.nil?
59
+ while next_val != nil do
60
+ array = array + next_val.value.to_s + ", "
61
+ next_val = next_val.next
62
+
63
+ if next_val == nil #For las element
64
+ array = array.chomp(', ') + "]"
65
+ end
66
+ end
67
+ "#{array}"
68
+ end
69
+
70
+ def size
71
+ count = 0
72
+ next_val = @tail unless @tail.nil?
73
+ while next_val != nil do
74
+ next_val = next_val.next
75
+ count +=1
76
+ end
77
+ "#{count}"
78
+ end
79
+
80
+ end
@@ -0,0 +1,25 @@
1
+ # Representa a un grupo de alimentos, identificados por su nombre de grupo
2
+ # es una clase heredada de Alimento
3
+ #
4
+ # Author:: Alberto González (mailto:alu0100949568@ull.edu.es)
5
+ # Copyright:: Cretive Commons
6
+ # License:: Distributes under the same terms as Ruby
7
+ class Alimento_concreto < Alimento
8
+ # Se han incluido los mixin Comparable.
9
+ include Comparable
10
+ def initialize(group_name, food_name, prot, gluc, lip)
11
+ @group_name = group_name
12
+ super(food_name, prot, gluc, lip)
13
+ end
14
+ # Devuelve de forma formateada el nombre del grupo al que pertenecen
15
+ # un grupo de alimentos, además de los alimentos que lo conforman.
16
+ def to_s
17
+ "(#{@group_name} ->#{super.to_s})"
18
+ end
19
+ # Compara dos alimentos según su índice calórico
20
+ def <=>(other)
21
+ return nil unless other.instance_of? Alimento_concreto
22
+ @cal_index <=> other.cal_index
23
+ end
24
+ end
25
+
data/lib/P08/list.rb ADDED
@@ -0,0 +1,108 @@
1
+ # encoding: utf-8
2
+ # Esta estructura respresenta a un nodo de nuestra futura
3
+ # lista. Tiene un nodo predecesor, sucesor y un valor.
4
+ #
5
+ # Author:: Alberto González (mailto:alu0100949568@ull.edu.es)
6
+ # Copyright:: Cretive Commons
7
+ # License:: Distributes under the same terms as Ruby
8
+
9
+ Node = Struct.new(:value, :next, :prev)
10
+
11
+ # Representa una lista doblemente enlazada con una cabeza y una cola,
12
+ # pudiéndose insertar un array de alimentos o alimentos individuales
13
+ #
14
+ # Author:: Alberto González (mailto:alu0100949568@ull.edu.es)
15
+ # Copyright:: Cretive Commons
16
+ # License:: Distributes under the same terms as Ruby
17
+ class List
18
+ # Se ha incluido el mixin Enumerable.
19
+ include Enumerable
20
+ # Se asigna la cabeza y cola a nil (inicialmente)
21
+ def initialize
22
+ @head = @tail = nil
23
+ end
24
+ # Método para insertar valores en la lista, se pueden
25
+ # insertar varios valores o un único valor.
26
+ def push(value)
27
+ ##Si es un array
28
+ if value.is_a?(Array)
29
+ value.each do |val|
30
+ prev = @tail unless @tail.nil?
31
+ while prev != @head do
32
+ prev = prev.next
33
+ end
34
+
35
+ node = Node.new(val, nil, prev)
36
+
37
+ @tail = node if @tail.nil?
38
+ @head.next = node unless @head.nil?
39
+
40
+ @head = node
41
+ end
42
+ else #Si es un único valor
43
+ prev = @tail unless @tail.nil?
44
+ while prev != @head do
45
+ prev = prev.next
46
+ end
47
+
48
+ node = Node.new(value, nil, prev)
49
+
50
+ @tail = node if @tail.nil?
51
+ @head.next = node unless @head.nil?
52
+
53
+ @head = node
54
+ end
55
+ end
56
+
57
+ # Devuelve la cabeza de la lista a menos que no tenga cabeza
58
+ def head
59
+ @head.value unless @head.nil?
60
+ end
61
+ # Devuelve la cola de la lista a menos que no tenga cola
62
+ def tail
63
+ @tail.value unless @tail.nil?
64
+ end
65
+ # Borra la cola de la lista a menos que no tenga cola
66
+ def remove_tail
67
+ @tail = @tail.next unless @tail.nil?
68
+ end
69
+ # Borra la cabeza de la lista
70
+ def remove_head
71
+ @head = @head.prev
72
+ @head.next = nil
73
+ end
74
+ # Muestra los valores que se han almacenado en la lista
75
+ def to_s
76
+ array = "["
77
+ next_val = @tail unless @tail.nil?
78
+ while next_val != nil do
79
+ array = array + next_val.value.to_s + ", "
80
+ next_val = next_val.next
81
+
82
+ if next_val == nil #For las element
83
+ array = array.chomp(', ') + "]"
84
+ end
85
+ end
86
+ "#{array}"
87
+ end
88
+ # Devuelve la cantidad de nodos que tiene nuestra lista
89
+ def size
90
+ count = 0
91
+ next_val = @tail unless @tail.nil?
92
+ while next_val != nil do
93
+ next_val = next_val.next
94
+ count +=1
95
+ end
96
+ "#{count}"
97
+ end
98
+ # Método que nos permite recorrer cada uno de los nodos de nuestra lista
99
+ def each
100
+ next_val = @tail
101
+ while next_val != nil do
102
+ yield next_val.value
103
+ next_val = next_val.next
104
+ end
105
+ end
106
+
107
+ end
108
+
@@ -0,0 +1,29 @@
1
+ class Array
2
+ def bubble_sort
3
+ i = 0
4
+ j = 0
5
+ v_aux = self.clone
6
+ while j < v_aux.size-1 do
7
+ while i < v_aux.size-1 do
8
+ if v_aux[i] > v_aux[i+1]
9
+ aux = v_aux[i]
10
+ v_aux[i] = v_aux[i+1]
11
+ v_aux[i+1] = aux
12
+ end
13
+
14
+ i = i+1
15
+ end
16
+ j = j+1
17
+ i = 0
18
+ end
19
+
20
+ v_aux
21
+ end
22
+
23
+ def bubble_sort_func
24
+ self_ = self.clone
25
+ aux = self.clone
26
+ (0..self.size-1).each{|x| min = self_.min; prev = aux[x]; aux[x] = min; self_.delete(min)}
27
+ aux
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ class Alimento
2
+ attr_reader :nom, :prot, :gluc, :lip, :cal_index
3
+ include Enumerable, Comparable
4
+ # Se asigna el nombre y la información nutricional del alimento
5
+ def initialize(nom, prot, gluc, lip, gluc_data = nil)
6
+ @nom = nom
7
+ @prot = prot
8
+ @gluc = gluc
9
+ @lip = lip
10
+ @gluc_data = gluc_data
11
+ @cal_index = (@prot.to_f*4 + @gluc.to_f*4 + @lip.to_f*9).round(2)
12
+ end
13
+
14
+ # Muestra la información de un alimento en concreto
15
+ def to_s
16
+ #El huevo frito tiene 14.1 proteinas, 0.0 glúcidos, 19.5 lípidos
17
+ "%21s"%"#{@nom}:%13s "%" #{@prot} %13s "%" #{@gluc} %15s "%" #{@lip} %13s "%" #{@cal_index}"
18
+ end
19
+
20
+ # Se comprueba que no sea un valor negativo, en caso de serlo, se sustituye por un 0
21
+ def not_negative(n)
22
+ n < 0 ? n = 0 : n = n
23
+ end
24
+
25
+ # Calcula el área bajo la curva para los datos tomados en una medición de glucosa en intervalos de tiempo de 5 minutos
26
+ def aibc
27
+ @gluc_data.map{|indv| zero = indv.at(0); prev = -2; indv.map{|index| prev = prev + 1; ((index-zero) + (indv.at(not_negative(prev))-zero))*2.5}.reduce(:+).round(2)}
28
+ end
29
+ end
data/lib/P11/plato.rb ADDED
@@ -0,0 +1,108 @@
1
+ class Plato
2
+ attr_reader :name, :total
3
+ def initialize(name, &block)
4
+ @name = name
5
+ @alimentos = []
6
+ @total = 0
7
+
8
+ if block_given?
9
+ if block.arity == 1
10
+ yield self
11
+ else
12
+ instance_eval(&block)
13
+ end
14
+ end
15
+ end
16
+
17
+ def convert_quantities(amount)
18
+ grams = 0
19
+ prop = 1
20
+
21
+ if amount[:porcion] =~ /taza/i
22
+ amount[:porcion] = amount[:porcion].gsub(/taz(a\s|as\s|a\z|as\z)/, '')
23
+ grams = 3
24
+ else if amount[:porcion] =~ /cucharada/i
25
+ amount[:porcion] = amount[:porcion].gsub(/cucharad(a\s|as\s|a\z|as\z)/, '')
26
+ grams = 0.09
27
+
28
+ else if amount[:porcion] =~ /cucharon/i
29
+ amount[:porcion] = amount[:porcion].gsub(/cucharo(n\s|nes\s|n\z|nes\z)/, '')
30
+ grams = 10
31
+
32
+ else if amount[:porcion] =~ /pieza/i
33
+ amount[:porcion] = amount[:porcion].gsub(/piez(a\s|as\s|a\z|as\z)/, '')
34
+ grams = 1
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+ if amount[:porcion] =~ /pequeñ(a\s|as\s|a\z|as\z|o\s|os\s|o\z|os\z)/i
41
+ amount[:porcion] = amount[:porcion].gsub(/pequeñ(a\s|as\s|a\z|as\z|o\s|os\s|o\z|os\z)/, '')
42
+ grams = grams.to_f / 2
43
+ end
44
+ # reconoce numero y fraccion amount[:porcion] = amount[:porcion].match(/(\d\/\d)|\d/)
45
+
46
+ # Si el número es una fracción
47
+ if amount[:porcion].match(/(\d\/\d)/)
48
+ num = amount[:porcion].match(/(\d\/)/).to_s.gsub(/(\/)/, '').to_f
49
+ den = amount[:porcion].match(/(\/\d)/).to_s.gsub(/(\/)/, '').to_f
50
+ prop = num/den
51
+ else
52
+ # Si el numero es entero
53
+ prop = amount[:porcion].match(/\d/).to_s.to_i
54
+ end
55
+
56
+ grams = grams * prop
57
+ end
58
+
59
+ def insert_food(name, amount)
60
+ food = Food[name]
61
+
62
+ if amount[:porcion]
63
+ quantity = Food[name].cal_index * convert_quantities(amount)
64
+ else
65
+ quantity = Food[name].cal_index * amount[:gramos]/10
66
+ end
67
+
68
+ @alimentos << [food, quantity.round(2)]
69
+ @total = @alimentos.map{|x| x[1]}.reduce(:+)
70
+ end
71
+
72
+ def vegetal(name, amount)
73
+ insert_food(name, amount)
74
+ end
75
+
76
+ def fruta(name, amount)
77
+ insert_food(name, amount)
78
+ end
79
+
80
+ def cereal(name, amount)
81
+ insert_food(name, amount)
82
+ end
83
+
84
+ def proteina(name, amount)
85
+ insert_food(name, amount)
86
+ end
87
+
88
+ def aceite(name, amount)
89
+ insert_food(name, amount)
90
+ end
91
+
92
+ def to_s
93
+ puts @name
94
+
95
+ i = 0
96
+ while(i < @name.size)
97
+ print "="
98
+ i = i + 1
99
+ end
100
+ puts
101
+ puts "Composición nutricional:"
102
+ puts " Glúcidos Proteínas Lípidos Valor energético Valor porcion"
103
+
104
+ @alimentos.map{|x| print x[0], "%8s" % x[1], "\n"}
105
+ print "Valor energético total: ", "%44s" % @total
106
+
107
+ end
108
+ end