Đồ họa rùa phiên bản 2


8

Hầu hết các bạn có lẽ đã nghe nói về chương trình Đồ họa Rùa nổi tiếng, ban đầu được phổ biến bởi Logo. Thách thức này là triển khai chương trình Đồ họa Rùa bằng ngôn ngữ bạn chọn.

Quy tắc:

  1. Tầng phải là một đường chéo với kích thước đầu vào bởi người sử dụng thông qua std-in trong các hình thức x/y, đại diện cho xychiều dài tương ứng. xcó thể không quá 20 và ykhông được quá 45,

  2. Khi bút ở trạng thái xuống, nó phải vẽ cả hình vuông (tọa độ x / y) lá rùa và hình vuông con rùa đi vào. Đây là những gì sẽ xảy ra trong cuộc sống thực, vì vậy đó là những gì chương trình của bạn nên làm.

  3. Vị trí ban đầu và hướng của những con rùa phải đầu vào bởi người sử dụng theo hình thức x,y,d, nơi xylà các vị trí trên trục X và trục y, tương ứng, và dlà sự chỉ đạo, nhập như U, D, R, hoặc L(lên, xuống, phải không và trái, tương ứng).

  4. Bạn phải dừng rùa và hiển thị thông báo lỗi nếu rùa chạm tường. Nói cách khác, rùa không thể đi xuyên tường.

  5. Con rùa phải bao gồm các lệnh sau:

Đặt lại - Đặt lại bảng để trống - rùa quay trở lại vị trí và hướng ban đầu.

DRAW và ERASE - Các lệnh này đặt rùa tương ứng để vẽ và xóa.

LÊN và XUỐNG - Hai lệnh này đặt vị trí của công cụ hoạt động (bút hoặc cục tẩy) lên và xuống tương ứng.

HƯỚNG DẪN x - Lệnh này biến rùa thành bất kỳ hướng Bắc, Đông Bắc, Đông, Đông Nam, Nam, Tây Nam, Tây hoặc Tây Bắc, được biểu thị bằng các chữ số 1-8, với Bắc (lên) là 1, Đông Bắc là 2 ...

FORWARD xx - Tiến lên hình vuông rùa xx; FORWARD 15 tiến bộ rùa 15 hình vuông. Nếu con rùa đối mặt với N, E, S, của W, nó sẽ chỉ vẽ theo xhình vuông theo hướng đó. Nếu con rùa đang đối mặt với NE, NW, SE hoặc SW, nó sẽ vẽ theo xhình vuông theo cả hai hướng; tức là trong FORWARD 1 trong khi đối mặt với NE, nó sẽ rút ra điều này:

 X  
X

HIỂN THỊ - Hiển thị bảng, sử dụng Xcho các ô vuông đầy (tọa độ x / y) và một khoảng trống cho các ô vuông trống.

VỊ TRÍ - In tọa độ x / y của rùa trên bảng.

SETPOS xyd - Đặt rùa theo hướng tọa độ x / y d, sử dụng ký hiệu tương tự như lệnh TRỰC TIẾP .

STOP - Hiển thị bảng và chấm dứt chương trình sau khi người dùng nhập ký tự ~.

Các lệnh ví dụ:

TRỰC TIẾP 2 FORWARD 1 HƯỚNG DẪN 4 FORWARD 1:

 X  
X X 

TRỰC TIẾP 2 FORWARD 1 HƯỚNG DẪN 4 FORWARD 4:

 X  
X X  
   X  
    X

HƯỚNG 3 CHO PHÉP 5:

XXXXX

Chương trình này sẽ sử dụng các quy tắc chấm điểm tiêu chuẩn để cố gắng cho phép các ngôn ngữ lập trình không bí truyền, như Java và C ++, cạnh tranh.

Phiên bản 1 ở đây . Nó không yêu cầu người dùng nhập kích thước bảng và điểm bắt đầu rùa, cũng không yêu cầu chuyển động chéo.

Câu trả lời:


2

Python 3,3 (354?)

Tôi nhận thấy đây là một câu hỏi chưa được trả lời và quyết định cho nó đi:

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 Tôi không chắc chắn về thiết lập tính điểm nên điểm của tôi có thể không chính xác!


Đẹp. Tôi đoán bạn thắng.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.