Los desafíos del camaleón son algo malo , aparentemente. Lástima, los camaleones son hermosas criaturas. ¡Es tiempo de un cambio!
Como todos sabemos, muchos camaleones poseen una notable capacidad de mezclarse con su entorno cambiando el color de su piel. Cuál es también el objetivo de este desafío.
Desafío
Imagina un cuadrado de nueve píxeles. Ocho píxeles son los alrededores. En el centro está el camaleón.
Me gusta esto:
El camaleón, naturalmente, trata de mezclarse con su entorno. Lo hace cambiando su color al promedio de los píxeles circundantes. Entonces, en este caso, el camaleón cambiaría su color a .
Objetivo
Dados los colores de los píxeles circundantes, genera el color del camaleón.
El color del camaleón se define como el total de todos los rojos, verdes y azules en los píxeles ÷ 8.
Entrada
Una matriz de valores de color para los ocho píxeles circundantes, comenzando en la parte superior izquierda y continuando en el sentido de las agujas del reloj, de esta manera:
[[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>]]
Puede elegir recibir información en una forma diferente, siempre que conste de ocho triples de números decimales 0-255.
Si recibe información en una forma diferente, los números deben ser de una longitud consistente o tener un separador no numérico entre ellos. Los triples deben tener un carácter separador a menos que estén rellenados con 0 a 9 dígitos. (Por ejemplo, 044200255044200255044200255044200255044200255044200255044200255044200255
es válido, también lo son 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255
y 44?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255
, pero 4420025544200255442002554420025544200255442002554420025544200255
no lo es).
Salida
Una matriz / cadena / etc. que contiene los colores del píxel central (en decimal), como este:
[<red>,<green>,<blue>]
En caso de que genere algo que no sea una matriz: los números deben ser de una longitud constante o tener un separador no numérico entre ellos. (Por ejemplo, 044200255
es válido, también lo es 44 200 255
, pero 44200255
no lo es).
Los números pueden no contener puntos decimales, por lo que, por ejemplo, 44.0 200 255.0
no es válido.
Redondeo
La salida debe redondearse al entero más cercano. (Las mitades se deben redondear hacia arriba). Por ejemplo, si la suma de todos los rojos es 1620 , debe generar 203
, no 202
o 202.5
.
Ejemplos
Las imágenes son sólo ilustrativas. El píxel del medio es la salida, los píxeles circundantes son la entrada.
Entrada:
[[200,200,200],[200,200,200],[200,200,200],[200,200,200],[200,200,200],[200,200,200],[200,200,200],[200,200,200]]
Salida:
[200,200,200]
Entrada:
[[0,0,0],[255,255,255],[0,0,0],[255,255,255],[255,255,255],[0,0,0],[255,255,255],[0,0,0]]
Salida:
[128,128,128]
Entrada:
[[0,200,200],[200,0,200],[200,200,0],[60,200,0],[200,0,200],[0,200,220],[2,200,0],[0,0,0]]
Salida:
[83,125,103]
Entrada:
[[0,56,58],[65,0,200],[33,200,0],[60,33,0],[98,0,200],[0,28,220],[2,200,0],[99,0,5]]
Salida:
[45,65,85]
Los envíos pueden ser un programa completo o una función. Se aplican las reglas estándar de E / S y lagunas .
Respuestas:
MATL,
84 bytesPruébalo en línea!
¡4 bytes guardados gracias al vaso de precipitados!
Explicación:
fuente
s8/
conXm
(es decir,mean
hacia abajo en las columnas). También es posible que pueda especificar la entrada3 x 8
para comenzar y deshacerse del3e!
YmYo
debería hacerlo ... solo tome la entrada como[[R,G,B];[R,G,B];...]
con punto y coma entre las filas RGB.Yo
redondea o se redondea al más cercano con los lazos redondeados? El desafío quiere lo último.Python, 38 bytes
Redondea el promedio (hacia el entero más cercano, con mitades redondeando hacia arriba) agregando 4 a la suma, luego dividiendo el piso por 8 a través del desplazamiento de bits
>>3
.fuente
Jalea , 5 bytes
Banco de pruebas . (Ligeramente modificado para verificar todas las cajas de prueba a la vez).
fuente
C,
15112310391Requiere 24 parámetros pasados al programa, en el orden RGBRGB ... y genera el triplete RGB sin una nueva línea.
fuente
main(c,v)char**v;{
guardar 2 bytes? ¡También +1 para <3 en el código fuente!Pyth , 8 bytes
Banco de pruebas .
fuente
Pyke, 7 bytes
Pruébalo aquí!
fuente
J, 11 bytes
Toma la entrada como una matriz de 8x3 donde cada fila es un valor RGB
Explicación
fuente
JavaScript
756455 bytesUna respuesta de JavaScript para comenzar.
Editar: ahorró 11 bytes gracias a Dendrobium , y otros 9 gracias a Neil .
fuente
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]]
produce 83, 125, * 104 * en lugar de 83, 125, * 103 * con su código.ceil
. 64 bytes:a=>a.reduce((p,c)=>p.map((e,i)=>e+c[i])).map(x=>(x/8).toFixed())
x+4>>3
debe redondear correctamente.Lisp -
180179 bytesEDITAR: Formateado para más golf.
Lo hace de la manera correcta , supongo. No probado
a
es solo promedior
es el redondeo correcto de este desafío, ya que Lispround
redondea al entero par más cercanoc
hace el trabajo real, toma la entrada en el formato'((R G B) (R G B) (R G B) (R G B) (R G B) (R G B) (R G B) (R G B))
y devuelve una'(R G B)
lista con la respuesta.fuente
Nim ,
13412611510878 bytesDefine un procedimiento anónimo, que requiere que la entrada se pase como una secuencia doblemente anidada y las salidas como una matriz de 3 elementos. El procedimiento solo puede usarse como argumento para otro procedimiento; para probar, use el siguiente contenedor:
Una secuencia de Nim es una matriz con
@
delante, como@[1, 2, 3]
. Por lo tanto, una entrada a este procedimiento podría ser:fuente
Japt, 8 bytes
Intentalo
Alternativa, 9 bytes
Intentalo
fuente
Adelante (gforth) , 65 bytes
Pruébalo en línea!
Toma datos como argumentos de pila (orden rgb)
Explicación
Para cada uno de los 3 canales de color:
Explicación del código
fuente
Encantamientos rúnicos , 41 bytes
Pruébalo en línea!
Utiliza 3 punteros de instrucciones para analizar la entrada en el orden correcto (ya que los valores de entrada siempre están en el orden
RGB, RGB,...
) y siempre que cada una de las tres IP no se fusionen y no avancen al siguientei
comando de lectura de entrada demasiado pronto (de ahí todos los espacios), funciona y ahorra bytes al tener que rotar continuamente la pila para mantener el valor correcto en la parte superior para calcular las sumas.Técnicamente, este código contiene un error al redondear correctamente los
x.5
valores para algunas entradas, pero esto se debe al método de redondeo predeterminado utilizado por C # , que consiste en redondear al número de evento más cercano, en lugar de hacia arriba y se debe a problemas en la pérdida de precisión de coma flotante , y no tenía conocimiento de este problema antes de escribir esta respuesta y verificar los casos de prueba. Esto se solucionará en una compilación futura , junto con algunas otras cosas, como esta excepción no controlada .Mientras tanto, esta modificación hace el ajuste necesario.
fuente