Python -> Piet, 385 345 char
Dimungkinkan untuk menghasilkan program Piet dengan ini. Saya bisa saja berhenti pada piksel acak, tetapi saya ingin membuat program "menarik". Fungsinyam
melukis sebuah piksel warna, dan secara rekursif melangkah ke masing-masing tetangga piksel tersebut. Ada cara-cara yang lebih baik untuk menggambar gumpalan acak, tetapi ini disesuaikan untuk mengakhiri dalam sejumlah langkah yang wajar, jadi itu cukup baik untuk golf. Fungsi ini R(w,h,n)
menarik n gumpalan acak ke gambar putih ( w x h ), dan mencetak hasilnya dalam format PPM.
Saya terutama bangga dengan cara saya menghasilkan warna - untuk pilihan acak 0 <= c < 20
,
`[0,192,255][int(x)]`for x in'0002212220200101121100'[c:c+3]
adalah kode desimal untuk warna yang valid dalam palet Piet dengan cara a kode Gray single-track . Artinya, setiap warna diwakili oleh 3 bit yang berdekatan, dan setiap irisan '0003...0'[c:c+3]
mewakili warna yang berbeda. Karena ini bukan daftar lengkap 27 kata pada 3 huruf, saya benar-benar beruntung menemukan kode Gray.
from random import*
r=randint
def R(w,h,n):
M=[6]*h*w
def m(x,y,c,d):M[y%h*w+x%w]=c;t=r(0,15)*(r(0,d)<2);t&8and m(x+1,y,c,d+1);t&4and m(x-1,y,c,d+1);t&2and m(x,y+1,c,d+1);t&1and m(x,y-1,c,d+1)
while n:m(r(0,w),r(0,h),r(0,19),0);n-=1
print"P3 %s %s 255 "%(w,h)+' '.join(`[0,192,255][int(x)]`for c in M for x in'0002212220200101121100'[c:c+3])
Output sampel, dihasilkan oleh perintah R(30,40,500)
Tanpa impor, saya dapat menuliskannya sebagai 1-liner yang tepat (bebas koma):
import random
R=(lambda P,I,E,T:lambda w,h,n:E(w,h,I(w,h,n,lambda z,c,d,t:sum((((z,c),)*t*T(0,1)or m((z[0]+a,z[1]+b),c,d+1,T(0,d)>1)for a,b in((0,1),(1,0),(-1,0),(0,-1))),()))))(range,lambda w,h,n,m:dict(sum((m((T(0,w),T(0,h)),T(0,19),0,0)for _ in P(n)),())),lambda w,h,M:"P3 %s %s 255 "%(w,h)+' '.join(' '.join(`(x&1)*255+(x&2)*96`for x in map(int,'0001121110100202212200'[c:c+3]))for c in(M[z]if z in M else 6for z in((x,y)for y in P(h)for x in P(w)))),random.randint)
tapi ini sangat lambat (dan hampir 100 karakter lebih lama) ... meskipun saya tidak sepenuhnya yakin mengapa (dan tidak terlalu cenderung untuk mencari tahu).