Bazı durumlarda, genellikle fizikte, grafikleri toplamalısınız. Zorluk, seçtiğiniz bir dilde, birden çok grafiği resim olarak alan, olası tüm toplamları hesaplayan ve sonucu çıktılayan bir program veya işlev yazmaktır.
Grafikler
Grafikler, rgb(255, 255, 255)
her sütunda beyaz olmayan bir piksele sahip beyaz ( ) bir arka plan içeren görüntülerdir . Örnekler:
Komut dosyasının değerleri, renkli piksellerin Y konumları olarak temsil edilir. Belirli bir X koordinatındaki değer, o sütundaki en üstteki renkli pikselin Y konumuna eşittir, koordinatlar sol altta 0'dan başlar. Estetik nedenlerle bu piksellerin altında ek renkli pikseller olabilir veya olmayabilir.
Görev
Göreviniz, seçtiğiniz bir dilde, birden çok grafiği resim olarak alan, olası tüm 2^n - 1
toplamları hesaplayan ve sonucu çıktılayan bir program veya işlev yazmaktır .
Grafiklerin toplamı, her bir sütunun değerinin, girdi grafiklerinin her birinde karşılık gelen sütunun değerlerinin toplamına eşit olduğu bir grafiktir.
Grafikler birden fazla renkte gelecek. Sonuç resmi, orijinal grafikler de dahil olmak üzere, ancak sıfır toplamı hariç olmak üzere, grafiklerin olası tüm toplamlarını içermelidir.
Her bir toplamın rengi, dahil edilen grafiklerin renklerinin ortalaması ile belirlenir, örneğin renk grafikleri rgb(255, 0, 255)
ve rgb(0, 255, 255)
bir grafik oluşturur rgb(128, 128, 255)
(ayrıca yuvarlanabilir).
Ortaya çıkan görüntü, tüm grafiklere sığacak kadar yüksek olmalıdır. Bu, herhangi bir girişten daha büyük bir görüntü vermeniz gerekebileceği anlamına gelir.
Elde edilen grafiklerin elde edilen görüntüye çekilme sırası önemli değildir, yani sonuç grafikleri çakışıyorsa hangisinin üstte olacağını seçebilirsiniz, ancak renklerin bir kombinasyonu değil, grafiklerden biri olması gerekir.
Giriş görüntülerinin eşit genişlikte olduğunu, görüntülerin tüm sütunlarının en az bir beyaz olmayan piksele sahip olduğunu ve görüntülerin yüksekliklerinin (çıktı dahil) 4096 pikselin altında olduğunu varsayabilirsiniz.
Misal
Giriş A:
Giriş B:
Örnek çıktı:
(Birinin ilgilenmesi durumunda, bunların verilerini rasgele şirketlerin hisse senedi grafiklerinden kopyaladım. CSV olarak gerçekçi veri elde etmenin ilk yolu buydu.)
kurallar
- Herhangi bir bitmap görüntü giriş dosyası formatı seçebilirsiniz.
- Girişle eşleşmesi gerekmeyen herhangi bir bitmap görüntü çıktısı dosya biçimi seçebilirsiniz.
- Görüntü işleme kütüphanelerini kullanabilirsiniz, ancak bu görevi doğrudan tamamlamak için herhangi bir işlev yasaklanmıştır.
- Standart boşluklar geçerlidir.
- Bu kod golf, bayttaki en kısa kod kazanır.
Grafik oluşturucu komut dosyası
İşte grafikler üreten bir Python 2 betiği. Girdi, EOF tarafından sonlandırılan ilk üç satır RGB rengi ve geri kalan veri olarak satırlar halinde verilir.
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
girdi grafikleri, orada olacağım 2^n - 1
çıktı resimlerdeki çizgiler?