पायथन 3, स्कोर = 1.57
पहले हमारा साँप एक दूसरे से समान दूरी के साथ खड़ी रेखाएँ बनाता हुआ चित्र बनाता है।
हम एक ऊर्ध्वाधर रेखा में एक दूसरे के बगल में दो बिंदु लेकर और एक लूप बनाकर इस सांप का विस्तार कर सकते हैं जिनके अंत बिंदु हैं।
| |
| => +----+
| +----+
| |
हम बिंदुओं को जोड़े में व्यवस्थित करते हैं और प्रत्येक जोड़ी के लिए हम लूप के आकार और औसत चमक मूल्य को संग्रहीत करते हैं जो सबसे बड़ी औसत चमक देता है।
प्रत्येक चरण में हम उच्चतम मूल्य के साथ जोड़ी चुनते हैं विस्तार पर अधिकतम औसत चमक प्राप्त करने के लिए अपने लूप का विस्तार करते हैं और जोड़ी के लिए नए इष्टतम लूप आकार और चमक मूल्य की गणना करते हैं।
हम मान द्वारा क्रमबद्ध ढेर संरचना में मूल्य (मान, आकार, बिंदु_पेयर) को संग्रहीत करते हैं ताकि हम सबसे बड़े तत्व (ओ (1)) को हटा सकें और नए संशोधित एक (ओ (लॉग एन)) को कुशलता से जोड़ सकें।
जब हम पिक्सेल गणना सीमा तक पहुँचते हैं तो हम रुक जाते हैं और वह साँप अंतिम साँप होगा।
परिणामों में ऊर्ध्वाधर रेखाओं के बीच की दूरी बहुत कम प्रभाव डालती है इसलिए लगातार 40 पिक्सेल चुना गया था।
परिणाम
swirl 1.33084397946
chaos 1.76585674741
fractal 1.49085737611
bridge 1.42603926741
balls 1.92235115238
scream 1.48603818637
----------------------
average 1.57033111819
नोट: मूल "द स्क्रीम" तस्वीर उपलब्ध नहीं थी इसलिए मैंने समान रिज़ॉल्यूशन के साथ एक अन्य "द स्क्रीम" तस्वीर का उपयोग किया।
जिफ़ ने सांप को "जलतरंग" की छवि पर विस्तारित प्रक्रिया दिखाते हुए कहा:
कोड स्टड से एक (या अधिक स्थान अलग) फ़ाइल नाम लेता है और परिणामस्वरूप साँप छवियों को पीएनजी फ़ाइलों को लिखता है और स्कोर को स्टडआउट करने के लिए प्रिंट करता है।
from PIL import Image
import numpy as np
import heapq as hq
def upd_sp(p,st):
vs,c=0,0
mv,mp=-1,0
for i in range(st,gap):
if p[1]+i<h:
vs+=v[p[0],p[1]+i]+v[p[0]+1,p[1]+i]
c+=2
if vs/c>mv:
mv=vs/c
mp=i
return (-mv,mp)
mrl=[]
bf=input().split()
for bfe in bf:
mr,mg=0,0
for gap in range(40,90,1500):
im=Image.open(bfe)
im_d=np.asarray(im).astype(int)
v=im_d[:,:,0]+im_d[:,:,1]+im_d[:,:,2]
w,h=v.shape
fp=[]
sp=[]
x,y=0,0
d=1
go=True
while go:
if 0<=x+2*d<w:
fp+=[(x,y)]
fp+=[(x+d,y)]
sp+=[(x-(d<0),y)]
x+=2*d
continue
if y+gap<h:
for k in range(gap):
fp+=[(x,y+k)]
y+=gap
d=-d
continue
go=False
sh=[]
px=im.load()
pl=[]
for p in fp:
pl+=[v[p[0],p[1]]]
px[p[1],p[0]]=(0,127,0)
for p in sp:
mv,mp=upd_sp(p,1)
if mv<=0:
hq.heappush(sh,(mv,1,mp+1,p))
empty=False
pleft=h*w//3
pleft-=len(fp)
while pleft>gap*2 and not empty:
if len(sh)>0:
es,eb,ee,p=hq.heappop(sh)
else:
empty=True
pleft-=(ee-eb)*2
mv,mp=upd_sp(p,ee)
if mv<=0:
hq.heappush(sh,(mv,ee,mp+1,p))
for o in range(eb,ee):
pl+=[v[p[0],p[1]+o]]
pl+=[v[p[0]+1,p[1]+o]]
px[p[1]+o,p[0]]=(0,127,0)
px[p[1]+o,p[0]+1]=(0,127,0)
pl+=[0]*pleft
sb=sum(pl)/len(pl)
ob=np.sum(v)/(h*w)
im.save(bfe[:-4]+'snaked.png')
if sb/ob>mr:
mr=sb/ob
mg=gap
print(bfe,mr)
mrl+=[mr]
print(sum(mrl)/len(mrl))
[![image description](SE URL for downsized image)](URL for original image)
:।