Class: Lista

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/feeding/lista.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(head, tail) ⇒ Lista

Se asigna la cabeza y la cola de la lista



21
22
23
24
25
# File 'lib/feeding/lista.rb', line 21

def initialize(head, tail)
	@head = head
	@tail = tail
	@size = 0
end

Instance Attribute Details

#headObject

Se ha incluido el mixin Enumerable



17
18
19
# File 'lib/feeding/lista.rb', line 17

def head
  @head
end

#nodeObject

Se ha incluido el mixin Enumerable



17
18
19
# File 'lib/feeding/lista.rb', line 17

def node
  @node
end

#tailObject

Se ha incluido el mixin Enumerable



17
18
19
# File 'lib/feeding/lista.rb', line 17

def tail
  @tail
end

Instance Method Details

#eachObject

Se incluye el método del mixin Enumerable Se define como una iteración sobre la cabeza de la lista



171
172
173
174
175
176
177
# File 'lib/feeding/lista.rb', line 171

def each
		i = @head
        while !i.nil?
                yield i[:value]
                i = i[:next]
        end
end

#extract_headObject

Extrae un nodo por la cabeza



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/feeding/lista.rb', line 56

def extract_head
	if @head.nil?
		raise "Lista vacía"
	else
		if @head == @tail
			@size = 0
			@head = nil
			@tail = nil
		else
			@size -= 1
			aux = @head
			@head = aux[:next]
			@head[:prev] = nil
		end
	end
end

#extract_tailObject

Extrae un nodo por la cola



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/feeding/lista.rb', line 74

def extract_tail
	if @head.nil?
                       raise "Lista vacía"
               else
                       if @head == @tail
			@size = 0
                               @head = nil
                               @tail = nil
                       else
			@size -= 1
                               aux = @tail
                               @tail = aux[:prev]
                               @tail[:next] = nil
                       end
               end
end

#gases_anuales(gramos) ⇒ Object

Devuelve la cantidad de gases anuales que emiten todos los alimentos que contiene la lista



137
138
139
140
141
142
143
144
145
146
147
# File 'lib/feeding/lista.rb', line 137

def gases_anuales(gramos)
	gases = 0
	iterator = 0
	aux = @head
	while !aux.nil?
		gases += aux[:value].porcion_gases(gramos[iterator])
		aux = aux[:next]
		iterator += 1
	end
	gases.round(2)
end

#gases_diarios(gramos) ⇒ Object

Devuelve la cantidad de gases diarios que emiten todos los alimentos de la lista



163
164
165
166
167
# File 'lib/feeding/lista.rb', line 163

def gases_diarios(gramos)
	gases = gases_anuales(gramos)
	gases_d = (gases / 365).round(3)
	gases_d
end

#get_headObject

Devuelve el nodo que contiene la cabeza de la lista



92
93
94
95
96
97
98
# File 'lib/feeding/lista.rb', line 92

def get_head
	if @head.nil?
		raise "Lista vacía"
	else
		@head
	end
end

#get_sizeObject

Devuelve el tamaño de la lista



110
111
112
# File 'lib/feeding/lista.rb', line 110

def get_size
	@size
end

#get_tailObject

Devuelve el nodo que contiene la cola de la lista



101
102
103
104
105
106
107
# File 'lib/feeding/lista.rb', line 101

def get_tail
	if @head.nil?
		raise "Lista vacía"
	else
		@tail
	end
end

#insert_group(v_nodes) ⇒ Object

Inserta varios nodos de una vez y se quedan en la lista en el orden en el que llegaron



115
116
117
118
119
# File 'lib/feeding/lista.rb', line 115

def insert_group(v_nodes)
	v_nodes.each do |nodo|
		self.insert_tail(nodo)
	end
end

#insert_head(node) ⇒ Object

Inserta un nodo por la cabeza



28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/feeding/lista.rb', line 28

def insert_head(node)
	if @head.nil?
		@size = 1
		@head = Node.new(node, nil, nil)
		@tail = @head
	else
		@size += 1
		aux = @head
		@head[:prev] = Node.new(node, aux, nil)
		@head = @head[:prev]
	end
end

#insert_tail(node) ⇒ Object

Inserta un nodo por la cola



42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/feeding/lista.rb', line 42

def insert_tail(node)
	if @head.nil?
		@size = 1
		@head = Node.new(node, nil, nil)
		@tail = @head
	else
		@size += 1
		aux = @tail
		@tail[:next] = Node.new(node, nil, aux)
		@tail = @tail[:next]
	end
end

#show_listObject

Muestra la lista formateada



122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'lib/feeding/lista.rb', line 122

def show_list
	lista = ""
	if @head.nil?
		raise "Lista vacía"
	else
		aux = @head
		while !aux.nil?
			lista << aux[:value].to_s + " "
			aux = aux[:next]
		end
	end
	lista
end

#terreno_anual(gramos) ⇒ Object

Devuelve la cantidad de terreno que usan todos los alimentos de la lista



150
151
152
153
154
155
156
157
158
159
160
# File 'lib/feeding/lista.rb', line 150

def terreno_anual(gramos)
	terreno = 0
	iterator = 0
	aux = @head
	while !aux.nil?
		terreno += aux[:value].porcion_terreno(gramos[iterator])
		aux = aux[:next]
		iterator += 1
	end
	terreno.round(2)
end