흑백 픽셀 만있는 이미지와 흰색 픽셀 인 (x, y) 위치가 지정된 경우 다른 흰색 픽셀을 순회하는 경로에서만 (x, y)에서 최소 맨해튼 거리 를 기준으로 흰색 픽셀의 색상을 지정하십시오 .
색상 이 지정된 픽셀 의 색조 는 (x, y)와의 거리에 비례해야하므로 (x, y)의 픽셀은 색조가 0 ° (빨간색)이고 가장 먼 픽셀이 (x, y)입니다 색조는 360 ° (빨간색)이며 다른 색조는 매끄럽고 직선적으로 혼합됩니다. 채도 값을 모두 100 %이어야한다.
흰색 픽셀이 다른 흰색 픽셀을 통해 (x, y)에 연결되어 있지 않으면 흰색이어야합니다.
세부
- 입력은 이미지 또는 원시 이미지 데이터의 파일 이름과 x 및 y 정수로 구성됩니다.
- 출력 이미지는 파일에 저장되거나 일반적인 이미지 파일 형식으로 stdout으로 파이프 처리되거나 간단하게 표시 될 수 있습니다.
- x 값은 가장 왼쪽 픽셀에서 0이며 오른쪽으로 갈수록 증가합니다. y 값은 최상위 픽셀에서 0이며 아래로 갈수록 증가합니다. (x, y)는 항상 이미지 경계에 있습니다.
- 전체 프로그램과 기능이 모두 허용됩니다.
바이트 단위의 가장 짧은 코드가 이깁니다.
예
공간을 절약하기 위해이 이미지들은 모두 축소되었습니다. 클릭하면 전체 크기로 볼 수 있습니다.
입력 이미지 :
(x,y) = (165,155)
과 (x,y) = (0,0)
다음을 사용하여 이미지 입력 및 출력 (x,y) = (0,0)
:
다음을 사용하여 이미지 입력 및 출력 (x,y) = (600,350)
:
다음을 사용하여 이미지 입력 및 출력 (x,y) = (0,0)
:
다음을 사용하여 이미지 입력 및 출력 (x,y) = (0,0)
:
옵션 -30 % 보너스 : 유클리드 거리를 사용하십시오. 알고리즘에 대한 제안은 다음과 같습니다 (일반 개요).
- 시작 픽셀이 있습니다.
- 해당 픽셀에서 플러드 필.
- 플러드 필에 도달 한 모든 픽셀에 대해
- 시작 픽셀에서 해당 픽셀로 반 단위 단계로 직선으로 이동하십시오.
- 각 단계
int()
에서 x 및 y 좌표에 적용 하십시오. 이 좌표의 픽셀이 검은 색이면 중지하십시오. 그렇지 않으면 계속하십시오. (시선 방법입니다.) - 흰색 픽셀 및 / 또는 이전에 상당히 높은 거리 (+10)로 레이블이 지정된 픽셀과 접하는 픽셀에 도달하면 시작 픽셀이됩니다.
보다 메타적인 의미에서이 알고리즘은 시작 / 이미 색상이 지정된 픽셀에서 직선으로 도달 할 수있는 모든 픽셀로 확산 된 다음 가장자리 주위에 "인치"가됩니다. "상당히 더 높은 거리"비트는 알고리즘 속도를 높이기위한 것입니다. 솔직히 유클리드 거리를 구현 하는 방법은 중요하지 않으며 단지 이와 같이 보일뿐입니다.
위의 알고리즘을 사용하여 유클리드 거리에서 첫 번째 예는 다음과 같습니다.
입력 이미지 (x,y) = (165,155)
이 도전에 도움을 주신 Calvin'sHobbies와 trichoplax에게 감사드립니다! 즐기세요!