Dada apenas uma régua e uma bússola, inscreva um losango dentro do retângulo, compartilhando dois pontos opostos.
Entrada
Entrada é as dimensões do retângulo. No exemplo mostrado, isso seria 125, 50
. Você pode receber entradas da maneira que for mais conveniente (como dois números inteiros, lista, seqüências de caracteres, etc.).
A dimensão maior será no mínimo 100, enquanto a menor será no mínimo 25. Ambos terminam em 200.
Saída
A saída será uma imagem (exibida na tela ou salva como um arquivo) mostrando
- O retângulo de entrada
- Todas as linhas / círculos "funcionais"
- O losango inscrito
em cores distintas. Na imagem acima, o retângulo é preto, as linhas de trabalho são azuis e o losango é laranja. As linhas devem ser desenhadas na ordem mostrada na lista (por exemplo, losango substitui as linhas de trabalho e o retângulo).
A imagem de saída precisa ser grande o suficiente para conter tudo. Por exemplo, os círculos mostrados não podem sair dos limites.
Método
O método usado na imagem de exemplo acima é:
- Desenhe um círculo usando o canto inferior esquerdo como centro e o canto superior direito como um ponto no perímetro, fornecendo um raio igual à diagonal do retângulo.
- Faça o mesmo, mas trocando pontos de centro e perímetro.
- Desenhe uma linha entre as interseções dos dois círculos, dando uma bissetor perpendicular à diagonal do retângulo.
- Use as interseções da nova linha e retângulo para desenhar o losango.
Isso funciona porque as diagonais interiores de um losango sempre se cortam perpendicularmente. Não estou incluindo aqui uma prova completa disso.
Este não é o único método para obter seu losango, e você pode usar outro, desde que explique o que está fazendo. Eu acredito que é provavelmente o mais fácil, no entanto.
Regras
Você só pode desenhar círculos e linhas (ou melhor, segmentos de linha). Um círculo é definido com um ponto central e um ponto de perímetro. Uma linha é definida por quaisquer dois pontos. As linhas não precisam ter nenhum comprimento especificado, mas devem cobrir pelo menos os pontos de definição (observe a imagem de exemplo: a linha passa um pouco além das interseções do círculo, mas não até a aresta). Para círculos, o raio do centro até o ponto de perímetro escolhido é considerado uma linha de trabalho e deve ser mostrado.
Para rasterizar as linhas, você pode usar qualquer algoritmo reconhecido (por exemplo, o de Bresenham) ou confiar em quaisquer recursos internos que sua linguagem possa ter. Se sua saída for baseada em vetores, verifique se é exibida em uma resolução pelo menos tão grande quanto o retângulo de entrada em pixels. Além disso, você desenhará em uma tela simples, portanto, suprima quaisquer marcas de grade ou saída estranha.
Sem trapaça! Você só pode determinar o posicionamento de pontos / linhas / círculos usando o que você estabeleceu até agora. Se você não consegue explicar como usar suas linhas / círculos de trabalho para mostrar que é um losango, está fazendo errado.
Você pode usar o par de pontos opostos desejado e o retângulo não precisa ser desenhado alinhado ao eixo, desde que a saída esteja correta.
A entrada sempre será um retângulo não quadrado, portanto, não se preocupe com maiúsculas e minúsculas.
Por fim, este é o código padrão de golfe, e o tamanho mais baixo em bytes vence.
fonte
Respostas:
HTML + JavaScript (ES6), 34 + 353 = 387 bytes
A entrada deve ser fornecida no formato
[125,50]
.Muita matemática e desenho ... O retângulo é desenhado de lado se a altura for maior que a largura, o que acredito ser permitido.
fonte
444
: P400
;-)Mathematica,
157148158 bytesAgradecemos a Martin Ender pelos comentários com a alta qualidade habitual! 9 bytes salvos neste caso.
Editado assim que foi esclarecido que os argumentos podem vir em qualquer ordem; 10 bytes adicionados para compensar.
Novamente, é aqui que o Mathematica brilha: saída gráfica de alto nível envolvendo computação matemática. O mesmo código com espaços e novas linhas para legibilidade humana:
Função sem nome de um único argumento que é um par ordenado de números positivos; o final
@@ Sort@# &
converte esse par em dois argumentos numéricos em que o primeiro número é menor.Line
produz um caminho poligonal de ponto a ponto, que se transformará em um polígono fechado se o primeiro e o último pontos forem os mesmos;Circle
produz um círculo com determinado centro e raio. Pontos especiaiso
ec
(os cantos retangulares inferior esquerdo e superior direito),p
(um terceiro canto de losango, fornecido por uma fórmula matemática) ek
(ajudando a desenhar a bissetriz perpendicular) recebem nomes no caminho para salvar bytes quando chamados novamente , como é o par especial de pontosl = {o,c}
. O Mathematica tem o prazer de adicionar pontos diretamente, multiplicar as duas coordenadas pelo mesmo fator, obter seu produto escalar, etc., tudo isso simplificando o código.Saída de amostra, com argumentos
125
e50
:fonte
{0,0}
. Como não há requisito para usar azul e laranja, você pode salvar bytes usando emRed
vez deOrange
. Você está usandoLine
quatro vezes, o que é mais do que suficiente para salvar bytesi=Line;
(como regra geral, se a expressão tivern
caracteres e você usá-la quantasm
vezes precisar(m-1)*(n-1) > 4
, menos se puder atribuir a variável durante o primeiro uso sem parênteses).0{,}
truque é fantástico: D@@Sort@#&
e trocando#
e#2
ao longo do código ou adaptando-o alternativamente para trabalhar com retângulos de orientação retrato.MetaPost, 473 (com cores) 353 (sem cores)
Colorido (473 bytes):
Não colorido (353 bytes):
Nunca NUNCA usei isso antes, e tenho certeza que o massacrei ...
Mas quando você executa isso neste site:
http://www.tlhiv.org/mppreview/
Ele usa a interseção dos círculos para desenhar o segundo eixo e, em seguida, usa a interseção do eixo e o retângulo para desenhar o losango final. Embora eu pudesse ter trapaceado e apenas traçado uma linha perpendicular ao primeiro eixo haha.
Para alterar as dimensões, basta alterar A e B.
Independentemente, você acaba com (para L = 170, H = 100):
fonte
Desmos, 375 (ou 163) bytes
w
eh
são as entradas. Experimente no Desmos!Versão alternativa de 163 bytes:
Esta versão requer que cada linha seja copiada e colada em cada linha separada no Desmos. O Meta ainda precisa decidir se este é um método de contagem válido, mas o método anterior é definitivamente bom.
fonte
ImageMagick versão 7.0.3 + bash + sed, 496 bytes
Resultado com "rhombus.sh 180 120"
Mais preciso (usando tela de 6400x6400 em vez de 800x800), 570 bytes
As interseções não são exatas; a diretiva "strokewidth" torna as linhas largas o suficiente para garantir que pelo menos um pixel inteiro seja misturado com apenas as cores das duas linhas que se cruzam, mas nos piores casos (25x200 e 200x25) os cruzamentos estão em um ângulo pequeno, de modo que a nuvem de pixels misturados tem vários pixels e, como selecionamos o primeiro e o último pixel misturado, há um pequeno erro. Usar uma tela 8x maior com a mesma largura de traço e reduzir o resultado reduz o erro para menos de um pixel, mas com uma penalidade de aproximadamente 64x.
Resultados de 800x800 normais versus 6400x6400 precisos:
Ungolfed:
fonte
R, 290 bytes
Função anônima, a saída é exibida na tela. Ligeiramente não-destruído, com comentários:
Exemplo de saída para (120,100):
fonte
LibreLogo , 270 bytes
Código:
Resultado:
Explicação:
fonte
Python 3.5 + Tkinter, 433 ou 515 bytes
Não colorido (433 bytes):
Colorido (515 bytes):
Uma função nomeada que recebe entrada como 2 números separados por vírgula. A saída é fornecida em uma janela separada que você pode ter que redimensionar para ver a saída completa. Aqui está uma amostra de saída colorida para
V(180,130)
:fonte
SmileBASIC, 280 bytes
(A captura de tela / explicação será publicada em breve) A cor do plano de fundo é preta, o retângulo é vermelho, os círculos e as linhas são brancos e o losango é amarelo.
fonte