ढलान-ए-Pearing


16

यहां नाशपाती की पांच छवियां और एक स्टील चूट हैं :

A: B: C: D: E:नाशपाती A नाशपाती बी नाशपाती सी नाशपाती डी नाशपाती E

ये केवल थंबनेल हैं, उन्हें पूर्ण आकार के लिए क्लिक करें!

(मैंने इन्हें अल्गोडू के साथ बनाया है ।)

छवियों के इस वर्ग में हमेशा निम्नलिखित गुण होते हैं:

  1. वे हमेशा एक सफेद पृष्ठभूमि के साथ 400 × 400 पिक्सेल होते हैं। (यह बिल्कुल सफेद नहीं हो सकता क्योंकि एसई छवियां हानिरहित संपीड़ित हैं।)
  2. उनके पास 1 से 4 समान नाशपाती हैं, प्रत्येक को किसी भी तरह से घुमाया और तैनात किया गया है।
  3. उनके पास एक ऊर्ध्वाधर स्टील च्यूट है जो छवि के निचले हिस्से तक पहुंचता है।
  4. ढलान के नीचे के अलावा, चुट और नाशपाती बाउंडिंग बॉक्स ( बाउंडिंग बॉक्स उदाहरण ) कभी भी छवि की सीमा से बाहर नहीं जाते हैं।
  5. नाशपाती के बाउंडिंग बॉक्स कभी भी एक दूसरे को ओवरलैप नहीं करते हैं और न ही ढलान को ओवरलैप करते हैं।
  6. नाशपाती चुत के ढलान वाले हिस्से के नीचे हो सकता है, जैसे कि बी , सी और डी में । (इसलिए च्यूट का बाउंडिंग बॉक्स एक नाशपाती के बाउंडिंग बॉक्स को ओवरलैप कर सकता है।)
  7. चूट की कोई भी क्षैतिज और ऊर्ध्वाधर स्थिति हो सकती है जब तक कि नाशपाती के सभी बाउंडिंग बॉक्स के ऊपर पर्याप्त रूप से फिट होने के लिए पर्याप्त जगह न हो (कोई "बमुश्किल फिट" मामलों का परीक्षण नहीं किया जाएगा) और स्तंभ भाग का भाग दिखाई देता है।

चुनौती

एक ऐसा प्रोग्राम लिखें जो इस तरह की छवि में ले जाता है और एक ही स्थान पर एक और 400 × 400 छवि को च्यूट के साथ आउटपुट करता है, लेकिन नाशपाती के साथ इसलिए कि वे सभी च्यूट से ऊपर हैं (इसलिए वे इसमें गिर सकते हैं और रस लिया जा सकता है और क्या नहीं)।

आउटपुट छवि की आवश्यकताएं हैं:

  1. इनपुट छवि के सभी नाशपाती को इस तरह से रिप्लेस किया जाना चाहिए कि वे चुत के ऊपर हैं, इसके फ़नल के बाएँ और दाएँ किनारे के बीच। (एक किनारे के ऊपर ठीक नहीं है ।)
  2. प्रत्येक नाशपाती को अपना रोटेशन कोण बनाए रखना चाहिए। (इसलिए आपको नाशपाती को काटना और चिपकाना चाहिए, न कि उन्हें लाल करना।)
  3. नाशपाती को ओवरलैप या एक दूसरे को या चुत को स्पर्श नहीं करना चाहिए। (नाशपाती बाउंडिंग बॉक्स हालांकि ओवरलैप हो सकते हैं।)
  4. नाशपाती को छवि सीमा से स्पर्श या बाहर नहीं जाना चाहिए।

यहां पांच नमूना छवियों के लिए वैध आउटपुट के उदाहरण दिए गए हैं:

A: B: C: D: E:आउट ए बाहर B बाहर सी बाहर डी बाहर डी

ये केवल थंबनेल हैं, उन्हें पूर्ण आकार के लिए क्लिक करें!

ध्यान दें कि ई के लिए इनपुट छवि पहले से ही एक वैध आउटपुट थी, लेकिन तकनीकी रूप से आवश्यक नहीं होने पर नाशपाती को फिर से व्यवस्थित करना ठीक है।

विवरण

  • स्टडिन / कमांड लाइन / फ़ंक्शन कॉल के माध्यम से छवि का नाम या कच्ची छवि डेटा लें।
  • अपनी पसंद के नाम के साथ छवि को फ़ाइल में आउटपुट करें या स्टडआउट या केवल छवि प्रदर्शित करने के लिए कच्ची छवि फ़ाइल डेटा का उत्पादन करें।
  • किसी भी सामान्य दोषरहित छवि फ़ाइल प्रारूप का उपयोग किया जा सकता है।
  • ग्राफिक्स और इमेज लाइब्रेरी का उपयोग किया जा सकता है।
  • कुछ गलत पिक्सेल यहाँ और वहाँ (दोषपूर्णता या कुछ के कारण) कोई बड़ी बात नहीं है। अगर मैं कुछ भी नहीं बता सकता कि वह गलत है तो शायद ठीक है।

बाइट्स में सबसे छोटा कोड जीतता है। टाईब्रेकर सबसे अधिक मतदान वाला पद है।


चूंकि मेरे पास खान अकादमी खाता है, और यह वहां हल करने के लिए एकदम सही है, क्या मैं इसे खान अकादमी पर हल कर सकता हूं? केवल एक जटिलता है: बाहरी छवियों की अनुमति नहीं है। सौभाग्य से मैं के माध्यम से छवियों को चला सकते हैं यह उन्हें खान अकादमी के अनुकूल डेटा कन्वर्ट करने के लिए। क्या यह स्वीकार्य है?
BobTheAwesome

@BusTheAwesome तो आप एक जावास्क्रिप्ट जवाब पोस्ट करना चाहते हैं? यह ठीक है, हालांकि यह इनपुट और आउटपुट 400x400 छवियों को माना जाता है। आप अपने काम को यह दिखाने के लिए पोस्ट कर सकते हैं कि आपने इसे केए के साथ कैसे किया लेकिन मैं इसे विजेता के रूप में स्वीकार नहीं कर सकता अगर यह 400x400 छवियों पर काम नहीं करता।
केल्विन के शौक

एक पूर्ण संयोग; खान एकेडमी में जावास्क्रिप्ट + Pjs के लिए 400x400px कैनवास का डिफ़ॉल्ट होना बस इतना ही होता है।
BobTheAwesome

नहीं!! 400x400 छवियों पर Imagenator सुपर धीमा है !!
BobTheAwesome

जवाबों:


6

पायथन 2.7, 636 बाइट्स

import sys;from PIL.Image import*
_,m,R,I,p,H=255,400,range,open(sys.argv[1]).convert('RGB'),[],0
w,h=I.size;W,A,P,L=(_,_,_),[(x,y)for x in R(w)for y in R(h)],I.load(),I.copy()
try:
 while 1:
    s,x,y,X,Y=[[a for a in A if P[a][0]<50][0]],m,m,0,0
    while s:c=(a,b)=s.pop();x,y,X,Y=min(x,a),min(y,b),max(X,a),max(Y,b);P[c]=W;s+=[n for n in[(a+1,b),(a,b+1),(a-1,b),(a,b-1)]if n in A and P[n]!=W]
    p+=[((x,y,X,Y),X-x,Y-y)]
except:0
def G(a):r,g,b=P[a];return r==g==b and r<_
g=[a for a in A if G(a)]
(z,t),W=g[0],max([x for x,y in g]);t-=1
for r,w,h in p:
 if z+w>W:z,_=g[0];t-=H;H=0
 I.paste(L.crop(r),(z,t-h,z+w,t));z+=w;H=max(h,H)
I.show()

संपादित करें : अब छवि को संभालने से पहले अल्फा चैनल को हटाता है, और यदि आवश्यक हो तो कई पंक्तियों पर नाशपाती संरेखित करता है

उत्पादित चित्र:

ए बी सी डी और ई

और ऊर्ध्वाधर नाशपाती के साथ (मेरे कंप्यूटर पर लगभग 3 मिनट लगते हैं):

परीक्षण का मामला खड़ा


1
क्या चित्र befores / afters हैं? अगर ऐसा है तो मुझे लगता है कि आपने बीई के लिए गलत लोगों को लिया है ...
Sp3000

बाईं ओर इनपुट छवि, और दाईं ओर आउटपुट छवियां ... वे पिक्सेल-परिपूर्ण नहीं हैं, क्योंकि rescaling और copy-pasting के कारण, मैंने उन्हें केवल यह संकेत देने के लिए रखा है कि स्क्रिप्ट कैसे काम करती है ..
डायटर

यदि सभी नाशपाती क्षैतिज हैं तो क्या यह काम करेगा ?
केल्विन के

वास्तव में नहीं ... दो कारणों से: यह एक अनंत लूप में आता है क्योंकि इस विशेष छवि में एक अल्फा चैनल है -> स्क्रिप्ट को ठीक करना ताकि यह छवि को पहले रूपांतरित करे। इसका दूसरा कारण यह है कि मैंने कई पंक्तियों में नाशपाती को संरेखित करने वाला कोड हटा दिया -> इसे वापस रखा
डायटर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.