Com pouco dinheiro, você se inscreveu para criar rosquinhas para a The Donut Shop ™, a maior empresa de rosquinhas digitais do mundo, principalmente porque elas vendem todos os tamanhos de rosquinha imagináveis.
Agora, considerando que os padrões de negociação atualmente são muito difíceis, você precisa escrever um pedaço de código o mais curto possível para criar esses anéis de espuma, para que o código-fonte que os criou possa ser colocado na parte externa do pacote.
Desafio
Dadas 4 entradas, raio do anel externo, raio do anel interno, as possíveis polvilhas e a chance de uma célula ser polvilhada, produz uma rosquinha coberta nessas polvilhas com os raios interno e externo corretos.
- A entrada pode ser tomada como você deseja (argumentos para uma função, stdin, argumentos do programa) e em qualquer ordem.
- As polvilhas serão dadas na forma de 1 caractere por tipo de polvilha
^+*-
como entrada pitada seria uma lista de 4 polvilha,^
,+
,*
,-
- A possibilidade de uma pitada será inserido como um valor de ponto flutuante entre 0 e 1. por exemplo,:
0.1
,0.23
- Você deve imprimir a saída para stdout ou equivalente.
- Granulado não pode estar nas bordas da rosquinha.
- Cada tipo de aspersão deve ter uma chance igualmente provável de estar em cada célula.
- Os raios são dados em unidades de 1 célula.
- Se o raio interno for igual a 0 OU ao raio externo, diz-se que o anel não possui anel.
- Ambos os raios serão números inteiros não negativos.
- As bordas interna e externa da rosquinha devem ser representadas usando hashes (
#
) Um teste para ver se um ponto está em um círculo, dado um raio e o centro do círculo é:
(x-center)**2+(y-center)**2 < radius**2
Exemplo de entrada com saída
(raio externo, raio interno, granulado, possibilidade de granulado)
10, 4, "^ + * -", 0,1
######### # # ## ++ * *## # # # ^^ - * # # ##### ^ # #+ # # # # # #- # # # # * # # # #+ # # # # # #^ +# # # # # # # # * ##### # # + - # # ^ # ## ^ + ## # ^ # #########
5, 2, ": ^ + *", 0,9
##### #^^+ ^# #**### # #:# #^# #^# #*# #:# #*# #:+###* # # *:^:# #####
Isso é código de golfe, a resposta mais curta em bytes ganha
10, 4
e5, 2
são bem diferentes. Gostaria de deixar um comentário sobre a resposta, mas percebi que realmente não entendia como a saída deveria ser para quaisquer dimensões, exceto as dos exemplos. Se você deseja alterar sua ideia original para corresponder à saída da resposta, isso é com você, mas o desafio deve definir claramente como desenhar as fronteiras de qualquer maneira.Respostas:
MATLAB, 231 bytes
Aqui está uma solução matlab:
Alguns exemplos:
fonte
Python, 263 bytes
Então, vi um desafio sem respostas que parecia relativamente fácil, mas também interessante e que pensei:
Hmm ... Se eu sou o único com uma resposta, vencerei até que uma resposta melhor apareça inevitavelmente.
Então, sentei-me com o Python por alguns minutos e criei um rascunho que, com a ajuda das sugestões da comunidade, estive aprimorando para reduzir seu tamanho.
Para os exemplos acima, isso cria
e
Duvido muito que essa seja a solução mais curta possível, mas acho que funcionou muito bem na tentativa de um adolescente autodidata de perder tempo. Como esse foi projetado para ser o menor possível, não incluí comentários e atalhos para todos os nomes de variáveis e, como tal, esse programa é mais para usabilidade do que legibilidade.
Se você quiser usar esse código por algum motivo sem o meu conhecimento, execute-o em IDLE e digite o comando
no formato descrito acima.
fonte
abs
chamada, pois os raios são garantidos como não negativos. Também recomendo consultar Dicas para jogar golfe em Python para obter dicas adicionais. Mais uma vez, bem-vindo!N=False if I==0 or I>=O else True
pode ser quenot (I==0 or I>=O)
a função C seja uma lambda. Mas é realmente uma boa primeira entrada!P
mais de uma vez, então não faz sentido salvar a*100
variável.