Aquí hay una imagen:
%%%%%%%%%%%%%
% Hello, %
% world! %
%%%%%%%%%%%%%
Pero es demasiado confuso para nuestros cerebros de tamaño insuficiente para calcular. Entonces lo promediamos así:
Divídalo en 2 x 2 secciones. Si la imagen termina antes de que se complete una sección, imagine que hay espacios allí.
Promedio de los valores de los caracteres ASCII en cada sección.
Redondea este promedio y conviértelo a un carácter ASCII.
- Finalmente, reemplace todos los caracteres de la sección por el carácter promedio.
Repita esto para todas las secciones.
Entonces el promedio de la imagen de arriba se ve así:
$$>>II99######
$$>>II99######
$$##88KKGG####
$$##88KKGG####
Su tarea: escriba un programa que tome una imagen ASCII como entrada y genere su promedio.
Nota Los enteros se redondean por función floor(x+0.5)
o función similar; en otras palabras, redondean mitades hacia arriba.
Respuestas:
JavaScript (ES6), 159 bytes
Toma una cadena multilínea como entrada.
fuente
MATL ,
3230 bytesLa entrada es una matriz de caracteres 2D, con filas separadas por
;
.Pruébalo en línea!
Explicación
fuente
Pyth, 58 bytes
Pruébalo en línea!
fuente
LUA,
382376367353348 bytesFunciona en la línea de comando; acepta una cadena como el caso de prueba.
fuente
Ruby,
235230 bytesfuente
Python, 319 bytes
La segunda sangría es pestañas.
Lo anterior
C
es el relleno,C
es el proceso de promediación de letras individuales y el resto se emitefuente
R,
433399 bytesMe estoy desesperando porque esta cosa parece no competir como diablos. Se imprime
para el caso de prueba.
Si te alimentas en el 7 × 3
la salida será
debido a la divisibilidad por 2 etc. etc.
Sin golf:
Solo mire cómo maneja este magnífico ejemplo (cortesía de chris.com):
Después:
fuente
Ruby,
180158148128 + 4124 + 4 = 128 bytesEjecutar con
$ ruby -nl
(+4 bytes para-nl
banderas). Toma entrada en STDIN.Véalo en ideone: http://ideone.com/brmP3L
Sin golfos y explicación
Por ejemplo
man ruby
, la-n
bandera "[c] hace que Ruby asuma el siguiente ciclo alrededor de su script ...while gets ... end
". La variable especial$_
contiene la última línea leída porgets
. La-l
bandera elimina el\n
de cada línea, equivalente a$_.chop!
.La variable especial
$.
es el número de líneas que se han leído hasta ahora, y$<
es STDIN. Los pares de caracteres de cada segunda línea se comprimen con los de la línea anterior. La cadena de formato%2s%2s
combina los caracteres y los rellena con espacios, luego los caracteres se promedian.fuente
w=s=~/$/
es más corto para calcular el ancho inicial. También solo devuelva la cadena calculada en lugar de imprimir porque eso cuenta como salida