직무
폭의 화상을 얻어 프로그램이나 함수 작성 w
및 높이 h
, 및 두 개의 정수 a <= w/2
및 b <= h/2
크기로 된, 상기 이미지의 아스키 아트 표현을 출력 a
X가 b
.
아스키 아트는 다음 단계 (또는 동일한 출력을 가진 다른 프로세스)를 통해 생성되어야합니다.
크기 조정
w
X의h
이미지2a
X를2b
. 화소의 색(x, y)
해상도 변경은 다음의 모서리 사각형 내부의 원본 이미지의 모든 픽셀의 색상의 평균과 같아야한다 :(floor[x * w/2a], floor[y * h/2b]) (ceil[(x+1) * w/2a], ceil[(y+1) * h/2b])
색상의 빨강, 녹색 및 파랑 구성 요소의 평균을 취하고 각 구성 요소를이 평균으로 설정하여 크기가 조정 된 이미지의 채도를 낮추어야합니다.
아래의 규칙에 따라 각 2x2 픽셀 블록에 대해 문자를 출력해야합니다.
- 하자
e = 3 - floor[color/64]
색 (0..255 범위)에서 좌측 상단의 화소의 색의 적색 성분을 지칭하는 경우,. 보자f
,g
하고,h
이 값을 참조하지만, 오른쪽 상단에 대해, 왼쪽 아래, 각각 오른쪽 아래 픽셀. - 하자
z
의 평균 수e
,f
,g
,h
. - 다음에 해당하는 문자를 출력합니다 (흰색
3 - floor[color/64]
은 0 인 픽셀을 나타내고 회색은 0이 아닌 것을 나타냅니다). - = 공백을 출력합니다 (
)
- 또는 = 출력
"
하는 경우e (or f) >= 2
와'
그렇지 않은 경우. - 또는 = 출력
,
하는 경우g (or h) >= 2
와.
그렇지 않은 경우. - 또는 = 출력
-
- 또는 = 출력
;
- = 출력
\
- = 출력
/
- = 출력
J
- = 출력
L
- = 출력
7
- = 출력
P
-
z = 1
: 출력*
.z = 2
: 출력C
.z = 3
: 출력#
.
- 하자
기타 참고 사항 : 위 단계에서 취한 모든 평균은 정수 나누기를 사용해야합니다 (즉, 0으로 반올림).
라이브러리를 사용하여 이미지를 읽을 수 있지만 크기 조정 및 불포화 단계에는 라이브러리를 사용할 수 없습니다.
입력
귀하의 프로그램은 세 가지 데이터를받습니다 :
- 이미지. 이 이미지는 원하는 형식 (예 : PNG, PPM) 일 수 있습니다.
- 아스키 아트의 너비 (문자 수)
- 아스키 아트의 높이 (문자 수)
입력은 STDIN을 통해 읽고 명령 행 인수로 전달하며 변수 등으로 저장 될 수 있습니다.
산출
프로그램은 이미지와 위에서 설명한 프로세스를 통해 생성 된 아스키 아트를 출력합니다. 각 줄은 같은 너비 (입력으로 전달 된 너비) 여야하며 추가 공간을 추가하거나 제거 할 수 없습니다. 마지막 줄에는 줄 바꿈 문자가있을 수 있지만 필수 사항은 아닙니다. 빈 줄 (공백 만있는 줄)은 생략하면 안됩니다.
예
모든 이미지는 Wikipedia에서 가져와 공개 도메인에 공개되었습니다. 귀하의 프로그램은 모든 이미지와 유효한 입력에서 작동합니다.
폭 = 52, 높이 = 25 :
.-- ***-----. -********** L .-- .-- 7 ---- P- .제이****************. . ********* \. ****************** L \ J ********** '. -********************. J *********** L / 제이*********************; ./*************.엘 ; ********************* PJ **************; 7; . ************************* '. *************** ;; * ;********************** ;***************;제이*. *********************** ******* P ******** '**; C ************************ C ******* P; *******. **; C ********************** J ***************; **; 씨*********************; ****************. **; ********************** '*************** P; ** J ********************* P P *************** / *** . ********************** 7 ************* 'J **; ; ******************** C " 'P *********** PJ ***' "7 ****************** C" '********** P. ** C; '* C *************'; *********-J ** CP '* C ********** P 7 ** 7 ** P /-**** P -* CCCCC * P- '7 ******** P' '---'--- '
폭 : 70, 높이 : 3 :
---------------------------. .---------------- J ******************************** P -J ******************** ***/제이**; ---------- ********* P --------- '-------------------- - '
폭 : 50, 높이 : 25 :
.제이--- .J * P --- J * L--. J *** 'L -J ***********- J ****; **************** L ;*****' .제이******************** J **** 7 ************************ P ** CC *; . ********* LJ *********** P- ** C * P 'J **********************- 7 * C * L **********************; J * C **; **********************; JC ** C **. ; ; ******** CCC * C ** CCCC ** "7 ***** L. 7 ***** CCCCCC **** CC ** ' -*****. -J-** C * C * CC ****** CC * ' ; ** CC ***; '** CCC ***** CCCC *; '-****--*** CCCCC ***- '------'
폭 : 26, 높이 : 17 :
-, L J-** L .C # J '; * PL, C # " .PP 7. JC7P ;; * 제이 ;; C'C; 제이; CC; L C "# * L 7-P; *; PC 7CL *** J * PC '# '7 # C * C # P'; P JC # C- J # CCC # L.JC # CJCC ## C; ; #--#, CCC # CCCCCCCC ;*.- -.씨; ; CCCCCCCCCCCC ; **** J ** L; CCCCCCCCCCCC ; *******; 'CCCCCCCCCCCP '*******'CCCCCCCCCCC ' '* P-7 *' "CCCCP '- '---
이것은 code-golf 이므로 가장 짧은 답변이 이깁니다.