Проблемы с хамелеоном , по-видимому, плохо . Жаль, что хамелеоны - прекрасные существа. Время перемен!
Как все мы знаем, многие хамелеоны обладают замечательной способностью сливаться с окружающей средой, меняя цвет кожи. Что также является целью этой задачи.
Вызов
Представьте себе квадрат из девяти пикселей. Восемь пикселей - это окружение. В центре хамелеон.
Как это:
Хамелеон естественно пытается гармонировать с окружающей средой. Это происходит путем изменения его цвета на средний цвет окружающих пикселей. Так что в этом случае хамелеон изменит свой цвет на .
Задача
Учитывая цвета окружающих пикселей, выведите цвет хамелеона.
Цвет хамелеона определяется как сумма всех красных, зеленых и синих в пикселях ÷ 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>]]
Вы можете получать входные данные в другой форме, если они состоят из восьми тройных десятичных чисел 0-255.
Если вы получаете ввод в другой форме, числа должны быть одинаковой длины или иметь нечисловой разделитель между ними. Тройки должны иметь разделительный символ, если они не дополнены от 0 до 9 цифр. (Например 044200255044200255044200255044200255044200255044200255044200255044200255
, допустимо, так есть 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255
и 44?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255
, но 4420025544200255442002554420025544200255442002554420025544200255
не является.)
Выход
Массив / строка / и т.д., содержащие цвета центрального пикселя (в десятичном формате), например:
[<red>,<green>,<blue>]
Если вы выводите что-то отличное от массива: числа должны быть одинаковой длины или иметь нечисловой разделитель между ними. (Например 044200255
, верно, так есть 44 200 255
, но 44200255
нет.)
Числа могут не содержать десятичных точек, поэтому, например 44.0 200 255.0
, недействительно.
округление
Выходные данные должны быть округлены до ближайшего целого числа. (Половинки должны быть округлены до.) Например, если сумма всех красного 1620 , вы должны выход 203
, не 202
или202.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]
Представления могут быть полной программой или функцией. Применяются стандартные правила ввода / вывода и лазейки .
Ответы:
MATL,
84 байтаПопробуйте онлайн!
4 байта сохранены благодаря мензурке!
Объяснение:
источник
s8/
наXm
(т.е.mean
вниз по столбцам). Также вы можете указать входные данные как3 x 8
для начала и избавиться от3e!
YmYo
should do it... just take the input as[[R,G,B];[R,G,B];...]
with semicolons between the RGB rows.Yo
round up, or round to closest with ties being rounded up? The challenge wants the latter.Python, 38 bytes
Rounds the average (towards the nearest integer, with halves rounding up) by adding 4 to the sum, then floor-dividing by 8 via the bit-shift
>>3
.источник
Jelly, 5 bytes
Test suite. (Slightly modified so as to verify all testcases at once.)
источник
C,
15112310391Requires 24 parameters passed to the program, in the order R G B R G B ... and outputs the triplet R G B without a newline.
источник
main(c,v)char**v;{
to save 2 bytes? Also +1 for <3 in source code!Pyth, 8 bytes
Test suite.
источник
Pyke, 7 bytes
Try it here!
источник
J, 11 bytes
Takes the input as an 8x3 array where each row is an RGB value
Explanation
источник
JavaScript,
756455 bytesA JavaScript answer to get you started.
Edit: Saved 11 bytes thanks to Dendrobium, and another 9 thanks to Neil.
источник
a=>a.reduce((p,c)=>p.map((e,i)=>e+c[i])).map(x=>x+7>>3)
[[0,200,200],[200,0,200],[200,200,0],[60,200,0],[200,0,200],[0,200,220],[2,200,0],[0,0,7]]
yields 83, 125, *104* instead of 83, 125, *103* with your code.ceil
. 64 bytes:a=>a.reduce((p,c)=>p.map((e,i)=>e+c[i])).map(x=>(x/8).toFixed())
x+4>>3
should round correctly.Lisp -
180179 bytesEDIT: Formatted for further golfing.
Does it the correct way, I guess. Untested.
a
is just averager
is this challenge's proper rounding, since Lispround
rounds to the nearest even integerc
does the real work, taking in input in the format'((R G B) (R G B) (R G B) (R G B) (R G B) (R G B) (R G B) (R G B))
, and returning a'(R G B)
list containg the answer.источник
Nim,
13412611510878 bytesDefines an anonymous procedure, which requires the input passed in as a double-nested sequence and outputs as a 3-element array. The procedure can only be used as an argument to another procedure; to test, use the following wrapper:
A Nim sequence is an array with
@
in front, like@[1, 2, 3]
. An input to this procedure could therefore be:источник
Japt, 8 bytes
Try it
Alternative, 9 bytes
Try it
источник
Forth (gforth), 65 bytes
Try it online!
Takes input as stack arguments (r g b order)
Explanation
For each of the 3 color channels:
Code Explanation
источник
Runic Enchantments, 41 bytes
Try it online!
Utilizes 3 instruction pointers to parse the input in the correct order (as the input values are always in the order
RGB, RGB,...
) and as long as each of the three IPs don't merge, and don't advance to the next readi
nput command too early (hence all the spaces), it works out and saves bytes over having to continuously rotate the stack to keep the correct value on top in order to calculate the sums.Technically this code contains an error in correctly rounding
x.5
values for some inputs, but this is due to the default rounding method used by C#, which is to round to the nearest event number, rather than upwards and is due to issues in floating point accuracy loss, and I was unaware of this issue prior to writing this answer and checking the test cases. This will be fixed in a future build, along with a few other things such as this unhandled exception.In the meantime, this modification makes the necessary adjustment.
источник