Chameleon Challele Challenge Challenge Chaulela Challenge Chauleon Challenge Challenge Chauleon Chang


19

Виклики хамелеона - очевидно, погана річ . Шкода, хамелеони - прекрасні істоти. Час змін!

Зображення хамелеона

Як ми всі знаємо, багато хамелеони мають чудову здатність поєднуватися з оточенням, змінюючи колір своєї шкіри. Що також є ціллю цього виклику.

Виклик

Уявіть квадрат з дев'яти пікселів. Вісім пікселів - це оточення. В центрі - хамелеон.

Подобається це: Вісім сірих квадратів навколо центральної площі.

Хамелеон, природно, намагається поєднатись із оточенням. Це робиться шляхом зміни свого кольору на середнє значення кольору навколишніх пікселів. Так, у цьому випадку хамелеон змінив би свій колір сірий.

Об'єктивна

Враховуючи кольори навколишніх пікселів, виведіть колір хамелеона.

Колір хамелеона визначається як загальна кількість червоного, зеленого та синього кольорів у пікселях ÷ 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]

Подання можуть бути повноцінною програмою або функцією. Застосовуються стандартні правила вводу / виводу та лазівки .



@LeakyNun Дякуємо за посилання. Це справді не має значення для цього виклику, але я пам’ятаю, чи варто робити щось подібне в майбутньому.
користувач2428118

9
Як не дивно, я думаю, що це трохи питання хамелеона для обробки округлення.
xnor

"до тих пір, поки вона складається з восьми трійки десяткових чисел 0-255" Чи може це бути у двійкових? Унарний?
Leaky Nun

Також чи можу я заздалегідь перенести це?
Leaky Nun

Відповіді:


8

MATL, 8 4 байти

YmYo

Спробуйте в Інтернеті!

4 байти збережено завдяки мензурці!

Пояснення:

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

Мені подобається зловживання синтаксисом масиву python! Ви можете замінити s8/на Xm(тобто meanвниз по стовпцях). Також ви зможете вказати дані, як 3 x 8почати і позбутися від3e!
Suever

Так, YmYoслід це зробити ... просто сприймайте введення, як [[R,G,B];[R,G,B];...]з крапками з комою між рядками RGB.
стаканчик

@beaker Woah! Спасибі!
DJMcMayhem

чи Yoкругла, або кругла до найближчих, при цьому зв'язки закруглені? Виклик хоче останнього.
Джон Дворак

@JanDvorak Він обертається до найближчого цілого (вгору чи вниз) matl.tryitonline.net/…
Suever

11

Пітон, 38 байт

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

Обводить середнє значення (у напрямку до найближчого цілого числа, за допомогою округнення половинок), додаючи 4 до суми, а потім діленням підлоги на 8 через бітове зсув >>3.



4

С, 151 123 103 91

Потрібно 24 параметри, передані програмі, в порядку RGBRGB ... і виводить триплетний 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 байти? Також +1 для <3 у вихідному коді!
betseg



1

J, 11 байт

0.5<.@++/%#

Вважає вхід як масив 8x3, де кожен рядок - значення RGB

Пояснення

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

JavaScript, 75 64 55 байт

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

Відповідь JavaScript для початку роботи.

Редагувати: Збережено 11 байт завдяки Дендробіуму та ще 9 завдяки Нілу .


55 байт:a=>a.reduce((p,c)=>p.map((e,i)=>e+c[i])).map(x=>x+7>>3)
Дендробіум

@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, * 104 * замість 83, 125, * 103 * з вашим кодом.
користувач2428118

Ах, неправильно прочитав питання, подумав, що це треба ceil. 64 байти:a=>a.reduce((p,c)=>p.map((e,i)=>e+c[i])).map(x=>(x/8).toFixed())
Дендробіум

x+4>>3повинен правильно округнути.
Ніл

1

Лісп - 180 179 байт

EDIT: Відформатовано для подальшого гольфу.

(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 просто середній
  • rце правильне округлення цього виклику, оскільки Lisp 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

Четвертий (gforth) , 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,...) і до тих пір, поки кожен з трьох IP-адрес не iзлиється , і не переходити до наступної команди читання nput занадто рано (отже, всі пробіли), він працює і економить байти над необхідністю безперервного обертання стека, щоб зберегти правильне значення зверху, щоб розрахувати суми.

Технічно цей код містить помилку в правильному округленні x.5значень для деяких входів, але це пов'язано з методом округлення за замовчуванням, використовуваним C # , який повинен округлювати до найближчого номера події, а не вгору і пов'язаний з проблемами втрати точності з плаваючою комою. , і мені не було відомо про це питання, перш ніж писати цю відповідь та перевіряти тестові приклади. Це буде виправлено у майбутній збірці разом із кількома іншими речами, такими як цей необроблений виняток .

Тим часом ця модифікація вносить необхідні корективи.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.