Najwyraźniej wyzwania kameleona są złą rzeczą . Szkoda, kameleony to piękne stworzenia. Czas nazmianę!
Jak wszyscy wiemy, wiele kameleonów ma niezwykłą zdolność wtapiania się w otoczenie poprzez zmianę koloru skóry. Co jest również celem tego wyzwania.
Wyzwanie
Wyobraź sobie kwadrat dziewięciu pikseli. Osiem pikseli to otoczenie. W centrum jest kameleon.
Lubię to:
Kameleon naturalnie próbuje wtopić się w otoczenie. Czyni to, zmieniając kolor na średnią pikseli otaczających. W tym przypadku kameleon zmieniłby kolor na .
Cel
Biorąc pod uwagę kolory otaczających pikseli, wypisz kolor kameleona.
Kolor kameleona określa się jako sumę wszystkich czerwonych, zielonych i niebieskich pikseli w pikselach ÷ 8.
Wejście
Tablica wartości kolorów dla ośmiu otaczających pikseli, zaczynając od lewego górnego rogu i kontynuując zgodnie z ruchem wskazówek zegara:
[[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>]]
Możesz wybrać opcję otrzymywania danych wejściowych w innej formie, o ile składa się ona z ośmiu potrójnych liczb dziesiętnych 0–255.
Jeśli otrzymujesz dane wejściowe w innej formie, liczby muszą mieć stałą długość lub mieć między nimi separator nienumeryczny. Potrójne znaki muszą mieć znak oddzielający, chyba że są wypełnione zerami do 9 cyfr. (Np. 044200255044200255044200255044200255044200255044200255044200255044200255
Jest ważny, podobnie jak 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255
i 44?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255
, ale 4420025544200255442002554420025544200255442002554420025544200255
nie jest.)
Wynik
Tablica / łańcuch / itp. Zawierający kolory środkowego piksela (dziesiętnie), jak poniżej:
[<red>,<green>,<blue>]
W przypadku wypisania czegoś innego niż tablica: Liczby muszą mieć stałą długość lub mieć między nimi separator nienumeryczny. (Np. 044200255
Jest poprawne, tak jest 44 200 255
, ale 44200255
nie jest.)
Liczby nie mogą zawierać kropek dziesiętnych, więc np 44.0 200 255.0
. Są niepoprawne.
Zaokrąglanie
Dane wyjściowe należy zaokrąglić do najbliższej liczby całkowitej. (Połówki muszą być zaokrąglone w górę.) Np. Jeśli suma wszystkich czerwonych wynosi 1620 , musisz wyprowadzać 203
, nie 202
lub 202.5
.
Przykłady
Zdjęcia mają wyłącznie charakter ilustracyjny. Środkowy piksel to dane wyjściowe, a otaczające piksele to dane wejściowe.
Wejście:
[[200,200,200],[200,200,200],[200,200,200],[200,200,200],[200,200,200],[200,200,200],[200,200,200],[200,200,200]]
Wynik:
[200,200,200]
Wejście:
[[0,0,0],[255,255,255],[0,0,0],[255,255,255],[255,255,255],[0,0,0],[255,255,255],[0,0,0]]
Wynik:
[128,128,128]
Wejście:
[[0,200,200],[200,0,200],[200,200,0],[60,200,0],[200,0,200],[0,200,220],[2,200,0],[0,0,0]]
Wynik:
[83,125,103]
Wejście:
[[0,56,58],[65,0,200],[33,200,0],[60,33,0],[98,0,200],[0,28,220],[2,200,0],[99,0,5]]
Wynik:
[45,65,85]
Zgłoszenia mogą być pełnym programem lub funkcją. Obowiązują standardowe zasady we / wy i luki .
Odpowiedzi:
MATL,
84 bajtówWypróbuj online!
4 bajty zapisane dzięki zlewce!
Wyjaśnienie:
źródło
s8/
zXm
(tjmean
dół kolumny). Możesz także określić, od czego3 x 8
zacząć, i pozbyć się3e!
YmYo
powinienem to zrobić ... po prostu weź dane wejściowe jak w[[R,G,B];[R,G,B];...]
przypadku średników między wierszami RGB.Yo
zaokrągla się w górę, czy zaokrągla do najbliższego z zaokrąglaniem w górę? Wyzwanie chce tego drugiego.Python, 38 bajtów
Zaokrągla średnią (w kierunku najbliższej liczby całkowitej z połówkami zaokrąglającymi w górę) przez dodanie 4 do sumy, a następnie podzielenie podłogi przez 8 za pomocą przesunięcia bitów
>>3
.źródło
Galaretka , 5 bajtów
Zestaw testowy . (Nieznacznie zmodyfikowany, aby zweryfikować wszystkie przypadki testowe jednocześnie).
źródło
C,
15112310391Wymaga 24 parametrów przekazanych do programu, w kolejności RGBRGB ... i wysyła tryplet RGB bez nowej linii.
źródło
main(c,v)char**v;{
zapisać 2 bajty? Również +1 dla <3 w kodzie źródłowym!Pyth , 8 bajtów
Zestaw testowy .
źródło
Pyke, 7 bajtów
Wypróbuj tutaj!
źródło
J, 11 bajtów
Pobiera dane wejściowe jako tablicę 8x3, gdzie każdy wiersz ma wartość RGB
Wyjaśnienie
źródło
JavaScript,
756455 bajtówOdpowiedź JavaScript na dobry początek.
Edycja: Zapisano 11 bajtów dzięki Dendrobium i kolejne 9 dzięki Neilowi .
źródło
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]]
daje 83, 125, * 104 * zamiast 83, 125, * 103 * z twoim kodem.ceil
. 64 bajty:a=>a.reduce((p,c)=>p.map((e,i)=>e+c[i])).map(x=>(x/8).toFixed())
x+4>>3
powinien zaokrąglić poprawnie.Lisp -
180179 bajtówEDYCJA: Sformatowana do dalszego gry w golfa.
Myślę, że robi to we właściwy sposób . Niesprawdzone
a
jest po prostu średniar
jest właściwym zaokrągleniem tego wyzwania, ponieważ Lispround
zaokrągla do najbliższej parzystej liczby całkowitejc
wykonuje prawdziwą pracę, przyjmując dane wejściowe w formacie'((R G B) (R G B) (R G B) (R G B) (R G B) (R G B) (R G B) (R G B))
i zwracając'(R G B)
listę zawierającą odpowiedź.źródło
Nim ,
13412611510878 bajtówDefiniuje anonimową procedurę, która wymaga, aby dane wejściowe były przekazywane jako sekwencja podwójnie zagnieżdżona, a dane wyjściowe - jako tablica 3-elementowa. Procedurę można wykorzystać tylko jako argument do innej procedury; do przetestowania użyj następującego opakowania:
Sekwencja Nim to tablica z
@
przodu, jak@[1, 2, 3]
. Wkładem w tę procedurę może być zatem:źródło
Japt, 8 bajtów
Spróbuj
Alternatywnie, 9 bajtów
Spróbuj
źródło
Dalej (gforth) , 65 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako argumenty stosu (kolejność rgb)
Wyjaśnienie
Dla każdego z 3 kanałów kolorów:
Objaśnienie kodu
źródło
Runiczne Zaklęcia , 41 bajtów
Wypróbuj online!
Wykorzystuje 3 wskaźniki instrukcji do parsowania danych wejściowych w prawidłowej kolejności (ponieważ wartości wejściowe są zawsze w kolejności
RGB, RGB,...
) i tak długo, jak każdy z trzech adresów IP nie łączy się i nie przechodzi zbyt wcześnie do następnego odczytui
polecenia nput (stąd wszystkie spacje), to działa i oszczędza bajty na konieczności ciągłego obracania stosu aby zachować poprawną wartość na górze w celu obliczenia sum.Technicznie ten kod zawiera błąd w prawidłowym zaokrąglaniu
x.5
wartości dla niektórych danych wejściowych, ale wynika to z domyślnej metody zaokrąglania używanej przez C # , która polega na zaokrąglaniu do najbliższego numeru zdarzenia, a nie w górę i jest spowodowana problemami z utratą dokładności zmiennoprzecinkowej , i nie wiedziałem o tym problemie przed napisaniem tej odpowiedzi i sprawdzeniem przypadków testowych. Zostanie to naprawione w przyszłej kompilacji , wraz z kilkoma innymi rzeczami, takimi jak ten nieobsługiwany wyjątek .W międzyczasie ta modyfikacja wprowadza niezbędne dostosowanie.
źródło