Skip to content

Instantly share code, notes, and snippets.

@jonasabreu
Created December 3, 2012 21:37
Show Gist options
  • Save jonasabreu/4198321 to your computer and use it in GitHub Desktop.
Save jonasabreu/4198321 to your computer and use it in GitHub Desktop.
# Meo deus! esse require abaixo abre Array e acrescenta o método to_set !!!
require 'set' # Sim. Um set. Precisa de acesso O(1)
class Robo
def initialize(terreno, posicao, direcao)
@terreno = terreno
@posicao = posicao
@direcao = direcao
@andar = { :norte => [0, 1],
:sul => [0, -1],
:leste => [-1, 0],
:oeste => [1, 0]}
@virar = { :esquerda => {:norte => :leste, :leste => :sul, :sul => :oeste, :oeste => :norte },
:direita => {:norte => :oeste, :oeste => :sul, :sul => :leste, :leste => :norte }}
puts "Robo aterrissou em #{posicao} virado para #{direcao}"
end
def anda
mod = @andar[@direcao]
posicao = [@posicao[0] + mod[0], @posicao[1] + mod[1]]
if @terreno.include? posicao
puts "Impossivel caminhar para #{posicao}"
else
puts "Caminhou de #{@posicao} para #{posicao}"
@posicao = posicao
end
end
def vira(direcao)
virou = @virar[direcao][@direcao]
puts "Virou de #{@direcao} para #{virou}"
@direcao = virou
end
end
puts "anda => caminha na direcao atual"
puts "vira esquerda|direita => vira para esquerda ou direita"
puts "Ctrl+d para encerrar"
robo = Robo.new([[1, 1], [1, 2], [5, 4]].to_set, [0,0], :norte)
print "> "
ARGF.each_line do |line|
command = line.split " "
if command[1].nil?
robo.send command[0].to_sym
else
robo.send command[0].to_sym, command[1].to_sym
end
print "> "
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment