Archive for the ‘ruby’ Category

Ruby y las sillas del circo

Thursday, August 25th, 2005

Una noche oscura, sin luna, en la epoca en que el Circo diambulaba por Japón, llegó a pagar su entrada un hombre misterioso. Era una mezcla entre el espíritu amistoso de Mister Miagi y el lado peligroso de Hatori Hanso. El hermano, que desde los 7 años era el responsable de cobrar la entrada al circo, logró percibir que el japonés estába estudiando la forma en que se administraba el sistema de conteo de asientos y recaudación de la plata de las entradas. Todo eso fué en segundos. Pagó, entró, eso fué todo.

A la noche siguiente volvió el hombre y le dijo al hermano -Siempre usan esa hoja de exel y ese cuadernito para el conteo de platas y sillas? -Sí, toda la vida- dijo el hermano. -Aburrido? – Sí, toda la vida- respondió de nuevo. Sin ton ni son, a la velocidad de un Shaolín+Samurai, el hombre se aproximó al oído del hermano y le habló unas palabras en secreto. Luego desapareció. El hermano se iluminó y luego rió.

Esa noche abrió su terminal y escribió un programita que manejara los asientos y las platas de cada noche:

class Seating
	CHAIRS = 100
	PRICE = 4

	def initialize(date,place)
		@date = date
		@place = place
		@money_made = 0
		@chairs_available = CHAIRS
	end

	def enter(num_people)
		num_people.to_i
		@money = num_people*PRICE
		if @chairs_available-num_people < 0
			"Sorry, but there's not enough space inside. We're full."
		else
			@chairs_available -= num_people
			@money_made += @money
			"#{@chairs_available} chairs available, #{@money_made} dollars made for now"
		end
	end

	def exit(num_people)
		num_people.to_i
		@chairs_available += num_people
		"#{@chairs_available} chairs available, #{@money_made} dollars made for now, remember, we never refund the money."
	end

	def get_balance
		"#{@money_made} dolars made up till now."
	end

end

Al la noche siguiente, el hermano abrió su terminal y empezó a usar su primera Clase de Ruby en la vida. Entro en el irb (Interactive Ruby) e inició su objeto:


irb
irb> load "Seating.rb"
irb> todays_seating = Seating.new("18-02-2001","Okinawa")

irb le respondió con una sonrisa y luego estas palabras:


=> # <seating :0xb7dff5b0 @date="18-02-2001", @chairs_available=100, @money_made=0, @place="Okinawa">

Se aproximaron los primeros clientes. El hermano se puso nervioso porque no sabía si su programa funcionaría. Luego se calmó, recitando el mantra que aprendió la noche anterior ("wax on, wax off"). Era un hombre con su esposa y dos hijas. Bien, entran 4 personas.

irb> todays_seating.enter(4)

irb le responde:

=> "96 chairs available, 16 dollars made for now"

El hermano es ahora quien sonríe.

El programita estaba llevando la cuenta de las sillas disponibles y de la plata que llevaban acumulada hasta el momento!

Pero luego llegó el momento que el hermano tenía había temido. Casi nunca pasaba, pero así es la vida. Un bus lleno de viejitas chinas se detuvo frente a la carpa e hicieron fila para entrar. 99 viejitas hablando en japonés pidieron entrar al circo:


irb> todays_seating.enter(99)
=> "Sorry, but there's not enough space inside. We're full."

Voila! No hay campo.

Luego la noche anduvo así:


irb> todays_seating.enter(12)
=> "84 chairs available, 64 dollars made for now"
irb> todays_seating.enter(6)
=> "78 chairs available, 88 dollars made for now"

Y casi al final del espectaculo, a consequencia de un pleito marido vs mujer, la pareja y sus hijas se van:


irb> todays_seating.exit(4)
=> "82 chairs available, 88 dollars made for now, remember, we never refund the money."

Jeje, el circo es pobre. El que paga, ya pagó. Pero los asientos sí se liberaron. Terminó la noche en paz, y listo para dormir, el hermano invocó el último método:


irb> todays_seating.get_balance
=> "88 dolars made up till now."

Apuntó el monto ganado. Listo. Todo bien.

Apuntó? No debería el programa mantener los records de cada noche organizados? Ese programita lo escribiría esa misma noche. Se despidió, y se fué a la terminal.