Skip to content

Commit

Permalink
Modificados nomes das pastas e adicionados arquivos do Dojo UENF 3
Browse files Browse the repository at this point in the history
  • Loading branch information
hugomaiavieira committed Apr 22, 2010
1 parent c94ba9a commit 4e6e1f1
Show file tree
Hide file tree
Showing 11 changed files with 215 additions and 0 deletions.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
56 changes: 56 additions & 0 deletions 2010.04.20.lampadas_no_corredor/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
Dojo UENF [3]
=============

Problema: Lâmpadas no corredor
------------------------------

Um homem chamado José é o responsável por ligar e desligar as luzes do corredor
em nossa universidade. Cada lâmpadas tem seu próprio interruptor que troca o
estado da luz. Se a luz esta apagada, apertando o interruptor ela passa a estar
ligada. Apertando novamente ela erá desligar. Inicialmente todas as lâmpadas
estão desligadas.

José faz uma coisa peculiar, Se tem *n* lâmpadas no corredor, ele caminha até
o fim do corredor e volta *n* vezes. Na *i*ésima caminhada, ele aperta apenas os
interruptores aos quais sua posição é divisível por *i*. Ele não aperta nenhum
interruptor na volta à sua posição inicial, apenas na ida. A *i*ésima caminhada
é definida como ir ao fim do corredor e voltar.

Determine qual é o estado final de cada lâmpada. Está ligada ou desligada?

*Entrada*
A entrada será um inteiro indicando o número de lâmpadas no corredor. Zero
indica o fim da entrada e não deve ser processado.

*Saída*
A saída deve indicar o estado, ligada ou desligada, das lâmpadas.

*Exemplo de entrada*
3

*Exemplo de saída*
[on, off, off]


**Obs.:** Este problema foi baseado no problema "Ligth, More Ligth" do livro
*Programming Challenges* de *Steven S. Skiena* e *Miguel A. Revilla*.

Participantes
-------------

* Eduardo Hertz
* Herond Salles
* Hugo Maia Vieira
* Mayra Santana
* Rodrigo Manhães
* Sânya Carvalho

Observação
----------

O arquivo __dojo.rb deriva de uma discussão que tivemos, levantada por Rodrigo,
de como os testes deveriam se escritos. O relato da discussão está no próprio
arquivo.

<!--![Foto do dia 20/04/2010]()-->

55 changes: 55 additions & 0 deletions 2010.04.20.lampadas_no_corredor/__dojo.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# Este arquivo surgiu de uma discussão que tivemos, levantada por Rodrigo, de
# como os testes deveriam se escritos.

require "corredor"

describe Corredor do

it 'deve ter como estado inicial todas as lâmpadas apagadas' do
corredor = Corredor.new 1
corredor.should have(1).lampadas
corredor.estados_das_lampadas.should == [0]

corredor = Corredor.new 50000
corredor.should have(50000).lampadas
corredor.estados_das_lampadas.
should == (1..50000).to_a.collect {|x| 0}
end

it "deve calcular o estado das lâmpadas ao passar" do
verificar_estado :lampadas => 1, :resultado => [1]
verificar_estado :lampadas => 2, :resultado => [1, 0]
verificar_estado :lampadas => 1, :resultado => [1, 0, 0, 1]
end

# Este teste demorou 93 segundos para rodar no ruby 1.8
it "tendo 6241 lâmpadas a última lâmpada deve terminar com estado 1" do
corredor = Corredor.new 6241
corredor.passar
corredor.estados_das_lampadas.last.should == 1
end

def verificar_estado(params)
corredor = Corredor.new params[:lampadas]
corredor.passar
corredor.estados_das_lampadas.should == params[:resultado]
end

end

describe Lampada do

it 'deve ter o estado inicial de apagado' do
Lampada.new.estado.should be_zero
end

it 'deve inverter o estado quando acionada' do
lampada = Lampada.new
lampada.acionar
lampada.estado.should == 1
lampada.acionar
lampada.estado.should == 0
end

end

27 changes: 27 additions & 0 deletions 2010.04.20.lampadas_no_corredor/corredor.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
require "lampada"

class Corredor
attr_reader :lampadas

def initialize lampadas
@lampadas = []
lampadas.times do
@lampadas << Lampada.new
end
end

def estados_das_lampadas
@lampadas.collect {|lampada| lampada.estado}
end

def passar
@lampadas.count.times do |passada|
@lampadas.each_with_index do |lampada, i|
if (i+1) % (passada+1) == 0
lampada.acionar
end
end
end
end
end

12 changes: 12 additions & 0 deletions 2010.04.20.lampadas_no_corredor/lampada.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
class Lampada
attr_reader :estado

def initialize
@estado = 0
end

def acionar
@estado = @estado.zero? ? 1 : 0
end
end

65 changes: 65 additions & 0 deletions 2010.04.20.lampadas_no_corredor/lampadas_no_corredor_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
require "corredor"

describe Corredor do

it "deve conter inicialmente 1 lâmpada com o estado Apagado" do
corredor = Corredor.new 1
corredor.should have(1).lampadas
corredor.estados_das_lampadas.should == [0]
end

it "deve conter inicialmente 5 lâmpadas com estado Apagado" do
corredor = Corredor.new 5
corredor.should have(5).lampadas
corredor.estados_das_lampadas.should == [0, 0, 0, 0, 0]
end

it "tendo 1 lâmpada deve terminar com estado [1]" do
corredor = Corredor.new 1
corredor.passar
corredor.estados_das_lampadas.should == [1]
end

it "tendo 2 lâmpadas deve terminar com estados [1, 0]" do
corredor = Corredor.new 2
corredor.passar
corredor.estados_das_lampadas.should == [1, 0]
end

it "tendo 3 lâmpadas deve terminar com estados [1, 0, 0]" do
corredor = Corredor.new 3
corredor.passar
corredor.estados_das_lampadas.should == [1, 0, 0]
end

it "tendo 4 lâmpadas deve terminar com estados [1, 0, 0, 1]" do
corredor = Corredor.new 4
corredor.passar
corredor.estados_das_lampadas.should == [1, 0, 0, 1]
end

# Este teste demorou 93 segundos para rodar no ruby 1.8
it "tendo 6241 lâmpadas a última lâmpada deve terminar com estado 1" do
corredor = Corredor.new 6241
corredor.passar
corredor.estados_das_lampadas.last.should == 1
end

end

describe Lampada do

it 'deve ter o estado inicial de apagado' do
Lampada.new.estado.should be_zero
end

it 'deve inverter o estado quando acionada' do
lampada = Lampada.new
lampada.acionar
lampada.estado.should == 1
lampada.acionar
lampada.estado.should == 0
end

end

0 comments on commit 4e6e1f1

Please sign in to comment.