https://github.com/thiagokimo/spock-path
Desafio Toystalk
https://github.com/thiagokimo/spock-path
Last synced: 11 months ago
JSON representation
Desafio Toystalk
- Host: GitHub
- URL: https://github.com/thiagokimo/spock-path
- Owner: thiagokimo
- Created: 2013-11-03T01:37:10.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2013-11-03T01:48:21.000Z (over 12 years ago)
- Last Synced: 2023-04-01T12:04:41.658Z (over 3 years ago)
- Language: Ruby
- Homepage: http://thiagokimo.github.io/spock-path/
- Size: 195 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Desafio Toystalk
## Problema
O Cão Spock (encontrado no arquivo "spock_walk.png") pode andar em uma sala dividida em áreas como um grid (encontrado no arquivo "grid.jpg"). Ele pode andar em uma direção da cada vez (frente, para trás, direita ou esquerda, ou (x+1, y), (x-1, y), (x, y+1), e (x, y-1) se você preferir). Mas, tem um probleminha.
Ele só pode ir nas áreas onde a soma dos algarismos das coordenadas X e Y são menores ou iguais a 19. O ponto 77,49, por exemplo, não é acessível porque 7+7+4+9=27 é > que 19.
Queremos saber quantos pontos o Cão Spock pode caminhar, se ele começar do 0,0.
##Tecnologias e abordagens utilizadas
O desafio foi solucionado em Ruby, com uma abordagem orientada a testes utilizando a biblioteca **MiniTest**.
##Solução
A heurística utilizada pra resolver o problema é bastante simples. O primeiro passo foi encontrar o maior número que obedece a equação (soma dos algarismos das coordenadas ser menor ou igual a 19) com uma das coordenadas iguais a zero. Fazendo isso, descobri o número 298. Então considerei ele o maior valor de coordenada acessível a partir do ponto (0,0).
Para obter todos os pontos, variei os pontos x e y, colocando um deles como 0 e o outro como 298. A variação foi feita subtraindo o valor da coordenada 298 de 1, e acrescentando 1 na coordenada que iniciou com 0. A variação terminou quando a coordenada que iniciou com 298 ficou com 0 e a coordenada que iniciou com o valor 0 chegou em 298.
Para a contagem dos pontos, retirei 1 ponto ( o ponto (0,0) ), e multipliquei o resultado encontrado por 4, já que calculei apenas os pontos do 1º quadrante. Essa multiplicação seria o mesmo de fazer um espelhamento e rotacionamento da área encontrada no 1º quadrante em torno dos eixos X e Y do plano cartesiano.
##Projeto
Para executar o script que tem a solução do problema, basta executar o comando:
> `ruby solution.rb`
Para executar os testes do projeto, basta digitar na raiz do projeto o comando:
> `rake`