Class: Lista
Instance Attribute Summary collapse
-
#head ⇒ Object
Se ha incluido el mixin Enumerable.
-
#node ⇒ Object
Se ha incluido el mixin Enumerable.
-
#tail ⇒ Object
Se ha incluido el mixin Enumerable.
Instance Method Summary collapse
-
#each ⇒ Object
Se incluye el método del mixin Enumerable Se define como una iteración sobre la cabeza de la lista.
-
#extract_head ⇒ Object
Extrae un nodo por la cabeza.
-
#extract_tail ⇒ Object
Extrae un nodo por la cola.
-
#gases_anuales(gramos) ⇒ Object
Devuelve la cantidad de gases anuales que emiten todos los alimentos que contiene la lista.
-
#gases_diarios(gramos) ⇒ Object
Devuelve la cantidad de gases diarios que emiten todos los alimentos de la lista.
-
#get_head ⇒ Object
Devuelve el nodo que contiene la cabeza de la lista.
-
#get_size ⇒ Object
Devuelve el tamaño de la lista.
-
#get_tail ⇒ Object
Devuelve el nodo que contiene la cola de la lista.
-
#initialize(head, tail) ⇒ Lista
constructor
Se asigna la cabeza y la cola de la lista.
-
#insert_group(v_nodes) ⇒ Object
Inserta varios nodos de una vez y se quedan en la lista en el orden en el que llegaron.
-
#insert_head(node) ⇒ Object
Inserta un nodo por la cabeza.
-
#insert_tail(node) ⇒ Object
Inserta un nodo por la cola.
-
#show_list ⇒ Object
Muestra la lista formateada.
-
#terreno_anual(gramos) ⇒ Object
Devuelve la cantidad de terreno que usan todos los alimentos de la lista.
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
#head ⇒ Object
Se ha incluido el mixin Enumerable
17 18 19 |
# File 'lib/feeding/lista.rb', line 17 def head @head end |
#node ⇒ Object
Se ha incluido el mixin Enumerable
17 18 19 |
# File 'lib/feeding/lista.rb', line 17 def node @node end |
#tail ⇒ Object
Se ha incluido el mixin Enumerable
17 18 19 |
# File 'lib/feeding/lista.rb', line 17 def tail @tail end |
Instance Method Details
#each ⇒ Object
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_head ⇒ Object
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_tail ⇒ Object
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_head ⇒ Object
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_size ⇒ Object
Devuelve el tamaño de la lista
110 111 112 |
# File 'lib/feeding/lista.rb', line 110 def get_size @size end |
#get_tail ⇒ Object
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_list ⇒ Object
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 |