경우에 따라 물리학에서 종종 그래프를 합산해야합니다. 문제는 선택한 언어로 여러 그래프를 이미지로 가져 와서 가능한 모든 합계를 계산하고 결과를 출력하는 프로그램 또는 함수를 작성하는 것입니다.
그래프
그래프는 rgb(255, 255, 255)
각 열에 흰색이 아닌 픽셀이 있는 흰색 ( ) 배경 이 포함 된 이미지입니다 . 예 :
스크립트의 값은 컬러 픽셀의 Y 위치로 표시됩니다. 특정 X 좌표의 값은 해당 열에서 가장 높은 색상의 픽셀의 Y 위치와 동일하며 좌표는 왼쪽 하단에서 0부터 시작합니다. 미학적 이유로 해당 픽셀 아래에 추가 컬러 픽셀이있을 수도 있고 없을 수도 있습니다.
직무
작업은 선택한 언어로 여러 그래프를 이미지로 가져 와서 가능한 모든 2^n - 1
합계를 계산 하고 결과를 출력 하는 프로그램 또는 함수를 작성 하는 것입니다.
그래프의 합은 각 열의 값이 각 입력 그래프에서 해당 열의 값의 합과 같은 그래프입니다.
그래프는 여러 색상으로 나타납니다. 결과 이미지에는 원래 그래프를 포함하지만 0 합계를 제외한 다른 그래프와 같이 가능한 모든 그래프 합계가 포함되어야합니다.
각각의 합계의 색은, 예를 들면 색의 그래프, 그래프에 포함 된 색상의 평균 결정 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
출력 이미지에 선이 있습니까?