위장 색 변화 카멜레온 도전


19

카멜레온 도전은 분명히 나쁜 일 입니다. 너무 나쁜 카멜레온은 아름다운 생물입니다. 변화를위한 시간!

카멜레온의 그림

우리 모두 알다시피, 많은 카멜레온은 피부색을 바꿔 주변 환경과 조화를 이룰 수있는 놀라운 능력을 가지고 있습니다. 이 도전의 목표이기도합니다.

도전

9 픽셀의 정사각형을 상상해보십시오. 8 개의 픽셀이 주변 환경입니다. 중앙에는 카멜레온이 있습니다.

이처럼 : 중앙 사각형 주위에 8 개의 회색 사각형.

카멜레온은 자연스럽게 주변 환경과 조화를 이루려고 노력합니다. 색상을 주변 픽셀의 평균 색상으로 변경하면됩니다. 따라서이 경우 카멜레온의 색상이로 변경됩니다 회색.

객관적인

주변 픽셀의 색상이 주어지면 카멜레온의 색상을 출력하십시오.

카멜레온의 색상은 픽셀 ÷ 8의 모든 빨강, 녹색 및 파랑의 총계로 정의됩니다.

입력

다음과 같이 왼쪽 상단에서 시작하여 시계 방향으로 계속되는 8 개의 주변 픽셀에 대한 색상 값 배열입니다.

[[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>]]

8 개의 10 진수 0-255로 구성된 경우 다른 형식으로 입력을 수신하도록 선택할 수 있습니다.

다른 형식의 입력을받는 경우 숫자는 길이가 일정해야하며 숫자 사이에 숫자가 아닌 구분 기호가 있어야합니다. 트리플은 9 자리 숫자로 0이 채워지지 않는 한 분리 문자를 가져야합니다. (예 : 044200255044200255044200255044200255044200255044200255044200255044200255유효 하지만 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 25544?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255이지만 유효 4420025544200255442002554420025544200255442002554420025544200255하지 않습니다.)

산출

중앙 픽셀의 색상을 포함하는 배열 / 문자열 등 (10 진수)은 다음과 같습니다.

[<red>,<green>,<blue>]

배열 이외의 것을 출력하는 경우 : 숫자는 길이가 일정해야하거나 숫자 사이에 숫자가 아닌 구분자가 있어야합니다. (예 : 044200255유효 44 200 255하지만 유효 44200255하지 않습니다.)

숫자는 소수점을 포함 할 수 없으므로 44.0 200 255.0유효하지 않습니다.

반올림

출력은 가장 가까운 정수로 반올림되어야합니다. (반쪽는 반올림해야합니다.) 예, 모두 빨간의 합이 경우 1620 , 당신은 출력해야한다 203,하지 202202.5.

사진은 예시 용입니다. 가운데 픽셀이 출력이고 주변 픽셀이 입력입니다.

입력:

[[200,200,200],[200,200,200],[200,200,200],[200,200,200],[200,200,200],[200,200,200],[200,200,200],[200,200,200]]

산출:

[200,200,200]


입력:

[[0,0,0],[255,255,255],[0,0,0],[255,255,255],[255,255,255],[0,0,0],[255,255,255],[0,0,0]]

산출:

[128,128,128]


입력:

[[0,200,200],[200,0,200],[200,200,0],[60,200,0],[200,0,200],[0,200,220],[2,200,0],[0,0,0]]

산출:

[83,125,103]


입력:

[[0,56,58],[65,0,200],[33,200,0],[60,33,0],[98,0,200],[0,28,220],[2,200,0],[99,0,5]]

산출:

[45,65,85]

제출물은 전체 프로그램 또는 기능 일 수 있습니다. 표준 I / O허점 규칙이 적용됩니다.



@LeakyNun 링크 주셔서 감사합니다. 실제로이 문제는 중요하지 않지만, 앞으로 비슷한 일을해야한다는 점을 명심하겠습니다.
user2428118

9
재미있게도, 이것은 반올림을 처리하기위한 약간의 카멜레온 질문이라고 생각합니다.
xnor

"이것은 소수점 8 자리의 0 ~ 255의 8 개의 트리플로 구성되는 한"바이너리 일 수 있습니까? 단항?
Leaky Nun

또한 미리 바꾸어도 되나요?
Leaky Nun

답변:


8

MATL, 8 4 바이트

YmYo

온라인으로 사용해보십시오!

비커 덕분에 4 바이트가 절약되었습니다!

설명:

Ym          "Get the average of each column
  Yo        "And round up

나는 파이썬 배열 구문의 남용을 좋아합니다! 당신은 대체 할 수 s8/Xm(즉, mean열을 아래로). 또한 3 x 8시작과 제거를 위해 입력을 지정할 수 있습니다 .3e!
Suever

그래, YmYo해야합니다 ... [[R,G,B];[R,G,B];...]RGB 행 사이의 세미콜론으로 입력을 가져 가십시오 .
비이커

@ 비커! 감사!
DJMcMayhem

않는 Yo관계가 반올림되고와 가장 가까운에 라운드까지, 또는 라운드? 도전은 후자를 원한다.
John Dvorak

@JanDvorak 가장 가까운 정수 (위 또는 아래)로 반올림 matl.tryitonline.net/…
Suever

11

파이썬, 38 바이트

lambda l:[sum(r)+4>>3for r in zip(*l)]

합계에 4를 더한 다음 비트 시프트를 통해 8을 바닥으로 나눔으로써 평균을 반올림하여 반올림하여 가장 가까운 정수로 반올림합니다 >>3.



4

C, 151 (123) 103 91

RGBRGB 순서로 프로그램에 24 개의 매개 변수가 전달되어야하며 개행없이 삼중 항 RGB를 출력합니다.

i,t;main(c,v)char**v;{for(i=0;t=4,i++<3;printf("%d ",t/8))for(c=i;c<24;c+=3)t+=atoi(v[c]);}

main(c,v)char**v;{2 바이트를 절약하기 위해? 소스 코드에서 <3에 대해서도 +1!
betseg



1

J, 11 바이트

0.5<.@++/%#

각 행이 RGB 값인 8x3 배열로 입력을받습니다.

설명

0.5<.@++/%#  Input: a
          #  Count the number of rows
       +/    Sum along the columns
         %   Divide each sum by the count to get the averages
0.5   +      Add 0.5 to each average
   <.@       Floor each value and return

1

자바 스크립트, 75 64 55 바이트

a=>a.reduce((p,c)=>p.map((e,i)=>e+c[i])).map(x=>x+4>>3)

시작하는 JavaScript 답변.

편집 : Dendrobium 덕분에 11 바이트를 절약 하고 Neil 덕분에 9 바이트를 절약했습니다 .


55 바이트 :a=>a.reduce((p,c)=>p.map((e,i)=>e+c[i])).map(x=>x+7>>3)
Dendrobium

@Dendrobium [[0,200,200],[200,0,200],[200,200,0],[60,200,0],[200,0,200],[0,200,220],[2,200,0],[0,0,7]]은 코드에서 83, 125, * 103 * 대신 83, 125, * 104 * 를 생성합니다.
user2428118

아, 그 질문을 잘못 읽은 것 같아요 ceil. 64 바이트 :a=>a.reduce((p,c)=>p.map((e,i)=>e+c[i])).map(x=>(x/8).toFixed())
Dendrobium

x+4>>3올바르게 반올림해야합니다.
Neil

1

리스프 -180 179 바이트

편집 : 추가 골프를 위해 형식화되었습니다.

(defun a(l)(/(apply #'+ l)(length l)))(defun r(a)(if(integerp(* a 2))(ceiling a)(round a)))(defun c(s)(mapcar(lambda(i)(r(sqrt(a(mapcar(lambda(x)(expt(nth i x)2))s)))))'(0 1 2)))

그것은 않는 올바른 방법 같아요. 테스트되지 않았습니다.

  • a 그냥 평균입니다
  • rLisp round가 가장 가까운 짝수로 반올림하기 때문에이 도전의 올바른 반올림 입니다
  • c형식으로 입력 하고 답변이 포함 '((R G B) (R G B) (R G B) (R G B) (R G B) (R G B) (R G B) (R G B))'(R G B)목록을 반환하는 실제 작업을 수행 합니다.

1

, 134 (126) 115 (108) 78 바이트

import math,future
x=>lc[(lc[x[j][i]|(j<-0..7),int].sum+4)shr 3|(i<-0..2),int]

입력을 이중 중첩 시퀀스로 전달하고 3 요소 배열로 출력하는 익명 프로 시저를 정의합니다. 프로시 저는 다른 프로 시저에 대한 인수로만 사용할 수 있습니다. 테스트하려면 다음 랩퍼를 사용하십시오.

import math,future
import strutils
proc test(x: seq[seq[int]] -> seq[int]) =
 echo x(#[ Insert your input here ]#)
test(x=>lc[(lc[x[j][i]|(j<-0..7),int].sum+4)shr 3|(i<-0..2),int])

Nim 시퀀스는 @앞에와 같은 배열입니다 @[1, 2, 3]. 따라서이 절차에 대한 입력은 다음과 같습니다.

@[@[0,0,0],@[255,255,255],@[0,0,0],@[255,255,255],@[255,255,255],@[0,0,0],@[255,255,255],@[0,0,0]]


1

4 번째 (2 번째) , 65 바이트

: f 3. do 8. do 3 j - i * 2 + roll loop 4 8. do + loop 8 / loop ;

온라인으로 사용해보십시오!

입력을 스택 인수로 취합니다 (rgb 순서)

설명

3 가지 색상 채널 각각에 대해 :

  • 해당 채널의 모든 숫자를 스택의 맨 위로 이동
  • 함께 추가
  • 4 추가 (반올림 처리)
  • 8로 나누다

코드 설명

: f            \ start new word definition
  3. do        \ start a counted loop from 0 to 2
    8. do      \ start a counted loop from 0 to 7
      3 j -    \ get the offset of the channel
      i * 2 +  \ get the absolute position of the channel value
      roll     \ move the value to the top of the stack
    loop       \ end the inner loop
    4          \ add 4 to the top of the stack
    8. do      \ loop from 0 to 7
      +        \ add the top two stack numbers
    loop       \ end loop. (Result on top of stack with be sum of values for channel + 4)
    8 /        \ divide by 8
  loop         \ end outer loop
;              \ end word definition

1

룬 마법 , 41 바이트

>iRi+ i+ i+ i+ i+ i+ i+8,'rA' q$;
>iU
>iU

온라인으로 사용해보십시오!

3 개의 명령어 포인터를 사용하여 입력 값을 항상 올바른 순서로 입력 RGB, RGB,...하고 3 개의 IP 각각이 병합되지 않고 다음 읽기 input 명령으로 너무 빨리 진행하지 않는 한 입력을 구문 분석합니다. (따라서 모든 공간), 합계를 계산하기 위해 올바른 값을 맨 위에 유지하기 위해 스택 을 지속적으로 회전 해야하는 것보다 바이트를 절약하고 바이트를 절약합니다 .

기술적 으로이 코드에는 x.5일부 입력의 값을 올바르게 반올림하는 데 오류가 있지만 이는 C # 에서 사용 하는 기본 반올림 방법 때문입니다.이 방법 은 위쪽이 아닌 가장 가까운 이벤트 수로 반올림되며 부동 소수점 정확도 손실 문제로 인해 이 답변을 작성하고 테스트 사례를 확인하기 전에이 문제를 알지 못했습니다. 이것은 처리되지 않은 예외 와 같은 몇 가지 다른 것들과 함께 향후 빌드에서 수정 될 것 입니다.

그 동안 이 수정 은 필요한 조정을합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.