P06 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,112 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ Top Level Namespace
8
+
9
+ &mdash; Documentation by YARD 0.9.9
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ pathId = "";
19
+ relpath = '';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="class_list.html?1"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="_index.html">Index</a> &raquo;
40
+
41
+
42
+ <span class="title">Top Level Namespace</span>
43
+
44
+ </div>
45
+
46
+ <div id="search">
47
+
48
+ <a class="full_list_link" id="class_list_link"
49
+ href="class_list.html">
50
+
51
+ <svg width="24" height="24">
52
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
53
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
54
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
55
+ </svg>
56
+ </a>
57
+
58
+ </div>
59
+ <div class="clear"></div>
60
+ </div>
61
+
62
+ <div id="content"><h1>Top Level Namespace
63
+
64
+
65
+
66
+ </h1>
67
+ <div class="box_info">
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+ </div>
80
+
81
+ <h2>Defined Under Namespace</h2>
82
+ <p class="children">
83
+
84
+
85
+ <strong class="modules">Modules:</strong> <span class='object_link'><a href="P06.html" title="P06 (module)">P06</a></span>
86
+
87
+
88
+
89
+ <strong class="classes">Classes:</strong> <span class='object_link'><a href="Alimento.html" title="Alimento (class)">Alimento</a></span>, <span class='object_link'><a href="Alimento_concreto.html" title="Alimento_concreto (class)">Alimento_concreto</a></span>, <span class='object_link'><a href="Array.html" title="Array (class)">Array</a></span>, <span class='object_link'><a href="List.html" title="List (class)">List</a></span>, <span class='object_link'><a href="Nodo.html" title="Nodo (class)">Nodo</a></span>
90
+
91
+
92
+ </p>
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+ </div>
103
+
104
+ <div id="footer">
105
+ Generated on Tue Nov 28 18:13:07 2017 by
106
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
107
+ 0.9.9 (ruby-2.3.0).
108
+ </div>
109
+
110
+ </div>
111
+ </body>
112
+ </html>
@@ -0,0 +1,23 @@
1
+ require "P06/version"
2
+ require "P06/alimento"
3
+ require "P06/list"
4
+ require "P06/alimento_concreto"
5
+ require "P06/DSL"
6
+ require 'benchmark'
7
+
8
+
9
+ # encoding: utf-8
10
+ # Este modulo se ha creado para poder
11
+ # poner el código que necesitemos
12
+ # poner para poder realizar los
13
+ # TDD del spec.
14
+ # Este código va a pertenecer a las
15
+ # distintas clases que hemos ido creando:
16
+ # Alimento, Alimento_concreto y List.
17
+ #
18
+ #Author: Juan Pablo Claros Romero (alu0100972603@ull.edu.es)
19
+
20
+
21
+ module P06
22
+ # Your code goes here...
23
+ end
@@ -0,0 +1,168 @@
1
+ class DSL
2
+
3
+ attr_accessor :name, :datos, :total
4
+
5
+ def initialize(nombre, alimentos, &block)
6
+ @nombre = nombre
7
+ @datos = []
8
+ @alimentos = alimentos
9
+ @total = 0
10
+
11
+ if block_given?
12
+ if block.arity == 1
13
+ yield self
14
+ else
15
+ instance_eval(&block)
16
+ end
17
+ end
18
+ end
19
+
20
+ def to_s
21
+
22
+ output = "\n#{@nombre}"
23
+ output << "\n#{'=' * 80}\n\n"
24
+ output << "Composicion nutricional:\n"
25
+ output << "\t\t|Proteínas\tGlúcidos\tLípidos\t\tValor Energético\n"
26
+ for i in (0..@alimentos.size-1)
27
+ if @alimentos[i].nombre.size > 7
28
+ output << "#{@alimentos[i].nombre}\t|#{@alimentos[i].proteinas}\t\t#{@alimentos[i].glucidos}\t\t#{@alimentos[i].grasas}\t\t#{@datos[i].round(2)}"
29
+ else
30
+ output << "#{@alimentos[i].nombre}\t\t|#{@alimentos[i].proteinas}\t\t#{@alimentos[i].glucidos}\t\t#{@alimentos[i].grasas}\t\t#{@datos[i].round(2)}"
31
+ end
32
+ @total = @total + datos[i]
33
+ output << "\n"
34
+ end
35
+ output << "#{'=' * 80}\n\n"
36
+ output << "Valor energético total\t\t\t\t\t\t#{@total.round(2)}\n\n"
37
+
38
+ output
39
+ end
40
+
41
+ def vegetal(nombre, opciones = {})
42
+
43
+ gramos = conversor(opciones)
44
+ calorias = 0
45
+
46
+ for i in (0..@alimentos.size-1)
47
+
48
+ if @alimentos[i].nombre == nombre
49
+ calorias = @alimentos[i].calorias*gramos
50
+ end
51
+
52
+ end
53
+
54
+ @datos << calorias
55
+ end
56
+
57
+ def fruta(nombre, opciones = {})
58
+
59
+ gramos = conversor(opciones)
60
+ calorias = 0
61
+
62
+ for i in (0..@alimentos.size-1)
63
+
64
+ if @alimentos[i].nombre == nombre
65
+ calorias = @alimentos[i].calorias*gramos
66
+ end
67
+
68
+ end
69
+
70
+ @datos << calorias
71
+ end
72
+
73
+ def cereal(nombre, opciones = {})
74
+
75
+ gramos = conversor(opciones)
76
+ calorias = 0
77
+
78
+ for i in (0..@alimentos.size-1)
79
+
80
+ if @alimentos[i].nombre == nombre
81
+ calorias = @alimentos[i].calorias*gramos
82
+ end
83
+
84
+ end
85
+
86
+ @datos << calorias
87
+ end
88
+
89
+ def proteina(nombre, opciones = {})
90
+
91
+ gramos = conversor(opciones)
92
+ calorias = 0
93
+
94
+ for i in (0..@alimentos.size-1)
95
+
96
+ if @alimentos[i].nombre == nombre
97
+ calorias = @alimentos[i].calorias*gramos
98
+ end
99
+
100
+ end
101
+
102
+ @datos << calorias
103
+ end
104
+
105
+ def aceite(nombre, opciones = {})
106
+
107
+ gramos = conversor(opciones)
108
+ calorias = 0
109
+
110
+ for i in (0..@alimentos.size-1)
111
+
112
+ if @alimentos[i].nombre == nombre
113
+ calorias = @alimentos[i].calorias*gramos
114
+ end
115
+
116
+ end
117
+
118
+ @datos << calorias
119
+ end
120
+
121
+ def conversor(opciones)
122
+ gramos=0.0
123
+
124
+ if opciones[:amount] =~ /(?i)pieza[s]?\s{0,4}/
125
+ gramos=gramos+1.18
126
+ opciones[:amount] =opciones[:amount].gsub(/(?i)pieza[s]?\s{0,4}/,"")
127
+ end
128
+
129
+ if opciones[:amount] =~ /(?i)taza[s]?\s{0,4}/
130
+ gramos=gramos+2.974
131
+ opciones[:amount] =opciones[:amount].gsub(/(?i)taza[s]?\s{0,4}/,"")
132
+ end
133
+
134
+ if opciones[:amount] =~ /(?i)cucharada[s]?\s{0,4}/
135
+ gramos=gramos+0.089
136
+ opciones[:amount] =opciones[:amount].gsub(/(?i)cucharada[s]?\s{0,4}/,"")
137
+ end
138
+
139
+ if opciones[:amount] =~ /(?i)cucharon(es)?\s{0,4}/
140
+ gramos=gramos+9.778
141
+ opciones[:amount] =opciones[:amount].gsub(/(?i)cucharon(es)?\s{0,4}/,"")
142
+ end
143
+
144
+ if opciones[:amount] =~ /(?i)pequeña[s]?\s{0,1}/
145
+ gramos=gramos-0.2
146
+ opciones[:amount] = opciones[:amount].gsub(/(?i)pequeña[s]?\s{0,1}/,"")
147
+ end
148
+
149
+ if opciones[:amount] =~ /\d\/\d/
150
+ valor1 = /\d\//.match(opciones[:amount]).to_s.gsub(/\//,"")
151
+ valor2 = /\/\d/.match(opciones[:amount]).to_s.gsub(/\//,"")
152
+ resultado = valor1.to_f/valor2.to_f
153
+ gramos=gramos*resultado
154
+ end
155
+
156
+ if opciones[:amount] =~ /\d/
157
+ if gramos > 0
158
+ gramos=gramos*opciones[:amount].to_f
159
+ opciones[:amount] = opciones[:amount].gsub(/\d/,"")
160
+ end
161
+ else
162
+ gramos=gramos+(opciones[:amount]/10)
163
+ end
164
+
165
+ gramos
166
+
167
+ end
168
+ end
@@ -0,0 +1,53 @@
1
+ # Esta clase permite representar a un alimento
2
+ # con sus porteinas, glucidos y grasas correspondientes.
3
+ # Tambien se puede sacar las calorias de los alimentos
4
+ # con las proteinas, glucidos y grasas.
5
+
6
+ class Alimento
7
+
8
+
9
+ attr_reader :nombre, :proteinas, :glucidos, :grasas
10
+
11
+ # Se asigna el nombre del alimento, las proteinas,
12
+ # los glucidos y las grasas.
13
+ def initialize(nombre,proteinas,glucidos,grasas,individuos)
14
+ @nombre = nombre
15
+ @proteinas = proteinas
16
+ @glucidos = glucidos
17
+ @grasas = grasas
18
+ @cal
19
+ @individuos = individuos
20
+ end
21
+
22
+ # Este es el metodo to_s que muestra al alimento por pantalla.
23
+ def to_s
24
+ "El alimento #{@nombre} tiene #{@proteinas} gramos de proteínas, #{@glucidos} gramos de glúcidos, #{@grasas} gramos de lípidos y #{calorias} calorías"
25
+ end
26
+
27
+ # Este metodo muestra al alimento formateado.
28
+ def formateado
29
+ print "Nombre: ",@nombre,"\t","Proteínas: ",@proteinas,"\t","Glúcidos: ",@glucidos,"\t","Grasas: ",@grasas
30
+ puts
31
+ end
32
+
33
+ # Este metodo calcula las calorias del alimento
34
+ # según las proteinas, los glucidos y las grasas
35
+ # del alimento.
36
+ def calorias
37
+ @cal = (4*@proteinas)+(4*@glucidos)+(9*@grasas)
38
+ end
39
+
40
+ # Este metodo lo que hace es devolverme el valor correspondiente
41
+ # dependiendo de la posicion en la que me encuentre en el vector,
42
+ # esto lo hago para que no me acceda a la posicion -1.
43
+ def neg(pos,gluc)
44
+ pos < 0 ? gluc[0] : gluc[pos]
45
+ end
46
+
47
+ # Este metodo me calcula el AIBC. Se ha aplicado la programacion
48
+ # funcional.
49
+ def AIBC
50
+ @individuos.map{|i| g=i.first; pos=-1; i.map{|j| prev=neg(pos,i); pos=pos+1; (((j-g)+(prev-g))*2.5)}.reduce(:+).round(2)}
51
+ end
52
+
53
+ end
@@ -0,0 +1,64 @@
1
+ # Esta clase es una clase heredada de alimento que contiene
2
+ # también el grupo del alimento.
3
+ # Se ha incluido el módulo Comparable
4
+
5
+ class Alimento_concreto < Alimento
6
+
7
+ include Comparable
8
+
9
+ attr_accessor :grupo
10
+
11
+ # Se asigna el grupo del alimento y los otros datos del
12
+ # alimento se le pasa al initialize de Alimento
13
+ def initialize (grupo,nombre,proteinas,glucidos,grasas)
14
+ super(nombre,proteinas,glucidos,grasas,[])
15
+ @grupo = grupo
16
+ end
17
+
18
+ # Este metodo se encarga de realizar las
19
+ # comparaciones.
20
+ def <=>(another)
21
+ calorias <=> another.calorias
22
+ end
23
+
24
+ # Este metodo se encarga de mostrar al alimento
25
+ # por pantalla.
26
+ def to_s
27
+ "Grupo: #{@grupo}\t" + "Nombre: #{@nombre}\t" + "Proteínas: #{@proteinas}\t" + "Glúcidos: #{@glucidos}\t" + "Grasas: #{@grasas}\t" + "Calorias: #{calorias}"
28
+ end
29
+
30
+ end
31
+
32
+ # Aqui abro la clase array y creo los metodos de ordenacion
33
+ # for y each. El sort ya lo tiene la clase
34
+ class Array
35
+
36
+ # Este es el metodo de ordenacio for. Utilizo el
37
+ # metodo burbuja.
38
+ def ordenar_for
39
+
40
+ @vector=self
41
+
42
+ for i in (0..@vector.size-1)
43
+ for j in (0..@vector.size-1)
44
+ if j+1 != @vector.size
45
+ if @vector[j+1] < @vector[j]
46
+ @vector[j], @vector[j+1] = @vector[j+1], @vector[j]
47
+ end
48
+ end
49
+ end
50
+ end
51
+ @vector
52
+ end
53
+
54
+ #Este es el metodo de ordenacion each.
55
+ def ordenar_each
56
+
57
+ @ordenado= []
58
+ aux_self=self.clone
59
+
60
+ (0..self.size-1).each{|i| min=aux_self.min; @ordenado << min; aux_self.delete(min)}
61
+
62
+ @ordenado
63
+ end
64
+ end
@@ -0,0 +1,162 @@
1
+ # Aqui estamos declarando la clase Nodo,
2
+ # pero lo hacemos mediante un Struct,
3
+ # que nos incluye ya los mixin Comparable y Enumerable.
4
+
5
+ Nodo = Struct.new(:value, :next, :prev)
6
+
7
+ # Esta clase permite representar una lista
8
+ # doblemente enlazada.
9
+ # Se ha incluido el módulo Enumerable.
10
+
11
+ class List
12
+
13
+ include Enumerable
14
+ attr_accessor :head, :tail
15
+
16
+ # Se asignan el valor del head y el tail de
17
+ # la lista, que inicialmente es nil.
18
+ def initialize
19
+ @head = nil
20
+ @tail = nil
21
+ end
22
+
23
+ # Inseta un valor por la cabeza de la lista.
24
+ def push_head (nodo)
25
+ if @head == nil
26
+ @head = Nodo.new(nodo,nil,nil)
27
+ @tail = @head
28
+ else
29
+ @head.next = Nodo.new(nodo,nil,@head)
30
+ @head = @head.next
31
+ end
32
+ end
33
+
34
+ # Devuelve el valor de un nodo que le
35
+ # pasamos por parametros.
36
+ def get_value(value)
37
+ if @head == nil #Comprobamos si la lista no esta vacía
38
+ raise RuntimeError, "Lista vacía, no se puede extraer nodo"
39
+ else
40
+ i = @tail
41
+ @valor=nil
42
+ while i != nil
43
+ if i.value == value
44
+ @valor = i.value
45
+ end
46
+ i = i.next
47
+ end
48
+ end
49
+ @valor
50
+ end
51
+
52
+ # Nos devuelve el nodo siguiente de un
53
+ # nodo que le pasamos por parámetros.
54
+ def get_next(value)
55
+ if @head == nil #Comprobamos si la lista no esta vacía
56
+ raise RuntimeError, "Lista vacía, no se puede extraer nodo"
57
+ else
58
+ i = @tail
59
+ @valor = nil
60
+ while i != nil
61
+ if i.value == value
62
+ @valor = i.next
63
+ end
64
+ i = i.next
65
+ end
66
+ end
67
+ @valor
68
+ end
69
+
70
+ # Devuelve el nodo previo al nodo
71
+ # que pasamos por parámetros.
72
+ def get_prev(value)
73
+ if @head == nil #Comprobamos si la lista no esta vacía
74
+ raise RuntimeError, "Lista vacía, no se puede extraer nodo"
75
+ else
76
+ i = @tail
77
+ @valor = nil
78
+ while i != nil
79
+ if i.value == value
80
+ @valor = i.prev
81
+ end
82
+ i = i.next
83
+ end
84
+ end
85
+ @valor
86
+ end
87
+
88
+ # Este metodo nos devuelve el tamaño
89
+ # de la lista.
90
+ def size
91
+ size = 0
92
+ i = @tail
93
+ while i != nil
94
+ i = i.next
95
+ size+=1
96
+ end
97
+ return size
98
+ end
99
+
100
+ # Este metodo nos permite insertar varios
101
+ # valores a la lista.
102
+ # Estos valores se insertan por el head.
103
+ def push_others(values)
104
+ for i in (0..values.size-1)
105
+ push_head(values[i])
106
+ end
107
+ end
108
+
109
+ # Este metodo nos permite extraer el
110
+ # tail de la lista.
111
+ def pop_tail
112
+
113
+ extraido = false
114
+
115
+ if @head == nil #Comprobamos si la lista no esta vacía
116
+ raise RuntimeError, "Lista vacía, no se puede extraer nodo"
117
+ else
118
+ extraido = true
119
+ if @head == @tail
120
+ @head = nil
121
+ @tail = nil
122
+ else
123
+ @tail = @tail.next
124
+ @tail.prev = nil
125
+ end
126
+ end
127
+ return extraido
128
+ end
129
+
130
+ # Este metodo nos permite extraer
131
+ # el head de la lista.
132
+ def pop_head
133
+ extraido = false
134
+ if @head == nil #Comprobamos si la lista no esta vacía
135
+ raise RuntimeError, "Lista vacía, no se puede extraer nodo"
136
+ else
137
+ extraido = true
138
+ if @head == @tail
139
+ @head = nil
140
+ @tail = nil
141
+ else
142
+ @head = @head.prev
143
+ @head.next = nil
144
+ end
145
+ end
146
+
147
+ return extraido
148
+ end
149
+
150
+ # Este metodo es el each que van a
151
+ # utilizar los metodos del módulo
152
+ # Enumerable, pero esta acomodado
153
+ # a nuestra clase.
154
+ def each
155
+ i = @tail
156
+ while i != nil
157
+ yield i.value
158
+ i = i.next
159
+ end
160
+ end
161
+
162
+ end