Aqui está uma imagem:
%%%%%%%%%%%%%
% Hello, %
% world! %
%%%%%%%%%%%%%
Mas é muito confuso para nossos cérebros subdimensionados calcularem. Então, calculamos a média da seguinte forma:
Divida-o em 2 x 2 seções. Se a imagem terminar antes que uma seção seja concluída, imagine que haja espaços lá.
Média dos valores dos caracteres ASCII em cada seção.
Arredonde essa média e converta-a em um caractere ASCII.
- Por fim, substitua todos os caracteres na seção pelo caractere médio.
Repita isso para todas as seções.
Portanto, a média da imagem acima fica assim:
$$>>II99######
$$>>II99######
$$##88KKGG####
$$##88KKGG####
Sua tarefa: escreva um programa que obtenha uma imagem ASCII como entrada e produz sua média.
Nota Os números inteiros são arredondados por função floor(x+0.5)
ou função semelhante - em outras palavras, as metades arredondadas para cima.
Respostas:
JavaScript (ES6), 159 bytes
Pega uma sequência multilinha como entrada.
fonte
MATL ,
3230 bytesEntrada é uma matriz de caracteres 2D, com linhas separadas por
;
.Experimente online!
Explicação
fonte
Pitão, 58 bytes
Experimente online!
fonte
Lua,
382376367353348 bytesFunciona na linha de comando; aceita uma string como o caso de teste.
fonte
Ruby,
235230 bytesfonte
Python, 319 bytes
O segundo recuo é tabs.
O material anterior
C
é preenchido,C
é o processo de média de letras únicas e o restante é geradofonte
R,
433399 bytesEstou ficando desesperado, porque essa coisa parece não ser competitiva. Imprime
para o caso de teste.
Se você alimentar o 7 × 3
a saída será
por causa da divisibilidade por 2 etc. etc.
Ungolfed:
Veja como ele lida com esse exemplo maravilhoso (cortesia de chris.com):
Depois de:
fonte
Ruby,
180158148128 + 4124 + 4 = 128 bytesExecute com
$ ruby -nl
(+4 bytes para-nl
sinalizadores). Recebe entrada em STDIN.Veja no ideone: http://ideone.com/brmP3L
Ungolfed & explicação
Por
man ruby
, o-n
sinalizador "[c] faz com que Ruby assuma o seguinte loop em torno do seu script ...while gets ... end
". A variável especial$_
contém a última linha lida porgets
. O-l
sinalizador remove o\n
de cada linha, equivalente a$_.chop!
.A variável especial
$.
é o número de linhas que foram lidas até agora e$<
é STDIN. Os pares de caracteres de cada segunda linha são compactados com as linhas anteriores. A sequência de formatação%2s%2s
combina os caracteres e a preenche com espaços; então, os caracteres são calculados como média.fonte
w=s=~/$/
é mais curto para calcular a largura inicial. Também apenas retornar a string calculado em vez de imprimir, pois isso conta como saída