Siendo un gran admirador del cubo de Rubik y del arte genial, he estado trabajando en combinar los dos para hacer algunas cosas realmente geniales. Básicamente resolviendo cubos de Rubik en miniatura para formar píxeles rudimentarios en la formación del arte del cubo de Rubik. Se pueden ver ejemplos de este tipo de arte a través de este enlace: http://google.com/search?q=rubik%27s+cube+art
Ahora, el propósito de este Code Golf es crear código que acepte una imagen como entrada y luego la convierta de la siguiente manera:
La imagen se reduce inicialmente a colores de escala de grises seguros para la web. La razón detrás de esto es porque necesitamos aislar la paleta de escala de grises segura para la web (es decir, 000000, 333333, 666666, 999999, CCCCCC y FFFFFF). Un algoritmo sobre el método colorimétrico de conversión a escala de grises está disponible en: http://en.wikipedia.org/wiki/Grayscale#Colorimetric_.28luminance-preserving.29_conversion_to_grayscale , si desea utilizar eso como inspiración.
Entonces se representaría la escala de grises a los colores apropiados. Para descomponerlo rápidamente: 000000 se referirá al azul de Rubik, 333333 se referirá al rojo de Rubik, 666666 se referirá al verde de Rubik, 999999 se referirá al naranja de Rubik, CCCCCC se referirá al amarillo de Rubik y FFFFFF se referirá al blanco de Rubik.
Prefiero que el código resultante se pueda procesar desde la paleta de fotos directamente a los colores de Rubik. El método de dos etapas, desde la conversión a escala de grises segura para la web y luego a la paleta de Rubik correspondiente, es solo para darle una idea sobre la lógica detrás del proceso, pero si es más fácil para usted hacerlo, hágalo de todos modos.
Los valores RGB reales para la paleta de Rubik deben corresponder a lo siguiente:
- Rojo: # C41E3A
- Verde: # 009E60
- Azul: # 0051BA
- Naranja: # FF5800
- Amarillo: # FFD500
- Blanco: #FFFFFF
Para darle un ejemplo, recorté la cabeza de Abraham Lincoln de la siguiente imagen: y rendericé el algoritmo para producir lo siguiente:
La cuadrícula está allí para que pueda ver cómo cada cubo individual de Rubik en miniatura tendría que configurarse para formar la imagen. El tamaño real de la imagen resultante es de 45 píxeles por 45 píxeles, lo que significa que (45/3) * (45/3) = 15 * 15 = 225 cubos de Rubik en miniatura se utilizarían para hacer esta imagen. No espero que presente la imagen resultante con una cuadrícula como yo.
Entonces esto es lo que se requiere:
La imagen a ser procesada por este algoritmo debe tener x píxeles de ancho por y píxeles de alto, de modo que x e y sean múltiplos de 3. Esto es para ayudar con la facilidad de renderizado como parte de un mosaico de cubos de Rubik. Si su imagen es bastante grande, se recomienda reducirla a alrededor de 45 x 45 a 75 x 75 o más o menos en dimensiones antes del procesamiento. Tenga en cuenta que este componente de cambio de tamaño es OPCIONAL.
La imagen debe convertirse a la paleta de cubos de Rubik sextacolored para crear el mosaico.
La imagen resultante debe ser un archivo gráfico válido después del procesamiento. Para probar que su código funciona, ejecútelo contra una imagen de uno de los presidentes de los Estados Unidos de América o una conocida celebridad de Hollywood. Ya he usado a Abraham Lincoln en mi ejemplo, por lo que este presidente ya no puede ser usado. Asegúrese de proporcionar el idioma que ha utilizado, el recuento de bytes y el presidente / celebridad utilizado para probar su código, incluso antes y después de los disparos ...
Cada entrada debe tener un presidente / celebridad único como su caso de prueba. No aceptaré duplicados. Esto asegurará que los resultados duplicados no se usen para probar diferentes entradas de código. Está muy bien decir que su código funciona, otra cosa es probarlo.
5. El código más corto gana.
Estoy cambiando esto a un concurso de popularidad ... Prefiero ver quién puede hacer esto sin tener que competir en el conteo de bytes ... Así que otorgaré esto junto con una recompensa después del 28 de febrero de 2014.
fuente
#000000 => #0051BA
, etcRespuestas:
Imagemagick (108)
Versión: ImageMagick 6.8.7-7 Q16 x86_64 2013-11-27
La siguiente llamada:
donde
input
youtput
tienen que modificarse para el nombre de archivo de entrada y salida.Solo conté los caracteres entre
-resize
y#FFF"
, si crees que esto no es válido, no dudes en comentar.Usé a Lenna como imagen (apareció en un Playboy, y cualquiera que lo haga debería considerarse una celebridad de Hollywood, ¿verdad?)
Entrada:
Salida:
Salida ampliada:
Notas: de acuerdo con los documentos de imagemagick, no puede tener más de un operador condicional en una declaración, pero la llamada todavía parece funcionar bien, por lo que probablemente esto se solucionó y los documentos simplemente no se actualizaron.
Ejecutar Identificar en la imagen del resultado (para mostrar que los colores están bien):
Si crees que Lenna no cuenta como una celebridad adecuada, aquí está Bruce Willis:
fuente
fx
pieza pueden comprimirse aún más en un lenguaje que tenga una mejor expresividad. Y esos idiomas también tienen soporte de imagen nativa (por lo que no se pierden caracteres al tener que importar imagemagick / gd / etc.)Mathematica
Trabajaremos con una región cuadrada de un sello estadounidense con Greta Garbo. Será referido como
j
.La función f toma 3 parámetros:
i
que se refiere a la imagenrs
, el tamaño de la tramam
, una variable booleana que indica si se deben usar líneas de malla. (La configuración predeterminada es True).Usando tamaños de trama de 15, 30, 45 y 75:
¡No puedo imaginar a nadie haciendo un cubo de Rubrik con tantas piezas! Interesante ejercicio, no obstante.
Jugando con colores
Esto es de una entrada anterior. El código es ligeramente diferente.
Graphics
se usa en lugar deArrayPlot
. Además, utilizamos el sello completo aunque no sea cuadrado.Hay 6! = 720 permutaciones de los colores del cubo Rubrik.
A continuación se muestra la imagen central de la fila superior (establezca 6 imágenes a continuación). Cuando los valores de escala de grises se ordenan del más oscuro al más claro, los colores son {r, gr, b, o, y, w}. Sin embargo, otras variaciones funcionan.
i
es la imagen original en escala de grises.i
es la imagen original en escala de grises del sello completo de Greta Garbo.Rasterize[garbo,RasterSize->75
rasteriza la imagen en una matriz de 75 por 75.ColorQuantize[<>, 6]
reduce los valores de escala de grises a un conjunto de 6.ImageData
recupera la matriz de datos de la imagen; Viene al revés.Reverse
voltea la matriz de datos, de ahí la imagen, con el lado derecho hacia arriba.garboColors
son los 6 valores de escala de grises en la imagen cuantificada.Graphics[Raster
Muestra la imagen final.rubrikColors
son valores RGB de los 6 colores del cubo Rubrik.Se dan varias permutaciones de color rojo, verde, azul, naranja, amarillo y blanco.
Y el codigo:
Garbos en abundancia
Aquí hay 72 (de las 720) imágenes de Greta Garbo que usan los 6 colores del cubo Rubrik. Algunas imágenes funcionan mejor que otras, ¿no te parece?
fuente
Reverse
podría eliminarse, dejando la imagen al revés, pero no veo ninguna otra oportunidad. Mathematica es expresivo pero usa palabras grandes. Alguien experto en imágenes probablemente podría reducir un poco el tamaño del código, pero dudo que pueda superar su código de imagen mágica.i
Sostenga la imagen original.gr
representa el verde de Rubrik.g
se refiere a los datos de imagen rasterizada y cuantificada para la imagen en escala de grises.Smalltalk (Smalltalk / X),
289139 *entrada: i; salida: r
entrada:
salida:
engrandecido:
(para todos los jóvenes: esto NO es Madonna ;-)
[*] No he contado el aumento a 75x75 (la primera línea), podría haber usado un tamaño ya modificado como entrada. Espero que estés bien contigo.
fuente
¡Postdata y colores VERDADEROS de Rubik! ;-)
Bueno, esta solución es un poco fuera de tema aquí, ya que está restringida a una esfera altamente especializada. Pero después de mucha frustración con, por ejemplo, la "pregunta de números raros" (al no poder producir algo que funcionara prácticamente) decidí publicar algo y así saqué esto de mi montón de garabatos a medio terminar y lo hice presentable.
La solución explota el hecho de que la primera revisión de esta pregunta define los colores requeridos por enlace a un sitio, que establece claramente que los colores Pantone (R) deben usarse, y los colores RGB son solo aproximaciones. Entonces pensé, ¿por qué haría aproximaciones, cuando puedo hacer un color genuino? - :)
Este código se guardará como, por ejemplo,
rubik.ps
y luego se enviará a Ghostscript con el encantamiento habitual:Luego lo espera en la siguiente línea, para ingresar el nombre del archivo JPG, por ejemplo
y, si todo va bien, guarda la salida en el
out.psd
archivo.La entrada debe ser RGB JPEG cuadrada (cualquier tamaño), la salida es PSD con canales de color directo. Necesitará Photoshop para ver el archivo. Cambiar el dispositivo GS de
psdcmyk
otra cosa no producirá nada utilizable. JPEG como entrada, porque el intérprete PostScript puede decodificar el flujo de datos directamente. Forma cuadrada: porque el programa se basa en lasqrt
longitud de la cadena para encontrar el ancho (y la altura) de la imagen.Las primeras líneas definen el tamaño de la imagen de salida (se puede cambiar del valor predeterminado 75) y la paleta de colores (los colores y su número también se pueden cambiar). Cualquier otra cosa no está codificada, creo.
¿Que esta pasando? La secuencia de tripletes RGB se convierte sobre la marcha en la cadena de valores de escala de grises (con fórmula simple), se construye un diccionario de imágenes de tonos continuos de 8 bits y se usa para pintar 5 imágenes idénticas una encima de la otra en 5
Separation
espacios de color. El truco consiste en aplicar funciones de transferencia antes de cada invocación delimage
operador. Por ejemplo, para pintura amarilla, esta función devuelve 0 para valores de entrada en 0.167 .. 0.333 solo rango, y 1 en caso contrario.Entrada:
Captura de pantalla de salida 75x75 abierta en Photoshop, ampliada 800%:
Y paleta de canales de Photoshop:
fuente
DO#
Necesita ejecutarlo con 3 parámetros:
foo.exe 75 d:\test.jpg d:\out.png
Donde
75
es max. ancho / alto,d:\test.jpg
es el archivo de entrada yd:\out.png
es el archivo de salida.Salida para varias imágenes en este concurso:
Mi propia celebridad:
Salida:
Sin embargo, otros tamaños (mayores de 75x75) resultan en mejores imágenes:
Y, si nos quedamos con los presidentes:
Como este no es un codegolf (¿ya no?), No me molesté en "minimizar" demasiado el código. Además, como las instrucciones no mencionaban específicamente que la imagen tenía que tener el mismo ancho que la altura (cuadrado), no me molesté en recortar; Yo hago , sin embargo, asegúrese de que la imagen es un múltiplo de 3 píxeles de ancho / alto. Si desea imágenes cuadradas, use entradas cuadradas Finalmente; El algoritmo está lejos de ser óptimo.
Unos cuantos más (ya que las personas votan más por chicas calientes / héroes de Internet más )
fuente
Brainfuck
Esto requiere un intérprete / compilador BF que tenga -1 como EOF y que tenga celdas superiores a 8 bits SI uno de los píxeles rojos es 255. De lo contrario, se detendrá prematuramente ya que no podrá diferir entre EOF y el valor 0xFF . Con jitbf tiene lo que la máquina tiene como tamaño entero y puede hacer esto para forzar -1 como EOF:
El formato de archivo de imagen representado es el archivo RGB PNM completo (P6), sin formato como opción en Gimp.
Utiliza solo el canal verde (que es una de las muchas formas de convertir una imagen en color a escala de grises). Reduce el valor en 43 sin reducir el valor por debajo de cero para averiguar qué color de rubik usar y tiene un interruptor que imprime el color RBG correcto que corresponde.
Imagen de Angelina Jolie de Hackers (1995) reducida a 75x75 y procesada con la aplicación:
Igual, solo usé el tamaño original :
Y como soy psíquico, aquí también hay un presidente:
fuente
C objetivo
Anoche vi este desafío y tuve un momento un tanto confuso
-[NSArray indexOfObject:inSortedRange:options:usingComparator:]
, de ahí el retraso.Lo ejecuté en mi iPad así:
Antes después
Antes después
fuente
Pitón
Formato:
python rubik.py <input> <max_cubes> <output>
.Convierte píxeles a escala de grises utilizando el algoritmo sugerido.
Entrada:
(fuente: ilmamilio.it )
Salida con
max_cubes = 25
:Salida con
max_cubes = 75
:Salida con
max_cubes = 225
:fuente