Turtle Graphics Versão 2

8

Muitos de vocês provavelmente já ouviram falar do famoso programa Turtle Graphics, inicialmente popularizado pelo Logo. Esse desafio é implementar um programa Turtle Graphics no seu idioma preferido.

Regras:

  1. O piso deve ser uma diagonal com as dimensões inseridas pelo usuário através de std-in no formulário x/y, representando o comprimento xe y, respectivamente. xnão pode ser superior a 20 e ynão superior a 45,

  2. Quando a caneta está no estado inativo, ela deve desenhar o quadrado (a coordenada x / y) que a tartaruga deixa e o quadrado em que a tartaruga entra. Isso é o que aconteceria na vida real, e é isso que o seu programa deve fazer.

  3. Posição inicial e o sentido da tartaruga devem ser introduzidas pelo utilizador, sob a forma x,y,d, onde xe ysão as posições de X e Y-eixo, respectivamente, e dé o sentido, inserido como U, D, R, ou L(para cima, para baixo, para a direita e esquerda, respectivamente).

  4. Você deve parar a tartaruga e exibir uma mensagem de erro se ela bater na parede. Em outras palavras, a tartaruga não pode atravessar a parede.

  5. A tartaruga deve incluir estes comandos:

RESET - Redefine o quadro para branco - a tartaruga volta à posição e direção inicial.

DRAW e ERASE - Esses comandos definem a tartaruga para desenhar e apagar, respectivamente.

ACIMA e ABAIXO - Esses dois comandos definem a posição da ferramenta ativa (caneta ou borracha) para cima e para baixo, respectivamente.

DIREÇÃO x - Este comando gira a tartaruga para qualquer direção Norte, Nordeste, Leste, Sudeste, Sul, Sudoeste, Oeste ou Noroeste, representados como dígitos de 1 a 8, com Norte (acima) sendo 1, Nordeste sendo 2 ...

FORWARD xx - Avança os quadrados da tartaruga xx; FORWARD 15 avança a tartaruga 15 quadrados. Se a tartaruga estiver de frente para N, E, S, de W, ela desenhará xquadrados somente nessa direção. Se a tartaruga estiver voltada para NE, NW, SE ou SW, ela desenhará xquadrados nas duas direções; ou seja, no FORWARD 1, enquanto enfrenta NE, ele desenhará o seguinte:

 X  
X

DISPLAY - Exibe o quadro, usando Xpara quadrados preenchidos (coordenadas x / y) e um espaço em branco para quadrados vazios.

POSIÇÃO - Imprime a coordenada x / y da tartaruga no quadro.

SETPOS xyd - Define a tartaruga na direção voltada para a coordenada x / y d, usando a mesma notação que o comando DIRECTION.

PARAR - Exibe o quadro e encerra o programa após o usuário inserir o personagem ~.

Comandos de exemplo:

DIREÇÃO 2 FRENTE 1 DIREÇÃO 4 FRENTE 1:

 X  
X X 

DIREÇÃO 2 FRENTE 1 DIREÇÃO 4 FRENTE 4:

 X  
X X  
   X  
    X

DIREÇÃO 3 FRENTE 5:

XXXXX

Este programa usará regras padrão pontuação de para tentar permitir que linguagens de programação não esotéricas, como Java e C ++, concorram.

A versão 1 está aqui . Ele não exigia a entrada do usuário do tamanho da placa e do ponto inicial da tartaruga, nem exigia movimentos diagonais.

Comunidade
fonte

Respostas:

2

Python 3.3 (354?)

Percebi isso como uma pergunta sem resposta e decidi tentar:

v=input().split('/')+input().split(',')+[input().split(' '),0,1,'X','U','D','L','R']
w,h,x,y,d,c,p,r,m,n,s,l,e=v
w,h,x,y=int(w),int(h),int(x),int(y)
g=[[' 'for x in range(int(h))]for y in range(int(w))]
while p<len(c):
 i=c[p]
 if r:
  g[y][x]=m
 if i=='RESET':
  w,h,x,y,d,c,p,r,m,n,s,l,e=v
 if i=='DRAW':
  m='X'
 if i=='ERASE':
  m=' '
 if i=='UP':
  r=0
 if i=='DOWN':
  r=1
 if i=='DIRECTION':
  p+=1
  i=int(c[p])
  d=''
  if i in[8,1,2]:
   d+=n
  if i in[4,5,6]:
   d+=s
  if i in[6,7,8]:
   d+=l
  if i in[2,3,4]:
   d+=e
 if i=='FORWARD':
  p+=1
  i=int(c[p])
  for _ in range(i):
   if d.find(n)+1:
    y-=1
   if d.find(s)+1:
    y+=1
   if d.find(l)+1:
    x-=1
   if d.find(e)+1:
    x+=1
   if r:
    g[y][x]=m
 if i=='DISPLAY':
  for z in g:
   print(''.join(z))
 if i=='POSITION':
  print(x,y)
 if i=='SETPOS':
  p+=3
  x,y=c[p-2:p]
  d=''
  if i in[8,1,2]:
   d+=n
  if i in[4,5,6]:
   d+=s
  if i in[6,7,8]:
   d+=w
  if i in[2,3,4]:
   d+=e
 if i=='STOP':
  while input()!='~':
   pass
  exit
 if x>w or x<0 or y>h or y<0:
  print('!')
  exit
 p+=1

PS Não tenho certeza sobre a configuração da pontuação, por isso minha pontuação pode estar incorreta!

kitcar2000
fonte
Agradável. Eu acho que você venceu.