Así que creo que probablemente todos hemos visto este cómic xkcd :
:
Esto podría ser demasiado general o demasiado difícil, no estoy seguro. Pero el desafío es crear un programa en cualquier idioma que cree una ventana que tenga al menos 2 colores y muestre en palabras en inglés qué porcentaje de la pantalla es cada color.
ex. La solución más simple sería un fondo blanco con letras negras que diga "Porcentaje de esta imagen que es negra: [x]%. Porcentaje de esta imagen que es blanca: [y]%"
Puedes volverte tan loco o tan simple como quieras; el texto plano es una solución válida, pero si crea imágenes interesantes como en el cómic xkcd, ¡eso es aún mejor! El ganador será la solución más divertida y creativa que obtenga más votos. ¡Así que adelante y haga algo divertido y digno de xkcd! :)
¿Entonces, qué piensas? ¿Suena como un desafío divertido? :)
Incluya una captura de pantalla de su programa ejecutándose en su respuesta :)
fuente
"/.*/"
(léase: [el código fuente] no contiene una nueva línea)Respuestas:
Olmo
Todavía no he visto a nadie usar esta escapatoria: demostración
fuente
view source
es puesto allí por share-elm.com y no es parte del JS / HTML compilado.JavaScript con HTML
Traté de reproducir el cómic original con mayor precisión. Se toma una captura de pantalla usando la biblioteca html2canvas. Los números se calculan repetidamente, por lo que puede cambiar el tamaño de la ventana o incluso agregar algo a la página en tiempo real.
Pruébelo en línea: http://copy.sh/xkcd-688.html
Aquí hay una captura de pantalla:
fuente
Procesamiento, 222 caracteres
¡Siempre quise hacer mi propia versión de esa tira cómica! La forma más simple (¿solo?) Que pude pensar en hacer esto fue prueba y error: dibujar algo, contar, dibujar de nuevo ...
Este programa se conforma con un porcentaje exacto después de unos segundos. No es muy bonito, pero es interactivo ; puede cambiar el tamaño de la ventana y comenzará a recalcular.
Se agregaron algunas líneas nuevas para facilitar la lectura:
Solo muestra el porcentaje de píxeles blancos; Debido al antialiasing del texto, los píxeles no blancos no son necesariamente negros. Cuanto más tiempo se esté ejecutando, más tiempo necesitará actualizarse en un cambio de tamaño.
Editar:Entonces, es un desafío de código; De alguna manera lo jugué al golf. Tal vez podría agregar algún tipo de gráficos más tarde, pero el principio general seguiría siendo el mismo. La interactividad es la mejor parte, creo.
fuente
background(-1)
lugar debackground(255)
Gran reto. Aquí está mi solución. Traté de acercarme lo más posible al cómic original, incluso usé la fuente xkcd .
Es una aplicación WPF, pero solía
System.Drawing
hacer las partes del dibujo porque soy vago.Concepto básico: en WPF, las ventanas son
Visuals
, lo que significa que se pueden representar. Represento toda la instancia de Windows en un mapa de bits, cuento el negro y el blanco o negro total (ignorando los grises en el suavizado de fuente y demás) y también cuento estos para cada 3º de la imagen (para cada panel). Luego lo hago nuevamente en un temporizador. Alcanza el equilibrio en un segundo o dos.Descargar:
MEGA Siempre revise los archivos que descarga en busca de virus, etc., etc.
Tendrá que instalar la fuente anterior en su sistema si desea verla; de lo contrario, es la predeterminada de WPF.
XAML:
Código:
El código no está limpio, pero debería ser algo legible, lo siento.
fuente
C (con SDL y SDL_ttf): solución en escala de grises
Aquí hay una solución que aprovecha la forma del gráfico circular para capturar el espectro completo de colores de píxeles en escala de grises, registrando un poco menos de 100 líneas.
Al igual que con mi solución anterior, la ruta al archivo de fuente debe codificarse en la fuente o agregarse al comando de compilación, por ejemplo:
La salida del programa se ve así:
Este es divertido de ver, porque todas las matemáticas ralentizan los redibujos a donde puede ver el programa enfocarse en la solución estable. La primera estimación está muy alejada (ya que la superficie comienza completamente negra), y luego se reduce al tamaño final después de aproximadamente una docena de iteraciones.
El código funciona tomando un recuento de población de cada color de píxel en la imagen actual. Si este recuento de población no coincide con el último, redibuja la imagen. El código itera sobre cada píxel, pero transforma las coordenadas x, y en coordenadas polares, calculando primero el radio (usando el centro de la imagen como origen). Si el radio está dentro del área del gráfico circular, entonces calcula el theta. El theta se escala fácilmente a los recuentos de población, lo que determina el color del píxel. Por otro lado, si el radio está justo en el borde del gráfico circular, se calcula un valor suavizado para dibujar el círculo alrededor del exterior del gráfico. ¡Las coordenadas polares facilitan todo!
fuente
float
versiones de funciones matemáticas-biblioteca, pero entonces no debefabs
serfabsf
?fabs()
es más portátil.C (con SDL y SDL_ttf)
Aquí hay una implementación muy simple, en aproximadamente 60 líneas de código C:
Para compilar esto, debe definir
FONTPATH
que apunte a un archivo .ttf de la fuente a usar:En la mayoría de las máquinas Linux modernas, puede usar la
fc-match
utilidad para buscar ubicaciones de fuentes, por lo que el comando de compilación se convierte en:(Por supuesto, puede reemplazar la fuente solicitada con su favorito personal).
El código específicamente no solicita suavizado, por lo que la ventana contiene solo píxeles en blanco y negro.
Finalmente, me inspiró la elegante solución de @ daniero para permitir el cambio de tamaño de la ventana. Verá que a veces el programa oscila entre conteos, atrapado en una órbita alrededor de un atractor que nunca puede alcanzar. Cuando eso suceda, simplemente cambie el tamaño de la ventana un poco hasta que se detenga.
Y, por solicitud, así es como se ve cuando lo ejecuto en mi sistema:
Finalmente, creo que debería señalar, en caso de que alguien aquí no lo haya visto, que el MAA publicó una entrevista con Randall Munroe en la que analiza la realización de la caricatura # 688 con cierto detalle.
fuente
La imagen es 100x100 y los números son exactos, y quiero decir exacto: elegí una imagen de 10000 píxeles para que los porcentajes pudieran expresarse con dos decimales. El método fue un poco de matemática, un poco de adivinanzas y algunos cálculos numéricos en Python.
Como sabía de antemano que los porcentajes podían expresarse en 4 dígitos, conté cuántos píxeles negros había en cada uno de los dígitos del 0 al 9, en Arial de 8 píxeles de alto, que es en lo que está escrito el texto. Escribí un función rápida
weight
que le indica cuántos píxeles se necesitan para escribir un número dado, rellenado con ceros a la izquierda para tener 4 dígitos:px
es una matriz de asignación de dígitos al número de píxeles requeridos. Si B es el número de píxeles negros y W es el número de píxeles blancos, tenemosB + W = 10000
y necesitamos:¿De dónde vienen las constantes? 423 es el número "inicial" de píxeles negros, el número de píxeles negros en el texto sin los números. 9577 es el número de píxeles blancos iniciales. Tuve que ajustar la cantidad de píxeles negros iniciales varias veces antes de lograr constantes de manera que el sistema anterior incluso tuviera una solución. Esto se hizo adivinando y cruzando los dedos.
El sistema anterior es terriblemente no lineal, por lo que obviamente puede olvidarse de resolverlo simbólicamente, pero lo que puede hacer es recorrer cada valor de B, establecer W = 10000 - B y verificar las ecuaciones explícitamente.
fuente
QBasic
Porque nostalgia.
Y porque realmente no conozco ninguna biblioteca de imágenes, es lenguajes modernos.
Método bastante sencillo de salida-conteo-repetición. Lo principal "interesante" es que el programa intenta aleatoriamente diferentes precisiones para los porcentajes; descubrí que no siempre convergía de otra manera.
Y la salida (probado en QB64 ):
fuente
AWK
... con netpbm y otros ayudantes
El archivo 'x':
La carrera:
La imagen está escrita como 'x.pbm', la convertí a png para cargar:
fuente