В некоторых случаях, часто в физике, вы должны суммировать графики. Ваша задача - написать на выбранном вами языке программу или функцию, которая принимает несколько графиков в виде изображений, вычисляет все возможные суммы и выводит результат.
диаграммы
Графики - это изображения, которые содержат белый ( 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:

Вход B:

Пример вывода:

(В случае, если кому-то это интересно, я скопировал данные для них из фондовых графиков случайных компаний. Это был первый способ получить реалистичные данные в формате CSV.)
правила
- Вы можете выбрать любой формат входного файла растрового изображения.
- Вы можете выбрать любой формат выходного файла растрового изображения, который не должен совпадать с входным.
- Вы можете использовать библиотеки обработки изображений, однако любые функции для выполнения этой задачи напрямую запрещены.
- Применяются стандартные лазейки .
- Это Код-гольф, поэтому выигрывает самый короткий код в байтах.
Скрипт генератора графа
Вот скрипт Python 2, который генерирует графики. Входные данные даны в строках, с тремя первыми строками в качестве цвета RGB, а остальные в качестве данных, оканчивающимися EOF
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строки в выходном изображении?

