El triángulo Reuleaux es la forma formada por la intersección de tres círculos, con cada círculo pasando por los centros de los demás. Independientemente de la rotación, el ancho de un triángulo Reuleaux siempre será igual al radio de los círculos:
Imagen: Wolfram MathWorld
Escriba un programa que tome un ancho r
como entrada y muestre un triángulo Reuleaux de ese ancho (en píxeles).
Debe mostrar la forma de forma aislada, es decir, con relleno sólido, sin trazo y sobre un fondo con relleno sólido.
code-golf - El programa más corto en bytes gana.
code-golf
graphical-output
geometry
Darrylyeo
fuente
fuente
r
ser en píxeles o solo algún factor de escala?Respuestas:
JavaScript + HTML,
164158+ 13 = 171 bytesNo sé por qué disfruto respondiendo a estos desafíos de dibujo matemático con
<canvas>
tanto ...fuente
Love2D, 320 bytes.
Probablemente no sea la solución óptima, utiliza las plantillas de Love2D, configurando los 3 círculos y completando donde se cruzan.
Llame a través de la línea de comando, como
love tri.love 256
Salida de ejemplo
fuente
Python 2 , 111 bytes
fuente
Mathematica
10110098 BytesTomando un enfoque diferente que @MichaelSeifert, y probablemente interpretando esto un poco más literalmente con respecto a la cláusula de píxeles:
Ejemplo de uso:
10 píxeles
50 píxeles
100 píxeles
Se guardó un byte gracias a @MartinEnder (notación infija) y otros 2 bytes definiendo d.
fuente
PHP + SVG, 165 bytes
Ejemplo de salida para la entrada 128
fuente
PostScript,
968685757372 bytesToma la entrada como un valor en la pila.
^^
y^@
representan caracteres de control literal.(^@^^Z<^@Z<)
es la cadena de caracteres con los puntos de código 0, 30, 90, 60, 0, 90 y 60, respectivamente. Esos se interpretan entonces como ángulos en grados, porque obviamente para eso están los puntos de código.Se guardaron 10 bytes porque
closepath
no es necesario (ambosclip
efill
implícitamente cierran la ruta).Se guardó 1 byte usando en
repeat
lugar de definir una función.Ahorró 10 bytes al cambiar a un enfoque completamente diferente.
Ahorró 2 bytes haciendo trucos con la pila.
Se guardó 1 byte usando en
0 1 2{}for
lugar de3{}repeat
.fuente
Mathematica,
134131 bytesNota: esta solución ya no es válida, ya que la pregunta se editó posteriormente para exigir que r se midiera en píxeles. Gracias a Martin Ender por ayudarme a reducir algunos bytes en los comentarios.
El valor de entrada debe escalarse entre 0 y 1 para que este código funcione. Tenga en cuenta que se requiere casi una cuarta parte de este código para mostrar la forma "aisladamente", ya que este no es el valor predeterminado de Mathematica.
fuente
r Exp[2 I Pi n/3]
puede serExp[2I n/3Pi]r
para ahorrar algunos espacios. Y generalmente es más corto escribir una función sin nombre, es decir, soltarr=Input[];
, reemplazarr
con#
y agregar a&
.BBC BASIC, 58 bytes
Descargue el intérprete en http://www.bbcbasic.co.uk/bbcwin/download.html
Sin golf
fuente
TeX / TikZ,
128121112 bytesEl código se basa en esta respuesta al TeX.se .
TeX está basado en vectores, por lo que no tiene píxeles. El radio es flotante con un máximo de aproximadamente 15 antes de llegar al borde de la página. Tampoco está realmente construido para la entrada de línea de comandos, por lo que debe ejecutarse como
donde el código anterior se guarda en
rt.tex
fuente
.tex
;\footline{}
es tan bueno como\nopagenumbers
; usar~
como un nombre de variable en lugar de\i
. Para satisfacer el requisito de "píxel", puede usar\r sp
; 1sp es el equivalente a un píxel para TeX ya que es la mejor ubicación que TeX puede administrar (aunque no sé si se aplica a tikz).sp
pero creo quept
es una buena idea. Todas sus otras ideas funcionaron (algunas no parecían funcionar en mis pruebas). Gracias~
para guardar un byte más.\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 mi. Intentepdftex "\def\r{2000000} \input rt.tex"
: a 2sp, encontrar la forma visualmente sería difícil dado lo pequeño que es.GLSL,
298229 caracteresPruébalo aquí
Prima
r
variablefuente
JavaScript (ES6) + HTML, 196 + 13 = 209 bytes
Utiliza un enfoque basado en rutas en lugar de un enfoque de relleno de píxeles.
Mostrar fragmento de código
fuente
Logo, 53 bytes
usa el
filled
comando para rellenar la forma en color 0 (negro). El código en los corchetes exteriores se ejecuta sin dibujar ninguna línea, pero Logo realiza un seguimiento de los movimientos de la tortuga y rellena la forma una vez que se sale del corchete.Logotipo,
6461 bytesPluma hacia abajo, dibuje un arco de 60 grados con la tortuga en el centro, pluma hacia arriba, mueva la pluma al inicio del arco, gire 120 grados.
Repita 3 veces, luego muévase dentro de la forma y llénela.
Pruebe en http://turtleacademy.com/playground/en
Llamar como
cs ht t 100
(pantalla clara, ocultar tortuga,t
con r = 100).fuente
MATL , 35 bytes
Esto produce un archivo llamado
image.png
. Para la entradar
, el tamaño de la imagen es2*r+1
y el ancho del triángulo es elr
requerido.¡Pruébalo en MATL Online! El intérprete en línea abre automáticamente el archivo creado y muestra la imagen con escala arbitraria; haga clic en él para obtener la versión en tamaño real.
Alternativamente, aquí hay dos resultados de ejemplo del compilador fuera de línea que se ejecuta en Matlab, con entradas
50
y100
. La última parte del código0YG
ha sido reemplazada porIYG
para que la figura se muestre directamente (con el tamaño correcto) en lugar de escribirse en un archivo.Explicación
fuente
JavaScript (ES6) + SVG (HTML5), 28 + 102 = 130 bytes
El recuento de bytes excluye el código necesario para la entrada conveniente del usuario del tamaño deseado.
fuente
n=>s.style.width=n
funcionaría tambiénMetaPost (
242226 bytes)Es posible reducir esto un poco, soy nuevo en metapost.
fuente
len * dir
y el punto al final?k,
14110098 bytesLa entrada se toma de
stdin
, la salida estástderr
(ostdin
depende del intérprete) enpgm
formato. Por ejemplo:Explicación:
fuente
05AB1E , 66 bytes
No se puede usar TIO, ya que abre una ventana y dibuja el triángulo Reuleaux allí.
Pide entrada, y luego abre una ventana de tortuga Python dibujando el triángulo.
La respuesta de Jonathan Allan me dio la inspiración para hacer esto, aunque modifiqué un poco su código.
Esencialmente, esta es una combinación de las capacidades de compresión de 05AB1E y la facilidad de gráficos de tortuga de Python.
fuente
OpenSCAD , 91 bytes
No estoy seguro de cuán kosher es esto, ya que los píxeles no son realmente una unidad bien definida en ningún formato de cuadrícula de malla que yo sepa. En cambio, el módulo
t
dibuja un triángulo reuleaux de radio dador
en cualquier unidad nativa que esté en uso.Ejemplo de salida de vista previa para
t(100)
:fuente
SmileBASIC,
8786858382817978777675 bytesSin golf:
fuente