Skip to content

Instantly share code, notes, and snippets.

@jccorrea
Forked from nirev/explorando_marte.md
Created August 17, 2016 02:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jccorrea/1aff43d45dae7aa278228175526eb0f8 to your computer and use it in GitHub Desktop.
Save jccorrea/1aff43d45dae7aa278228175526eb0f8 to your computer and use it in GitHub Desktop.
Teste de Programação - Backend - XERPA

Teste de Programação - Backend - XERPA

Olá! Como parte do processo de seleção da Xerpa, gostaríamos que você fizesse uma pequena tarefa. Esperamos que ela seja feita preferencialmente em uma das nossas linguagens principais: Elixir, Erlang ou Clojure.

A ideia é olhar como é seu estilo de programação e quais decisões você toma ao resolver um problema. Para isso, crie um projeto no seu Github para podermos acompanhar a árvore de commits!

Sinta-se à vontade para criar em cima do problema abaixo. Caso algo não esteja claro, pode assumir o que for para você, apenas indique suas suposições em documentação. A especificação é bem simples e, portanto, caso queira expandir a solução para algo maior, fique à vontade: por exemplo, pode criar um serviço web e adaptar as entradas e saídas, criar uma interface gráfica, etc.

Qualquer dúvida maior pode nos perguntar, mas no geral, divirta-se!

Explorando Marte

Um conjunto de sondas foi enviado pela NASA à Marte e irá pousar num planalto. Esse planalto, que curiosamente é retangular, deve ser explorado pelas sondas para que suas câmera embutidas consigam ter uma visão completa da área e enviar as imagens de volta para a Terra.

A posição e direção de uma sonda são representadas por uma combinação de coordenadas x-y e uma letra representando a direção cardinal para qual a sonda aponta, seguindo a rosa dos ventos em inglês.

rosa dos ventos

O planalto é divido numa malha para simplificar a navegação. Um exemplo de posição seria (0, 0, N), que indica que a sonda está no canto inferior esquerdo e apontando para o Norte.

Para controlar as sondas, a NASA envia uma simples sequência de letras. As letras possíveis são "L", "R" e "M". Destas, "L" e "R" fazem a sonda virar 90 graus para a esquerda ou direita, respectivamente, sem mover a sonda. "M" faz com que a sonda mova-se para a frente um ponto da malha, mantendo a mesma direção.

Nesta malha o ponto ao norte de (x,y) é sempre (x, y+1).

Você deve fazer um programa que processe uma série de instruções enviadas para as sondas que estão explorando este planalto. O formato da entrada e saída deste programa segue abaixo.

A forma de entrada e saída dos dados fica à sua escolha.

ENTRADA

A primeira linha da entrada de dados é a coordenada do ponto superior-direito da malha do planalto. Lembrando que a inferior esquerda sempre será (0,0).

O resto da entrada será informação das sondas que foram implantadas. Cada sonda é representada por duas linhas. A primeira indica sua posição inicial e a segunda uma série de instruções indicando para a sonda como ela deverá explorar o planalto.

A posição é representada por dois inteiros e uma letra separados por espaços, correpondendo à coordenada X-Y e à direção da sonda. Cada sonda será controlada sequencialmente, o que quer dizer que a segunda sonda só irá se movimentar após que a primeira tenha terminado suas instruções.

SAÍDA

A saída deverá contar uma linha para cada sonda, na mesma ordem de entrada, indicando sua coordenada final e direção.

Exemplos de Entrada e Saída:

####Entrada de Teste:

5 5
1 2 N
LMLMLMLMM
3 3 E
MMRMMRMRRM

Saída esperada:

1 3 N
5 1 E
@jccorrea
Copy link
Author

jccorrea commented Aug 17, 2016

No meu entendimento x,y,Dir corresponderão aos eixos x,y e também serão longitude e latitude.
"X "corresponde a W e E . Já Y corresponde em N e S da roda dos ventos. Se eu iniciar uma sequencia em de entrada em (1,2,N) (x=1,y=2 e dir=N) e obter uma sequencia de letras enviadas pela NASA "LMM" o resultado seria:

  1. aplicando "L" , ficaria (1,2,W)
  2. apliquei "M",mover a sonda em direção ao Oeste(W) ficaria (2,2,W)
  3. aplico o ultimo "M", movendo a sonda para frente em direção ao oeste, ficaria (3,2,W) na posição final.

Não consegui compreender o "5, 5 "inicial na posição superior direita e nem o "0,0" na posição esquerda. Poderia colocar como 2 pontos na malha,mas não entendi a relação com as sondas.Então deixei de lado por enquanto.

@jccorrea
Copy link
Author

inicio

-- coding: utf-8 --

"""
Created on Tue Aug 16 20:10:25 2016

@author: jccorrea
"""

"""
Posição e direção da Sonda N,S,E,W
"""

Controle da Sonda, comando "L","R","M"

EX DE COORDENADA. (0,0,N)

read sondainst file

works fine

import csv

with open('/Users/jccorrea/sondainst.csv', 'r') as f:
reader = csv.reader(f)
sonda_list = list(reader)

sonda_list

print(sonda_list)

--testes
for line in f:
print line

f = open('sondainst.txt', 'r')
s_list = list(f.read())
s_list x = 0
y = 0
def movesonda(x,y,d):
f = open('sondainst.txt', 'w')
x = 0
y = 0
print f.
movesonda(5,5)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment