Su programa debe tomar como entrada una línea de caracteres, como esta:
@+.0
Y muestra los caracteres ordenados por cuán oscuros son, de esta manera:
.+0@
Requisitos:
Debe usar una fuente monoespaciada para la detección de oscuridad.
Debes averiguar cuántos píxeles ocupa cada personaje. En realidad, debe dibujar el carácter y contar píxeles, es decir, no puede simplemente codificar cantidades de píxeles.
- Como regla más concreta: si cambiaste de fuente, tu programa aún debería funcionar. Además, su programa debería poder cambiar las fuentes simplemente cambiando una variable o valor o cadena en el código.
Si usa antialiasing, debe contar los píxeles como porcentajes de un píxel completamente negro. Por ejemplo, un
rgb(32, 32, 32)
píxel contará como 1/8 de un píxel completo. Haga caso omiso de esta regla si sus personajes no tienen antialias.Después de contar los píxeles, debe ordenar los caracteres por la cantidad de píxeles y mostrarlos en orden.
Este es el código de golf , por lo que ganará el código más corto en bytes.
Respuestas:
Mathematica,
112 110108 bytesEs probable que esto todavía se pueda jugar más. Asume que la cadena está en la variable s.
Y ahora usa una sintaxis correcta para ordenar una lista por otra lista.
Casos de prueba afortunados -> "Oh sí, eso funciona" -> Facepalm
Gracias por los ojos agudos, David Carraher.
Actualizar: Reemplacé OCR A con Menlo porque me di cuenta de que en OSX el nombre de la familia de fuentes OCR A es en realidad OCR A Std. Así que estaba ordenando una fuente predeterminada en lugar de la verdadera. Menlo también está monoespaciado con el mismo número de bytes, por lo que no hay ganancia o pérdida neta.
He puesto una exportación de CDF alojada del portátil , para que pueda ver el código en acción si lo desea. Todavía estoy descubriendo cómo agregar algo de interactividad a los CDF alojados en la web, por lo que por ahora es solo estático.
Salida para
s = FromCharacterCode /@ Range[33, 135];
con "Courier"Salida para lo mismo, pero con FontFamily "Monospace":
Tenga en cuenta que los resultados finales se muestran en la fuente interna de MM, no en la fuente que se está ordenando. Por lo tanto, verá las diferencias en la fuente elegida reflejadas en el orden. Sin embargo, el enlace CDF muestra ambos para los completistas.
Código sin golf:
fuente
"" <> (FromCharacterCode /@ Range[33, 135])
StringJoin@SortBy[Characters@"@+.0",ImageData@Binarize@Rasterize@Style[#,FontFamily->"Monospace"]~Total~2&]
Bash + ImageMagick:
164147148 caracteresEjecución de muestra:
Los separadores se insertan entre los grupos de gris. Los caracteres con un nivel de gris idéntico no están separados:
fuente
sort
QBasic, 259 bytes
Lo hice por diversión, por lo que técnicamente no cumple con las reglas de una manera. No toma una lista de caracteres, sino que imprime todos los caracteres de 32-255 y los usa en su lugar. Si realmente desea ver una versión que cumpla con esta regla, dígame.
También falla otro tecnicismo: "Además, su programa debería ser capaz de cambiar las fuentes simplemente cambiando una variable o valor o cadena en el código". No hay una manera fácil de hacer esto desde QBasic. Sin embargo, el programa, por supuesto, funcionará bien con cualquier página de códigos que elija.
Por último, podría eliminar algunos caracteres (en su mayoría espacios en blanco que el IDE QBasic inserta útilmente), pero probablemente no valga la pena ya que esta respuesta no tiene posibilidades de ganar de todos modos.
fuente
Javascript + Canvas y DOM del navegador (
280237235 bytes)Versión actualizada con sugerencias de Fors y cepillo de dientes en los comentarios:
Versión más legible:
Tal vez se pueda jugar más al golf.
Soy nuevo en este sitio, así que no estoy seguro de cómo se lee normalmente la entrada para las respuestas de Javascript. Supongo que la entrada está contenida en una variable llamada
s
. Si esto no está bien, actualizaré la respuesta y el recuento de caracteres.JSFiddle de versión actualizada.
JS Violín de la primera versión .
fuente
c
ys
son innecesarias (a=document.createElement('canvas').getContext('2d')
yy+=a.getImageData(0,0,30,30).data[i]
), el elemento no necesita ser agregado, la inicialización cero dey
se puede combinar con la dei
(i=y=0
), el post-incremento dei
se puede combinar con la suma dey
(for(...;y+=...[i++]);
) y el tipo de letra Mónaco es monoespaciado y tiene un nombre más corto que Courier.prompt()
; Pero esto también está bien.y=i=0;
y cambiara.fillText(x,0,20)
aa.fillText(x,y=i=0,20)
.PHP, 298 caracteres
He agregado algunos saltos de línea para que pueda verlo en toda su horrible:
Este código usa las fuentes GD que vienen con PHP. El segundo argumento de
imagechar()
selecciona la fuente (los números del 1 al 5 son válidos).Ejemplo:
Si inserta lo siguiente en la parte superior del código que se muestra arriba, podrá proporcionar la lista de caracteres en su navegador web.
fuente
imagecreatetruecolor
, puede soltar la primera asignación y usar el nombre de la función directamente en la segunda, para -11.[]
en lugar dearray()
. yforeach($a as$v)
funciona bienGTB
Este tiene el código para ser el segundo código más difícil que he escrito para una calculadora. Sin valores de píxel codificados, en realidad dibuja el texto en un gráfico y realiza un bucle para contar cada píxel.
Entrada
Salida
fuente
Java -
468 450444@+.0abcdefghijklmnopqrstuvwxyz
->.irl+jcvtfxyzsuonkheaqpdb0wgm@
Sin golf:
fuente
Postdata, 381
Aquí hay algo completamente diferente, solo por diversión. Como la mayoría de las fuentes son vectores de todos modos, 'contar píxeles' es un poco extraño, ¿no? Calcular el área de forma de glifo, aunque es la forma correcta, no es tan fácil. Una alternativa puede ser escanear un rectángulo y contar 'golpes' cuando un punto está dentro de una forma de glifo, y Postscript tiene operadores para este tipo de comprobaciones. Sin embargo, es cierto, el escaneo y las pruebas de interioridad son solo una forma extraña de contar píxeles.
.
Y aquí están los resultados para 3 fuentes diferentes (la selección de las cuales puede estar sin comentarios, arriba):
fuente
Perl (con GD) (159)
uso:
editar: acortado a 159 caracteres
fuente
Java, 584
Wow ... Este no era un buen lenguaje para hacer esto.
Uso:
Esta configuración da como resultado:
La única línea aquí que necesita explicación:
Entonces esta pieza final lo une ...
Al iterar a través de todos los puntos y sumar el recuento de puntos. Esta información de densidad se devuelve al comparador y se utiliza para ordenar.
fuente
R, 195 caracteres
Sangrado con comentarios:
Ejemplo:
La gestión de las fuentes en los gráficos R depende de la plataforma, no puedo garantizar que funcione en PC, pero lo hace en una Mac (OS X 10.7.5, R 2.14.2).
fuente
SmileBASIC,
179176173 bytesUtiliza la fuente cargada actualmente. Las fuentes se pueden cargar con
LOAD"GRPF:filename"
.Código más legible:
fuente
PHP - 485
Manifestación:
Código:
fuente
Python + freetype-py: 147
fuente