कुछ मामलों में, अक्सर भौतिकी में, आपको रेखांकन करना होगा। आपकी चुनौती यह है कि अपनी पसंद की भाषा में, एक प्रोग्राम या फ़ंक्शन जो छवियों के रूप में कई ग्राफ़ लेता है, सभी संभावित योगों की गणना करता है, और परिणाम को आउटपुट करता है।
रेखांकन
रेखांकन वे चित्र हैं जिनमें rgb(255, 255, 255)
प्रत्येक कॉलम में एक गैर-सफेद पिक्सेल के साथ एक सफेद ( ) पृष्ठभूमि होती है। उदाहरण:
स्क्रिप्ट के मूल्यों को रंगीन पिक्सल्स के Y पदों के रूप में दर्शाया गया है। एक निश्चित X निर्देशांक पर मान उस कॉलम में ऊपरवाले रंगीन पिक्सेल की Y स्थिति के बराबर होता है, जिसमें नीचे बाईं ओर 0 से शुरू होने वाले निर्देशांक होते हैं। सौंदर्यपरक कारणों से उन पिक्सेल के नीचे अतिरिक्त रंगीन पिक्सेल नहीं हो सकते हैं या नहीं हो सकते हैं।
कार्य
आपका कार्य आपकी पसंद की भाषा में, एक प्रोग्राम या फ़ंक्शन लिखना है जो कई ग्राफ़ को छवियों के रूप में लेता है, सभी संभावित 2^n - 1
योगों की गणना करता है , और परिणाम को आउटपुट करता है।
रेखांकन का योग एक ग्राफ होता है, जहां प्रत्येक कॉलम का मान इनपुट ग्राफ के प्रत्येक कॉलम में संबंधित कॉलम के मान के बराबर होता है।
रेखांकन कई रंगों में आएगा। परिणाम चित्र में मूल ग्राफ़ सहित अन्य ग्राफ़ के रूप में ग्राफ़ के सभी संभावित योग शामिल होने चाहिए, लेकिन शून्य राशि को छोड़कर।
प्रत्येक राशि का रंग रेखांकन के रंगों के औसत द्वारा निर्धारित किया जाता है, उदाहरण के लिए, रंगों का रेखांकन rgb(255, 0, 255)
और rgb(0, 255, 255)
एक ग्राफ का उत्पादन करेगा rgb(128, 128, 255)
(नीचे भी गोल किया जा सकता है)।
परिणामी छवि सभी ग्राफ़ को फिट करने के लिए जितनी आवश्यक हो उतनी उच्च होनी चाहिए। इसका मतलब है कि आपको किसी भी इनपुट से बड़ी छवि को आउटपुट करना पड़ सकता है।
वह क्रम जिसमें परिणामी रेखांकन परिणामी छवि के लिए तैयार किए जाते हैं, कोई फर्क नहीं पड़ता है, अर्थात यदि परिणाम ग्राफ़ ओवरलैप होता है, तो आप चुन सकते हैं कि कौन सा शीर्ष पर है, लेकिन इसे ग्राफ़ में से एक होना चाहिए, न कि उनके रंगों का संयोजन।
आप मान सकते हैं कि इनपुट छवियां समान चौड़ाई की हैं, कि सभी छवियों के कॉलम में कम से कम एक गैर-सफेद पिक्सेल है, और यह कि छवियों की ऊँचाई (आउटपुट सहित) 4096 पिक्सेल से नीचे है।
उदाहरण
इनपुट A:
इनपुट बी:
उदाहरण आउटपुट:
(यदि कोई दिलचस्पी रखता है, तो मैंने यादृच्छिक कंपनियों के स्टॉक चार्ट से इन के लिए डेटा को कॉपी-पेस्ट किया। यह पहला तरीका था, जिसमें मुझे CSV के रूप में यथार्थवादी डेटा मिला था।)
नियम
- आप किसी भी बिटमैप छवि इनपुट फ़ाइल प्रारूप का चयन कर सकते हैं।
- आप किसी भी बिटमैप छवि आउटपुट फ़ाइल प्रारूप को चुन सकते हैं, जिसे इनपुट से मेल नहीं खाना है।
- आप छवि प्रसंस्करण पुस्तकालयों का उपयोग कर सकते हैं, हालांकि इस कार्य को सीधे पूरा करने के लिए कोई भी कार्य प्रतिबंधित हैं।
- मानक खामियां लागू होती हैं।
- ये है कोड गोल्फ, इसलिए बाइट्स में सबसे छोटा कोड जीत जाता है।
ग्राफ जनरेटर स्क्रिप्ट
यहाँ एक पायथन 2 स्क्रिप्ट है जो रेखांकन उत्पन्न करती है। इनपुट लाइनों में दिया जाता है, तीन पहली पंक्तियों के साथ आरजीबी रंग और बाकी डेटा के रूप में, ईओएफ द्वारा समाप्त।
import PIL.Image as image
import sys
if len(sys.argv) < 2:
sys.stderr.write("Usage: graphgen.py <outfile> [infile]")
exit(1)
outfile = sys.argv[1]
if len(sys.argv) > 2:
try:
stream = open(sys.argv[2], "r")
data = stream.read()
stream.close()
except IOError as err:
if err.errno == 2:
sys.stderr.write("File \"{0}\" not found".format(sys.argv[2]))
else:
sys.stderr.write("IO error {0}: {1}".format(err.errno, err.strerror))
exit(1)
else:
data = sys.stdin.read()
try:
items = map(int, data.strip().split("\n"))
red, green, blue = items[:3]
items = items[3:]
highest = max(items)
except (ValueError, TypeError, IndexError):
sys.stderr.write("Invalid value(s) in input")
img = image.new("RGB", (len(items), highest + 1), (255, 255, 255))
prev = items[0]
img.putpixel((0, highest - items[0]), (red, green, blue))
for x, item in enumerate(items[1:]):
img.putpixel((x + 1, highest - item), (red, green, blue))
if item < prev:
for i in range(item + 1, prev):
img.putpixel((x, highest - i), (red, green, blue))
else:
for i in range(prev + 1, item):
img.putpixel((x + 1, highest - i), (red, green, blue))
prev = item
img.save(outfile, "png")
n
इनपुट ग्राफ हैं, 2^n - 1
तो आउटपुट इमेज में लाइनें होंगी ?