পাইথন 3, স্কোর = 1.57
প্রথমে আমাদের সাপ একে অপরের থেকে সমান দূরত্বের সাথে উল্লম্ব রেখা তৈরি করে চিত্র ভ্রমণ করে।
উল্লম্ব লাইনে একে অপরের পাশে দুটি পয়েন্ট নিয়ে এবং একটি লুপ তৈরি করে যার প্রান্তগুলি সেগুলি করে আমরা এই সাপটিকে প্রসারিত করতে পারি।
| |
| => +----+
| +----+
| |
আমরা পয়েন্টগুলিকে জোড়গুলিতে সংগঠিত করি এবং প্রতিটি জোড়ের জন্য আমরা লুপের আকার এবং গড় উজ্জ্বলতার মানটি সংরক্ষণ করি যা দেয় সবচেয়ে ভাল গড় উজ্জ্বলতা।
প্রতিটি পদক্ষেপে আমরা এক্সটেনশনে সর্বাধিক গড় উজ্জ্বলতা অর্জন করতে তার লুপটি প্রসারিত করি এবং জোড়ার জন্য নতুন অনুকূল লুপের আকার এবং উজ্জ্বলতার মান গণনা করি highest
আমরা মান অনুসারে বাছাই করা একটি হিপ স্ট্রাকচারে (মান, আকার, পয়েন্ট_ পেয়ার) ট্রিপলটি সংরক্ষণ করি যাতে আমরা সবচেয়ে বড় উপাদানটি (O (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)
।