Narysuj linie między każdą parą odrębnych punktów dla n
punktów ułożonych w okrąg, tworząc coś takiego jak poniższy wynik. Najkrótszy kod (w bajtach) wygrywa! Twoje linie nie muszą być przezroczyste, ale tak wygląda lepiej. Wynik musi być grafiką wektorową lub obrazem o wymiarach co najmniej 600 na 600 pikseli (zapisanym w pliku lub wyświetlonym na ekranie). Aby ukończyć wyzwanie, musisz wylosować co najmniej 20.
code-golf
kolmogorov-complexity
graphical-output
J. Antonio Perez
źródło
źródło
n
i narysować linie dlan
punktów.n
znacznie zwiększyłaby to wyzwanie, ponieważ spodziewam się, że większość rozwiązań i tak będzie działać z dowolną liczbą, zwłaszcza, że 37 jest nieparzysta i dlatego nie ma lustrzanych symetrii.n
jako wkład, czy po prostu wybieramy dowolną zn
ponad 20?Odpowiedzi:
Mathematica, 13 bajtów
Wygląda na to, że nie zapewnia to tylko okrągłego osadzenia
n=4
, ale pytanie brzmin>=20
źródło
n
(miałem gotową odpowiedź z ustalonego 37) :(MATL ,
1614 bajtówPonieważ nie jestem zbyt biegły w posługiwaniu się MATLem, spodziewam się, że jest to coś bardziej golfowego. (Byłoby miło pokonać Mathematica :-) Tzn. Przewrócenie
w
nie jest optymalne, prawdopodobnie można tego uniknąć ...Przetestuj online! (Dzięki @Suever za tę usługę, dzięki @DrMcMoylex za -2 bajty.)
Objaśnienie (dla
N=3
):Warto zauważyć, że do generowania N-tych korzeni jedności można użyć wzoru
exp(2*pi*i*k/N)
nak=1,2,3,...,N
. Ale skoroexp(pi*i/2) = i
możesz także pisać,i^(4*k/N)
ok=1,2,3,...,N
co właśnie tutaj robię.źródło
XH:H
na:G
G
bardzo dziękuję!PICO-8 , 131 bajtów
Nie byłam do końca pewna, czy będę łamać jakieś zasady, ale i tak to zrobiłam!
Grał w golfa
Bez golfa
PICO-8 to oparta na Lua konsola fantasy z natywną rozdzielczością 128x128. Zrobiłem koło tak duże, jak tylko mogłem ...
źródło
Mathematica, 42 bajty
Tworzy zestaw 37 punktów ułożonych w okrąg, a następnie rysuje linie między wszystkimi możliwymi podzbiorami dwóch punktów. Ktoś opublikował krótszą odpowiedź, która korzysta z CompleteGraph, ale uważam, że jest to najkrótsza odpowiedź oprócz tych, którzy polegają na CompleteGraph.
źródło
Tuple
. Musisz także zaktualizować to, aby zaakceptować dowolnen
, ale wygodnie to nie kosztuje żadnych bajtów.Tuples
HTML + JS (ES6), 34 +
177164162 = 196 bajtówKorzystanie z interfejsu API HTML5 Canvas .
Zobacz na CodePen .
-13 bajtów : Usunięto
closePath()
, przeniesiono dostroke()
środkabeginPath()
-2 bajty : zdefiniowana zmienna
a
wewnątrzrotate()
źródło
Java,
346338322301 bajtówTo rozwiązanie działa na wszystkich
n>1
, nawet jeśli oryginalny post tego nie wymagał, to działa.Moim ulubionym jest
n=5
, nie pytaj dlaczego, a także, jeśli chcesz mieć fajniejszy GUI, użyj:int a=Math.min(this.getHeight(),this.getWidth())/2;
Zamiast zakodowanego na stałe 300, użyje szerokości lub wysokości ramy jako średnicy.
Zaoszczędź 8 bajtów dzięki Shooqie. Zaoszczędzono 21 bajtów dzięki Geobits.
Dane wyjściowe dla
n=37
:źródło
Frame x=
ifinal
(tak myślę?)Frame x
pochodzi z innego rozwiązania, które dotyczyło wątku. Potrzebny jest jednak ostatni, ponieważ jest to wewnętrzne odwołanie do zmiennej zewnętrznej w klasie będącej właścicielem.int
deklaracje pozafor
pętlePython 2,
258235229 bajtówWyjście dla
n=37
źródło
from PIL import*
krótszy?import *
, w zależności od sposobu instalacji, pominąć PIL i zaimportować bezpośrednio Image / ImageDrawOktawa,
8869 bajtówDane wyjściowe dla
N=37
:Dane wyjściowe dla
N=19
:źródło
gplot
też była , ale nie udało mi się wystarczająco krótko ...Perl, 229 bajtów
Wykorzystuje tę samą formułę, co większość języków, które nie mają wygodnego wbudowanego rozwiązania dla tego wyzwania (nawet jeśli nie patrzyłem na nie, aby je znaleźć, ale jest to dość łatwa do znalezienia formuła). To niezbyt interesujące, ale zwykle nie ma zbyt wielu odpowiedzi Perla na tego rodzaju wyzwania, więc chciałem tylko zaproponować jedno.
Będziesz potrzebował
-MImager
(9 bajtów),-MMath::Trig
(zapewniającpi
13 bajtów) i-n
(1 bajt) ==> + 23 bajty.Aby uruchomić:
Utworzy plik o nazwie
t.png
zawierającej obraz.Musisz
Imager
jednak zainstalować , ale nie martw się, to dość proste:(
echo
S skonfigurują ci cpan, jeśli nigdy wcześniej go nie używałeś (tak naprawdę zadziała tylko wtedy, gdy twój perl jest wystarczająco nowy, myślę, że dla większości z was tak będzie i przepraszam za innych!)) .I bardziej czytelna wersja (tak, jest dość czytelna dla skryptu Perl!):
-1 bajt dzięki Tytusowi.
źródło
for
pętli, to tak, są one obowiązkowe.y2
. Założę się, że nie potrzebujesz tego. Czy możesz napisać do STDOUT?GeoGebra , 92 bajty
Każda linia jest osobno wprowadzana do paska wprowadzania. Oto gif przedstawiający wykonanie:
Jak to działa
polygon
Polecenie tworzy 20-stronny wielokąt z wierzchołków linii podstawowej w(0,0)
i(1,0)
. Następne polecenie iteruje następnie każdy wierzchołek wielokąta z indeksemi
, używając poleceńsequence
ivertex
, i dla każdego wierzchołka z indeksemi
rysuje segment linii do każdego innego wierzchołka z indeksemj
za pomocąsegment
polecenia.źródło
PHP,
186184196 bajtówzapisuje obraz do STDOUT
awaria
-12 bajtów na naprawę
n=20
Wymienić
$p=2*M_PI
z6
(-8),/=$argv[1]
z=M_PI/10
(-2), a$b>0
z$b
(-2)Używanie dokładnego PI / 10 nie boli. Z
.3142
pozostały błędy zaokrąglania z sparametryzowanej wersji, aleM_PI/10
zniknęły i mogę sprawdzić$b
(<> 0) zamiast$b>0
. Mógłbym zaoszczędzić dwa bajty.314
, ale to zrównoważyłoby punkty.Limit
$a<6
jest wystarczająco dokładny dla 20 punktów.174 bajty na naprawę
n=314
Użycie 314 punktów powoduje wypełnienie koła w tej rozdzielczości (podobnie jak 136 140, każda liczba parzysta powyżej i wszystko powyżej 317).
źródło
NetLogo - 44 bajty
źródło
R,
127123 bajtówProdukuje:
Ładne etykiety osi?
-4 bajty dzięki @Titus!
źródło
for(i in 2:n){for(j in 1:i)...}
. CzyR
wymaga aparatu ortodontycznego?BBC BASIC, 98 znaków ascii
Tokenizowany rozmiar pliku 86 bajtów
Pobierz tłumacza na http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
Nie ma nic złego w rysowaniu każdej linii dwa razy, wygląd jest identyczny :-P
Bez golfa
Wyjście n = 21
Wygląda to znacznie lepiej w oryginalnym renderowaniu niż w przeglądarce.
źródło
LINE
funkcji. BeatsDRAW
...Oktawa,
50 48 4645 bajtówJest to dowolna funkcja rysująca wykres, którego szukamy.
Wyjaśnienie:
(k=0:2*pi/N:N)+k'
Tworzy pełnąN+1 x N+1
macierz adjecencji i jednocześnie definiuje wektork
kątów, do którego wówczas używamy[cos(k);sin(k)]'
, macierz współrzędnych, w których umieszczony jest każdy węzeł wykresu.gplot
po prostu kreśli wykres, który chcemy.Dla
N = 29
otrzymujemy:źródło
JavaScript (ES5) / SVG (HTML5), 181 bajtów
Działa tylko dla liczb pierwszych, takich jak pierwotna sugestia 37. Możesz zmniejszyć o połowę (zaokrąglić w górę) wartość początkową,
i
aby uzyskać słabszy obraz. Możesz także konsekwentnie dostosowywać1e3,2e3
inne wartości do smaku (zacząłem od,300,600
ale zdecydowałem, że jest zbyt gruby).źródło
MATLAB, 36 bajtów
To anonimowa funkcja, która tworzy wykres.
Przykład:
źródło
graph
nie jest częścią bioinformatycznego zestawu narzędzi ... nawet nie wiedziałem, że istnieje ... Fajnie :)QBasic 4.5,
398271 bajtówEkran w QBasic może mieć tylko 640x480, więc promień koła ma tylko 230 px, niestety. Ponadto istnieje pewne artefaktowanie z powodu utraty precyzji zmiennoprzecinkowej. Wygląda to tak
N=36
:EDYCJA: Nie potrzebowałem pamięci, deklaracji typu i całej pętli. Obliczanie wszystkich Kartezjanów na podstawie biegunów jest o 50% tańsze pod względem liczby bajtów ...
źródło
QBIC ,
9894 bajtówPrzekształciłem
pierwotną odpowiedź QBasic@LevelRiverSt na QBIC. Myślałem, że byłoby to zbyt mocno oparte na funkcjach, które nie są wbudowane w QBIC, aby były wykonalne, ale jak się okazuje, oszczędza kolejne 90 bajtów. Zastąpienie parametruDRAW
forLINE
pozwala zaoszczędzić kolejne 80 bajtów. Wiedziałem, że zapomniałem czegoś prostego ...Po uruchomieniu z parametrem wiersza poleceń 36 wygląda następująco:
źródło
Przetwarzanie, 274 bajtów (239 +
size
wywołanie i wywołanie funkcji)Naprawdę nie wiem dlaczego, ale
setup
musiałem być na drugiej linii. Użyłem https://en.wikipedia.org/wiki/Rotation_matrix, aby pomóc mi obliczyć matematykę rotacji. Ten program oblicza punkty i wypycha je do tablicy, za pomocą której rysujemy linie.Oto zdjęcie wielokąta z 50 krawędziami (100 krawędzi było prawie całkowicie czarne)
Możesz dodać,
stroke(0,alpha);
aby mieć przezroczyste krawędzie, gdziealpha
jest krycie linii. Oto ten sam wielobok zalpha
od20
.źródło
Bash + Galaretka + GraphViz, 52 znaki, 52 lub 63 bajty
Biorąc pod uwagę, że omawiane programy nie zgadzają się co do tego, jakiego kodowania znaków użyć, program jest pełen znaków kontrolnych. Oto, jak to wygląda pod
xxd
kodowaniem Latin-1 (które reprezentuje każdy znak w jednym bajcie):Nie udało mi się jednak uruchomić programu bez przekonwertowania danych wejściowych na UTF-8 z jakiegoś powodu (co spowodowałoby, że miałyby one 63 bajty). Logicznie powinno to działać jako Latin-1 - żaden ze znaków nie jest poza zakresem od 0 do 255 - ale ciągle pojawiają się błędy „indeksu ciągu poza zakresem” bez względu na to, jak skonfiguruję zmienne środowiskowe kodowania znaków. Będzie to więc musiało być policzone jako 63 bajty, chyba że ktoś wymyśli sposób na uruchomienie go bez ponownego kodowania.
Program może być nieco bardziej czytelny, jeśli zinterpretujemy go w kodowaniu Jelly:
Program pobiera liczbę punktów na standardowym wejściu i wyświetla obraz PostScript na standardowym wyjściu. (Można go trywialnie dostosować do wyświetlania w dowolnym formacie obsługiwanym przez GraphViz, zmieniając
-Tps
na końcu; po prostu PostScript ma najkrótszą nazwę. Prawdopodobnie możesz zapisać pięć znaków, usuwając-Tps
, ale wtedy otrzymasz wynik w wewnętrznym formacie graficznym GraphViz że nic więcej nie obsługuje, co prawdopodobnie nie ma znaczenia dla celów pytania).Zasadniczo jest to tylko program Jelly, który wywołuje GraphViz, aby wykonać rysunek; jednak Jelly nie wydaje się mieć żadnych możliwości uruchamiania zewnętrznych programów, więc musiałem użyć bash, aby połączyć je ze sobą. (Oznacza to również, że tańsze jest ręczne wprowadzanie żądania Jelly ze standardowego wejścia; zwykle pobiera dane z wiersza poleceń, ale oznaczałoby to dodatkowe bajty w opakowaniu bash).
circo
Automatycznie ustawi wszystkie punkty, o które proszony jest o narysowanie w okręgu , więc kod Jelly musi tylko poprosić go o narysowanie listy punktów, z których wszystkie są ze sobą połączone. Oto jak to działa:Zastosowanie Jelly pozwala nam delikatnie skompresować ciąg, który konfiguruje wyjście GraphViz za pomocą wbudowanego słownika. Słownik ma
graph
,node
ipoint
. Irytujące, nie mashape
(maSHAPE
, ale GraphViz rozróżnia wielkość liter), więc musimy zakodować tę postać po znaku.Oto dane wyjściowe dla danych wejściowych 21 (z niewielką modyfikacją programu, aby uzyskać dane wyjściowe w formacie, który można przesłać do Stack Exchange):
źródło
PHP + HTML SVG,
316263 bajtówWersja golfowa z zakodowanymi
n
punktami i bezn
parametru wejściowego :Poprzednia wersja golfowa z parametrem wejściowym dla
n
punktów, 316 bajtów:Sposób użycia: zapisz w pliku i zadzwoń z przeglądarki:
Wersja bez golfa z parametrem wejściowym dla
n
punktów i CSS:Nie można dołączyć 32-punktowego w pełni funkcjonalnego fragmentu z powodu limitu 30 000 znaków dla jednego posta. Oto zrzut ekranu:
Dołączony fragment kodu jest ograniczony do 18 punktów ze względu na limit 30 000 pojedynczych wpisów.
Pokaż fragment kodu
źródło
R, 108 bajtów
Mógłbym ogolić 5 bajtów, gdybym pozbył się argumentu,
,as=1
który wymusza współczynnik proporcji wynoszący 1. Używaexpand.grid
do tworzenia macierzy ze wszystkimi możliwymi parami punktów i używaapply
do jej zapętlenia.R + igraph, 87 bajtów
Inne rozwiązanie wykorzystujące pakiet
igraph
.źródło