O problema:
Esse desafio vem de um problema real que eu estava tendo. Eu tenho uma configuração de monitor duplo no trabalho e queria usar a seguinte imagem como papel de parede:
No entanto, meus monitores têm molduras bastante significativas e, quando defino meu plano de fundo, é algo parecido com isto, onde o píer aparece (mais aparente?) Para ser quebrado:
Consegui resolver isso criando uma imagem com o centro recortado e depois esticando-a de volta ao tamanho original, como na imagem abaixo:
O desafio:
Escreva um programa que capte uma imagem e a "monitore" para uso com uma configuração de monitor duplo (ou seja, exclui a seção central da imagem, onde estão os painéis). As regras são as seguintes:
- Ele deve ser um programa completo que aceite a imagem, como um caminho (argumento de cadeia, etc.) ou na forma de uma caixa de diálogo de seleção de arquivos.
- O programa deve ter como entrada o número de linhas verticais (um pixel de largura) para recortar do centro da imagem
- O corte deve vir do centro (largura) da imagem original
- A imagem resultante deve ser redimensionada novamente para o tamanho original da imagem de entrada. (As metades podem ser dimensionadas individualmente e, em seguida, concatenadas ou concatenadas e, em seguida, dimensionadas. A escala individual produz uma melhor imagem / efeito, mas dificilmente é perceptível no mundo real)
- As imagens de plano de fundo geralmente são uniformes; portanto, para facilitar esse desafio, as imagens de entrada terão apenas um número par de pixels e o número de linhas a serem removidas também será uniforme.
- Esse desafio é o código de golfe - o código mais curto em bytes ganha
Boa sorte!
code-golf
image-processing
dberm22
fonte
fonte
Respostas:
Oitava, 85 bytes
Define uma função anônima com
f
o nome do arquivo en
o número de colunas a serem removidas. Como uma função anônima exige uma única expressão, a atribuição em linha é usada, um recurso não presente no MATLAB.MATLAB, 98 bytes
Como bônus, também joguei uma resposta compatível com o MATLAB. Curiosamente, este é apenas 13 bytes a mais, pois a versão Octave precisa de muitos parênteses para analisar corretamente as atribuições em linha.
fonte
Matlab 2013, 150 bytes
Aqui está minha tentativa no Matlab. Definitivamente não será o código mais curto, mas é um começo.
Aviso, isso substitui a imagem original; portanto, faça uma cópia primeiro.
Versão Golfed
Código Ungolfed, com melhorias para tamanhos de imagem ímpares e número ímpar de colunas
fonte
os
etc. para qualquer outra letra do alfabeto! E por que não escrever a imagem de volta na imagem de entradaf
para salvar o todostrcat
? (que, aliás, você pode substituir por['',...]
em vez destrcat(...)
)Wolfram Language,
134,127,119111 bytesCria uma função
f
que obtém uma imagem como a primeira entrada (como um símbolo no Mathematica ou na Wolfram Cloud) e um número inteiro como a segunda entrada.Ungolfed :
Tecnicamente, ele não funcionará corretamente se qualquer uma das dimensões da imagem exceder 362.880 pixels, mas presumo que esteja tudo bem, pois isso está muito fora do escopo do problema (e alguns computadores).Fixo!fonte
PHP, 206 bytes
usa três argumentos de linha de comando: nome do arquivo de origem, número de linhas a serem cortadas e nome do arquivo de destino. Corra com
-r
.Você pode usar em
imagecopyresampled
vez deimagecopyresized
(+2 bytes) para obter um resultado melhor.destroçado
Eu poderia salvar mais 9 bytes enviando o resultado PNG para STDOUT ... mas para quê?
fonte
php -r image.php image.png 1 > output.png
, certo?