O triângulo de Reuleaux é a forma formada pela interseção de três círculos, com cada círculo passando pelos centros dos outros. Independentemente da rotação, a largura de um triângulo de Reuleaux sempre será igual ao raio dos círculos:
Imagem: Wolfram MathWorld
Escreva um programa que tenha uma largura r
como entrada e exiba um triângulo Reuleaux dessa largura (em pixels).
Você deve exibir a forma isoladamente, ou seja, preenchida com sólido, sem traços e sobre um fundo preenchido com sólido.
code-golf - O programa mais curto em bytes vence.
code-golf
graphical-output
geometry
darrylyeo
fonte
fonte
r
estar em pixels ou apenas algum fator de escala?Respostas:
JavaScript + HTML,
164158 + 13 = 171 bytesNão sei por que gosto de responder a esses desafios de desenho matemático com
<canvas>
tanto ...fonte
Love2D, 320 bytes.
Provavelmente não é a solução ideal, ele usa os estênceis do Love2D, configurando os 3 círculos e preenchendo onde eles se cruzam.
Ligue através da linha de comando, como
love tri.love 256
Saída de exemplo
fonte
Python 2 , 111 bytes
fonte
Mathematica
10110098 BytesAdotando uma abordagem diferente da @MichaelSeifert e provavelmente interpretando isso um pouco mais literalmente em relação à cláusula pixel:
Exemplo de uso:
10 pixels
50 pixels
100 pixels
Salvou um byte graças a @MartinEnder (notação de infixo) e outros 2 bytes, definindo d.
fonte
PHP + SVG, 165 bytes
Exemplo de saída para entrada 128
fonte
PostScript,
968685757372 bytesRecebe a entrada como um valor na pilha.
^^
e^@
representam caracteres de controle literais.(^@^^Z<^@Z<)
é a sequência de caracteres com pontos de código 0, 30, 90, 60, 0, 90 e 60, respectivamente. Esses são interpretados como ângulos em graus, porque obviamente é para isso que servem os pontos de código.Economizou 10 bytes porque
closepath
não é necessário (ambosclip
efill
implicitamente fecham o caminho).Salva 1 byte usando em
repeat
vez de definir uma função.Economizou 10 bytes mudando para uma abordagem completamente diferente.
Economizou 2 bytes fazendo truques com a pilha.
1 byte salvo usando em
0 1 2{}for
vez de3{}repeat
.fonte
Mathematica,
134131 bytesNota: esta solução não é mais válida, pois a pergunta foi editada posteriormente para exigir que r fosse medido em pixels. Agradeço a Martin Ender por me ajudar a eliminar alguns bytes nos comentários.
O valor de entrada deve ser escalado entre 0 e 1 para que esse código funcione. Observe que quase um quarto desse código é necessário para exibir a forma "isoladamente", pois esse não é o padrão do Mathematica.
fonte
r Exp[2 I Pi n/3]
pode serExp[2I n/3Pi]r
para economizar alguns espaços. E geralmente é mais curto escrever uma função sem nome, ou seja, largarr=Input[];
, substituirr
por#
e acrescentar a&
.BBC BASIC, 58 bytes
Faça o download do intérprete em http://www.bbcbasic.co.uk/bbcwin/download.html
Ungolfed
fonte
TeX / TikZ,
128121112 bytesO código é baseado em esta resposta em TeX.se .
O TeX é baseado em vetores, portanto, não pixels. O raio é um flutuador com no máximo cerca de 15 antes de atingir a borda da página. Também não é realmente construído para entrada de linha de comando, portanto, precisa ser executado como
onde o código acima é salvo em
rt.tex
fonte
.tex
;\footline{}
é tão bom quanto\nopagenumbers
; use~
como um nome de variável em vez de\i
. Para satisfazer o requisito de "pixel", você pode usar\r sp
; 1sp é o equivalente a um pixel para o TeX, pois é o melhor local que o TeX pode gerenciar (não sei se isso se aplica ao tikz).sp
mas acho quept
é uma boa ideia. Todas as suas outras idéias funcionaram (algumas não pareceram nos meus testes). Obrigado~
para salvar mais um byte.\input tikz\footline{}\tikz\draw[draw=none,fill=red](0,1)\foreach~in{1,2,3}{[rotate=~*120]arc(0:60:\r sp)};\bye
funciona para mim. Tentepdftex "\def\r{2000000} \input rt.tex"
- em 2sp, encontrar a forma visualmente seria difícil, dada a sua pequena dimensão.GLSL,
298229 caracteresExperimente aqui
Bônus
r
variávelfonte
JavaScript (ES6) + HTML, 196 + 13 = 209 bytes
Usa uma abordagem baseada em caminho em vez de uma abordagem de preenchimento de pixels.
Mostrar snippet de código
fonte
Logotipo, 53 bytes
usa o
filled
comando para preencher a forma na cor 0 (preto.) O código nos colchetes externos é executado sem que nenhuma linha seja desenhada, mas o Logo acompanha os movimentos da tartaruga e preenche a forma assim que o colchete é retirado.Logotipo,
6461 bytesPen Down, desenhe um arco de 60 graus com a tartaruga no centro, Pen Up, mova a caneta para o início do arco, gire 120 graus.
Repita 3 vezes, depois mova-se para dentro da forma e preencha-a.
Tente em http://turtleacademy.com/playground/en
Ligar como
cs ht t 100
(limpar a tela, ocultar a tartaruga,t
com r = 100).fonte
MATL , 35 bytes
Isso produz um arquivo chamado
image.png
. Para entradar
, o tamanho da imagem é2*r+1
e a largura do triângulo ér
conforme necessário.Experimente no MATL Online! O intérprete online abre automaticamente o arquivo criado e exibe a imagem com escala arbitrária; clique nele para obter a versão em tamanho real.
Como alternativa, aqui estão dois exemplos de saídas do compilador offline em execução no Matlab, com entradas
50
e100
. A última parte do código0YG
foi substituída porIYG
para que a figura seja exibida diretamente (com o tamanho certo) em vez de gravada em um arquivo.Explicação
fonte
JavaScript (ES6) + SVG (HTML5), 28 + 102 = 130 bytes
A contagem de bytes exclui o código necessário para a entrada conveniente do usuário do tamanho desejado.
fonte
n=>s.style.width=n
funcionaria também.MetaPost (
242226 bytes)Pode ser possível reduzir um pouco isso, sou novo no metapost.
fonte
len * dir
e o ponto no final?k,
14110098 bytesA entrada é retirada
stdin
, a saída éstderr
(oustdin
depende do intérprete) nopgm
formato. Por exemplo:Explicação:
fonte
05AB1E , 66 bytes
Não é possível usar o TIO, pois ele abre uma janela e desenha o triângulo de Reuleaux lá.
Solicita entrada e, em seguida, abre uma janela de tartaruga Python desenhando o triângulo.
A resposta de Jonathan Allan me deu a inspiração para fazer isso, embora eu tenha alterado um pouco o código dele.
Essencialmente, essa é uma combinação dos recursos de compactação do 05AB1E e da facilidade de gráficos de tartarugas do Python.
fonte
OpenSCAD , 91 bytes
Não tenho certeza de quão kosher é isso, pois os pixels não são realmente uma unidade bem definida em nenhum formato de grade de malha que eu conheça. Em vez disso, o módulo
t
desenha um triângulo de reuleaux de determinado raior
em quaisquer unidades nativas que estejam em uso.Exemplo de saída de visualização para
t(100)
:fonte
SmileBASIC,
8786858382817978777675 bytesUngolfed:
fonte