Aqui estão cinco imagens de peras e uma calha de aço :
Estas são apenas miniaturas, clique nelas para ampliar!
(Eu fiz isso com Algodoo .)
Essa classe de imagens sempre tem as seguintes propriedades:
- Eles são sempre 400 × 400 pixels com fundo branco. (Pode não ser exatamente branco, pois as imagens do SE são compactadas com perdas.)
- Eles têm 1 a 4 peras idênticas, cada uma girada e posicionada (quase) de qualquer maneira.
- Eles têm uma calha de aço vertical que chega à parte inferior da imagem.
- Além da parte inferior da rampa, as caixas delimitadoras da rampa e da pera ( exemplo da caixa delimitadora ) nunca tocam ou saem dos limites da imagem.
- As caixas delimitadoras das peras nunca se sobrepõem nem se sobrepõem à calha.
- As pêras podem ser por baixo da parte inclinada da calha, como em B , C , e D . (Portanto, a caixa delimitadora da rampa pode se sobrepor à caixa delimitadora de uma pera.)
- A rampa pode ter qualquer posição horizontal e vertical, desde que haja espaço suficiente para que todas as caixas delimitadoras das peras se encaixem livremente acima dela (não serão testadas caixas "que mal se encaixam") e parte da parte da coluna é visível.
Desafio
Escreva um programa que capte essa imagem e produza outra imagem de 400 × 400 com a rampa no mesmo lugar, mas com as peras reposicionadas para que fiquem todas acima da rampa (para que elas possam cair nela e ser espremidas e assim por diante).
Os requisitos para a imagem de saída são:
- Todas as peras na imagem de entrada devem ser reposicionadas de forma que fiquem acima da rampa, entre as bordas esquerda e direita do funil. (Acima de uma aresta não está ok.)
- Cada pera deve manter seu ângulo de rotação. (Portanto, você deve cortar e colar as peras, não redesenhá-las.)
- As peras não devem se sobrepor ou tocar uma na outra ou na rampa. (As caixas delimitadoras de pera podem se sobrepor.)
- As peras não devem tocar ou sair dos limites da imagem.
Aqui estão exemplos de saídas válidas para as cinco imagens de amostra:
Estas são apenas miniaturas, clique nelas para ampliar!
Observe que a imagem de entrada para E já era uma saída válida, mas reorganizar as peras quando não for tecnicamente necessário é bom.
Detalhes
- Pegue o nome do arquivo da imagem ou os dados brutos da imagem via stdin / linha de comando / chamada de função.
- Envie a imagem para um arquivo com o nome de sua escolha ou envie os dados brutos do arquivo de imagem para stdout ou simplesmente exiba a imagem.
- Qualquer formato de arquivo de imagem sem perdas comum pode ser usado.
- Podem ser usadas bibliotecas de gráficos e imagens.
- Alguns pixels incorretos aqui e ali (devido a perdas ou algo assim) não é grande coisa. Se eu não posso dizer que algo está errado visualmente, provavelmente está tudo bem.
O código mais curto em bytes vence. O desempate é o posto mais votado.