Turtle Graphics Versi 2

8

Sebagian besar dari Anda mungkin pernah mendengar tentang program Turtle Graphics yang terkenal, yang pada awalnya dipopulerkan oleh Logo. Tantangan ini adalah untuk mengimplementasikan program Turtle Graphics dalam bahasa pilihan Anda.

Aturan:

  1. Lantai harus diagonal dengan dimensi input oleh pengguna melalui std-in dalam bentuk , masing-masing x/ymewakili xdan ypanjang. xmungkin tidak lebih dari 20 dan ymungkin tidak lebih dari 45,

  2. Ketika pena berada dalam kondisi down, ia harus menggambar persegi (koordinat x / y) yang ditinggalkan kura-kura dan persegi yang dimasukkan kura-kura. Inilah yang akan terjadi dalam kehidupan nyata, jadi itulah yang harus dilakukan oleh program Anda.

  3. Posisi awal dan arah kura-kura harus masukan oleh pengguna dalam bentuk x,y,d, di mana xdan yadalah posisi di x dan y-axis, masing-masing, dan dadalah arah, dimasukkan sebagai U, D, R, atau L(atas, bawah, kanan , dan kiri, masing-masing).

  4. Anda harus menghentikan penyu dan menampilkan pesan kesalahan jika penyu menabrak dinding. Dengan kata lain, kura-kura tidak bisa berjalan menembus tembok.

  5. Penyu harus memasukkan perintah-perintah ini:

RESET - Reset papan ke kosong - kura-kura kembali ke posisi awal dan arah.

GAMBAR dan HAPUS - Perintah-perintah ini mengatur kura-kura untuk menggambar dan menghapus, masing-masing.

ATAS dan BAWAH - Kedua perintah ini mengatur posisi alat aktif (pena atau penghapus) ke atas dan ke bawah.

ARAH x - Perintah ini mengubah kura-kura ke arah Utara, Timur Laut, Timur, Tenggara, Selatan, Barat Daya, atau Barat Laut, diwakili sebagai angka 1-8, dengan Utara (atas) menjadi 1, Timur Laut menjadi 2, Timur Laut menjadi 2 ...

FORWARD xx - Uang muka kotak penyu xx; MAJU 15 maju penyu 15 kotak. Jika kura-kura menghadap N, E, S, dari W, ia akan menarik xkotak hanya ke arah itu. Jika kura-kura menghadap NE, NW, SE, atau SW, ia akan menarik xkotak di kedua arah; yaitu di FORWARD 1 sambil menghadap NE, itu akan menggambar ini:

 X  
X

DISPLAY - Menampilkan papan, gunakan Xuntuk kotak diisi (koordinat x / y) dan ruang kosong untuk kotak kosong.

POSISI - Mencetak koordinat x / y kura-kura di papan tulis.

SETPOS xyd - Mengatur kura-kura ke arah menghadap koordinat x / y d, menggunakan notasi yang sama dengan perintah DIRECTION.

STOP - Menampilkan papan, dan menghentikan program setelah pengguna memasukkan karakter ~.

Contoh perintah:

ARAH 2 MAJU 1 ARAH 4 MAJU 1:

 X  
X X 

ARAH 2 MAJU 1 ARAH 4 MAJU 4:

 X  
X X  
   X  
    X

ARAH 3 MAJU 5:

XXXXX

Program ini akan menggunakan aturan penilaian skor untuk mencoba memungkinkan bahasa pemrograman non-esoterik, seperti Java dan C ++, untuk bersaing.

Versi 1 ada di sini . Itu tidak memerlukan input pengguna ukuran papan dan titik awal penyu, juga tidak membutuhkan gerakan diagonal.

Komunitas
sumber

Jawaban:

2

Python 3.3 (354?)

Saya melihat ini sebagai pertanyaan yang belum terjawab dan memutuskan untuk mencobanya:

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 Saya tidak yakin tentang pengaturan penilaian sehingga skor saya mungkin salah!

kitcar2000
sumber
Bagus. Saya kira Anda menang.