Reulaux trójkąt jest kształt utworzony przez przecięcie się trzech kół, z których każdy przechodzi przez koła centruje innych. Bez względu na obrót szerokość trójkąta Reuleaux zawsze będzie równa promieniowi okręgów:
Zdjęcie: Wolfram MathWorld
Napisz program, który przyjmuje szerokość r
jako dane wejściowe i wyświetla trójkąt Reuleaux o tej szerokości (w pikselach).
Musisz wyświetlać kształt w izolacji, tzn. Wypełniony bryłą, nie gładzony i na wypełnionym bryłą tle.
code-golf - Wygrywa najkrótszy program w bajtach.
code-golf
graphical-output
geometry
darrylyeo
źródło
źródło
r
być wyrażony w pikselach, czy tylko w jakimś współczynniku skalowania?Odpowiedzi:
JavaScript + HTML,
164158 + 13 = 171 bajtówNie wiem, dlaczego tak chętnie odpowiadam na te wyzwania rysowania matematyki
<canvas>
...źródło
Love2D, 320 bajtów.
Prawdopodobnie nie jest to optymalne rozwiązanie, wykorzystuje szablony Love2D, ustawiając 3 koła i wypełniając je tam, gdzie się przecinają.
Zadzwoń za pomocą wiersza polecenia, np
love tri.love 256
Przykładowy wynik
źródło
Python 2 , 111 bajtów
źródło
Mathematica
10110098 bajtówPrzyjmując inne podejście niż @MichaelSeifert i prawdopodobnie interpretując to nieco bardziej dosłownie w odniesieniu do klauzuli pikselowej:
Przykład użycia:
10 pikseli
50 pikseli
100 pikseli
Zapisano bajt dzięki @MartinEnder (notacja infix) i kolejne 2 bajty, definiując d.
źródło
PHP + SVG, 165 bajtów
Przykładowe dane wyjściowe dla wejścia 128
źródło
PostScript,
968685757372 bajtyPobiera dane wejściowe jako wartość na stosie.
^^
i^@
reprezentują dosłowne znaki kontrolne.(^@^^Z<^@Z<)
to ciąg znaków o punktach kodowych odpowiednio 0, 30, 90, 60, 0, 90 i 60. Są one następnie interpretowane jako kąty w stopniach, ponieważ oczywiście do tego służą punkty kodowe.Zapisano 10 bajtów, ponieważ
closepath
nie jest potrzebne (obaclip
ifill
niejawnie zamykają ścieżkę).Zapisano 1 bajt, używając
repeat
zamiast definiować funkcję.Zaoszczędzono 10 bajtów, przechodząc na zupełnie inne podejście.
Zaoszczędzono 2 bajty, wykonując sztuczki ze stosem.
Zapisano 1 bajt, używając
0 1 2{}for
zamiast3{}repeat
.źródło
Mathematica,
134131 bajtówUwaga rozwiązanie to nie jest już ważny, ponieważ kwestia później edytowane wymagają R być mierzony w pikselach. Dzięki Martinowi Enderowi za pomoc w wygoleniu kilku bajtów w komentarzach.
Aby ten kod działał, wartość wejściowa musi być skalowana między 0 a 1. Zauważ, że prawie jedna czwarta tego kodu jest wymagana do wyświetlenia kształtu „w izolacji”, ponieważ nie jest to ustawienie domyślne Mathematica.
źródło
r Exp[2 I Pi n/3]
możnaExp[2I n/3Pi]r
zaoszczędzić trochę miejsca. I to zazwyczaj krócej napisać nienazwany funkcję, tj upuśćr=Input[];
, wymienićr
z#
i dołączania&
.BBC BASIC, 58 bajtów
Pobierz tłumacza na http://www.bbcbasic.co.uk/bbcwin/download.html
Nie golfił
źródło
TeX / TikZ,
128121112 bajtówKod jest na podstawie tej odpowiedzi na TeX.se .
TeX jest oparty na wektorze, więc nie robi pikseli. Promień to liczba zmiennoprzecinkowa z maksimum około 15, zanim dotrze do krawędzi strony. Nie jest tak naprawdę zbudowany dla wprowadzania z wiersza poleceń, więc należy go uruchomić jako
gdzie powyższy kod jest zapisany w
rt.tex
źródło
.tex
;\footline{}
jest tak dobry jak\nopagenumbers
; użyj~
jako nazwy zmiennej zamiast\i
. Aby spełnić wymóg „piksela”, możesz użyć\r sp
; 1sp jest swego rodzaju ekwiwalentem piksela dla TeXa, ponieważ jest to najlepsza lokalizacja, jaką może zarządzać TeX (choć nie wiem, czy dotyczy to tikz).sp
ale myślę, żept
to dobry pomysł. Wszystkie inne pomysły zadziałały (niektóre wydawały się nie w moich testach). Dziękuję~
aby zapisać jeszcze jeden bajt.\input tikz\footline{}\tikz\draw[draw=none,fill=red](0,1)\foreach~in{1,2,3}{[rotate=~*120]arc(0:60:\r sp)};\bye
pracuje dla mnie. Spróbujpdftex "\def\r{2000000} \input rt.tex"
- przy 2sp znalezienie kształtu byłoby trudne, biorąc pod uwagę jego niewielki rozmiar.GLSL,
298229 znakówWypróbuj tutaj
Premia
r
zmiennąźródło
JavaScript (ES6) + HTML, 196 + 13 = 209 bajtów
Stosuje podejście oparte na ścieżce zamiast podejścia wypełniania pikseli.
Pokaż fragment kodu
źródło
Logo, 53 bajty
używa
filled
polecenia do wypełnienia kształtu kolorem 0 (czarny.) Kod w zewnętrznych nawiasach kwadratowych jest wykonywany bez narysowania żadnej linii, ale Logo śledzi ruchy żółwia i wypełnia kształt po wyjściu z nawiasu.Logo,
6461 bajtówPióro w dół, narysuj łuk 60 stopni z żółwiem na środku, Pióro w górę, przesuń pióro do początku łuku, obróć o 120 stopni
Powtórz 3 razy, a następnie przejdź do kształtu i wypełnij go.
Spróbuj na http://turtleacademy.com/playground/en
Zadzwoń jak
cs ht t 100
(wyczyść ekran, ukryj żółwia,t
przy r = 100).źródło
MATL , 35 bajtów
To tworzy plik o nazwie
image.png
. W przypadku danych wejściowychr
rozmiar obrazu wynosi2*r+1
, a szerokość trójkąta jest zgodna zr
wymaganiami.Wypróbuj w MATL Online! Tłumacz online automatycznie otwiera utworzony plik i wyświetla obraz z dowolnym skalowaniem; kliknij na nią, aby uzyskać wersję w rzeczywistym rozmiarze.
Alternatywnie, oto dwa przykładowe dane wyjściowe kompilatora offline działającego na Matlabie, z danymi wejściowymi
50
i100
. Ostatnia część kodu0YG
została zastąpiona przez,IYG
dzięki czemu cyfra jest wyświetlana bezpośrednio (w odpowiednim rozmiarze) zamiast zapisywana w pliku.Wyjaśnienie
źródło
JavaScript (ES6) + SVG (HTML5), 28 + 102 = 130 bajtów
Liczba bajtów wyklucza kod potrzebny do wygodnego wprowadzania danych przez użytkownika o pożądanym rozmiarze.
źródło
n=>s.style.width=n
działałby również.MetaPost (
242226 bajtów)Możliwe, że można to nieco zmniejszyć, jestem nowy w metapost.
źródło
len * dir
i kropkę na końcu?k,
14110098 bajtówDane wejściowe są pobierane
stdin
, dane wyjściowe mają formatstderr
(lub wstdin
zależności od interpretera)pgm
. Na przykład:Wyjaśnienie:
źródło
05AB1E , 66 bajtów
Nie można użyć TIO, ponieważ otwiera okno i rysuje tam trójkąt Reuleaux.
Pyta o dane wejściowe, a następnie otwiera okno żółwia Python rysujące trójkąt.
Odpowiedź Jonathana Allana dała mi inspirację do zrobienia tego, chociaż nieco zmieniłem jego kod.
Zasadniczo jest to połączenie możliwości kompresji 05AB1E i łatwości Pythona w grafice żółwia.
źródło
OpenSCAD , 91 bajtów
Nie jestem pewien, jak to koszerne, ponieważ piksele nie są tak naprawdę dobrze zdefiniowaną jednostką w żadnym znanym mi formacie siatki. Zamiast tego moduł
t
rysuje trójkąt reuleaux o danym promieniur
we wszystkich używanych jednostkach natywnych.Przykładowe wyniki podglądu dla
t(100)
:źródło
SmileBASIC,
8786858382817978777675 bajtówNie golfowany:
źródło