Celem tego kodu golfa jest narysowanie regularnego wielokąta (o tej samej długości boków), biorąc pod uwagę liczbę boków i promień (odległość od środka do wierzchołka).
- Liczbę boków i promień można wprowadzić za pomocą pliku, STDIN lub zwykłej starej zmiennej. Używaj tego, co jest krótsze w twoim języku.
- -25% wszystkich znaków / bajtów, jeśli obraz jest rysowany zamiast grafiki ASCII.
Odpowiedzi:
LOGO 37 - 25% = 27,75 (ze zmiennymi)
LOGO 49 - 25% = 36,75 (jako funkcja)
Trójkąt
Wywoływany ze zmiennymi
Używany jako funkcja
P 100 3
Plac
Wywoływany ze zmiennymi
Używany jako funkcja
P 100 4
Pięciokąt
Wywoływany ze zmiennymi
Używany jako funkcja
P 100 5
Dekagon
Wywoływany ze zmiennymi
Używany jako funkcja
P 100 10
okrąg
Wywoływany ze zmiennymi
Używany jako funkcja
P 100 360
źródło
Mathematica, 40–25% = 30
źródło
Graphics
.Graphics@RegularPolygon
niedozwolone?Java 8:
533322 - 25% = 241,5Cóż, to Java: / Po prostu rysuje linie, punkt do punktu. Powinien działać dla dowolnego wielokąta o dowolnym rozmiarze. Wytnij trochę z oryginalnego rozmiaru. Ogromne uznanie dla Vulcan (w komentarzach) za lekcję golfa.
Podziały wierszy:
Dane wejściowe to argumenty [promień] [strony]:
Wydajność:
źródło
java.awt.image.*
zamiastjava.awt.image.BufferedImage
Short.valueOf
zamiast,Integer.valueOf
aby zapisać cztery bajty, ponieważ dane wejściowe nigdy nie powinny przekraczać zakresu zwarć. 2)y[]=x.clone()
oszczędza jeden bajty[]=new int[s]
. 3) Użyj przestarzałegof.show();
zamiast,f.setVisible(1>0);
aby zapisać dodatkowe dziewięć bajtów. 4) Użyj6.28
zamiastMath.PI*2
, ponieważ oszacowanie jest wystarczająco dokładne do tego celu, oszczędzając trzy bajty. 5) ZadeklarujGraphics g
zamiastGraphics2D g
przy tworzeniu wystąpienia grafiki, aby zapisać dwa bajty.BufferedImage
iGraphics
całkowicie i po prostu rzuca wszystkopaint()
). Zmieniło kolor obrazu, choć nadal wygląda dobrze IMO. Dzięki, żeFrame
zmienną lokalną, usuwającd
liczbę całkowitą i używając / nadużywając pętli for do zapisania kilku znaków, głównie średników. Oto wersja z białymi spacjami .drawPolygon
zamiastdrawLine
. Wersja spacji .TeX / TikZ (60 - 80,25)
Plik
polygon.tex
:(80 bajtów)
Promień i liczba boków są podane jako zmienne / makra
\r
i\n
. Dla promienia można podać dowolną jednostkę TeX. Bez jednostkicm
używana jest jednostka domyślna . Przykłady:(16 bajtów bez wartości)
Jeśli numer strony powinien zostać pominięty, można to zrobić przez
(11 bajtów)
Przykłady generowania plików PDF:
Wynik:
Nie jest jasne, co trzeba liczyć. Zakres punktacji wynosiłby:
Kod podstawowy to 80 bajtów minus 25% = 60
Lub wszystkie włącznie (definicje zmiennych wejściowych, brak numeru strony): (80 + 16 + 11) minus 25% = 80,25
Jeśli połączenie między pierwszym a ostatnim punktem nie musi być gładkie,
--cycle
można je usunąć, oszczędzając 7 bajtów.źródło
Geogebra , 42–25 % = 31,5 bajtów
Jeśli policzysz znaki zamiast bajtów, będzie to 41 - 25% = 30,75 znaków.
(To znaczy, jeśli uważasz Geogebra za język ...)
Zakłada, że promień jest przechowywany w zmiennej,
r
a liczba stron jest przechowywana w zmiennejs
.Wykorzystuje to twierdzenie cosinus c 2 = a 2 + b 2 - 2 ab cos C do obliczenia długości boku z podanego promienia.
Przykładowe dane wyjściowe dla
s
= 7,r
= 5źródło
C:
229180(r jest promieniem koła)
Uruchom w terminalu ANSI
Edytować:
skompilować:
źródło
#include
s. Ponadto możesz zadeklarowaćv
jako globalny na zewnątrzmain
i zadeklarowaću
jako parametrmain
, wtedy nie potrzebujeszint
(tjv;main(u){//...
.). Na koniec możesz zmienić ostatniąfor
pętlę nafor(j=0;j<s;)/*...*/x=j++-s/2.,//...
C, 359 znaków
Moja pierwsza próba gry w golfa. Przynajmniej wyprzedza rozwiązanie Java ;-)
bez golfa:
Jest to jedyny program, który wyświetla wielokąt w ASCII zamiast go rysować. Z powodu tego i niektórych problemów z zaokrąglaniem zmiennoprzecinkowym wynik nie wygląda szczególnie ładnie (znaki ASCII nie są tak wysokie jak szerokość).
źródło
int
można usunąć, ponieważ zakłada się, żeint
jest to kompilator. Ponadto ostatniafor
pętla może zostać zmieniona nafor(j=0;j<r;){x=p+u*j;y=q+z*j++;//...
if(i<0)
Można zmienić naif(i)
. Co jest nadal potrzebne tylko w jednej iteracji, ale nie udało się znaleźć skutecznego sposobu na usunięcie go :(Mathematica, 54 * 75% = 40,5
Nie sądzę nawet, żeby istniała wersja bez golfisty. Zawierałby tylko więcej białych znaków.
Oczekuje promienia w zmiennej
r
i liczby boków w zmiennejn
. Promień jest nieco pozbawiony znaczenia bez wyświetlania osi, ponieważ Mathematica skaluje wszystkie obrazy, aby pasowały.Przykładowe użycie:
źródło
Graphics@Polygon@Array[r{Sin@#,Cos@#}&,n+1,{0,2π}]
Array
.HTML / JavaScript:
215–25% = 161,25,212–25% = 159Wersja bez golfa:
źródło
i=S=5;
ifor(;i-->0;)
.i-->0
część? To jest tak samo jaki-- > 0
. Niektórzy nazywają to również operatorem strzałek lub idzie do operatora ;)c=document.currentScript.parentNode;
i zastąpienie<canvas>
przez<canvas id="c">
Postscript 156 - 25% = 117
Podaj promień, liczbę boków i punkt środkowy linii poleceń
lub dołącz do źródła
Przetłumacz na środek, skaluj do promienia, przejdź do (1,0); następnie powtórz n razy: obróć o 360 / n, narysuj linię do (1,0); narysuj ostatnią linię, obrysuj i wyślij stronę.
źródło
Szałwia , 44 - 25% = 33
Zakłada, że liczba stron jest przechowywana w
s
zmiennej, a promień jest przechowywany wr
zmiennej.Przykładowe dane wyjściowe:
s
= 5,r
= 3s
= 5,r
= 6s
= 12,r
= 5źródło
regular_polygon
funkcja zawsze generuje wielokąty z pierwszym wierzchołkiem przy (0,1). Rozwiązaniem byłoby nie pokazywanie osi z dodatkowymi 7 bajtami (,axes=0
pofigsize=r
)bc + ImageMagick + xview + bash, 104,25 (139 bajtów - 25%)
To wyzwanie byłoby niepełne bez odpowiedzi ImageMagick ...
Na przykład
./polygon.sh 8 100
tworzy ten obraz:źródło
JavaScript 584 (867 bez golfa)
Ten kod używa N złożonych pierwiastków jedności i tłumaczy kąty na punkty X, Y. Następnie początek jest przenoszony na środek płótna.
Grał w golfa
Przykładowe dane wyjściowe:
Nie golfił
Ten kod wymaga elementu płótna HTML5, c jest obiektem płótna, r jest promieniem, a n jest liczbą boków.
źródło
PHP 140-25% = 105
Zakłada dwie predefiniowane zmienne:
$p
liczbę punktów i$r
promień w pikselach. Alternatywnie możnalist(,$r,$p)=$argv;
zamiast tego użyć argumentów wiersza poleceń i użyć ich. Wyjście będzie png, które powinno być potokowane do pliku.Wydajność
$r=100; $p=5;
$r=100; $p=6;
$r=100; $p=7;
$r=100; $p=50;
źródło
TI-80 BASIC, 25 bajtów - 25% = 18,75
Zakłada, że wszystkie ustawienia są ustawione na wartości domyślne. Uruchom program jak
5:PRGM_POLYGON
(dla pięciokąta)Działa poprzez narysowanie koła z bardzo małą liczbą kroków. Na przykład pięciokąt ma stopnie 2π / 5 radianów.
Ustawienia okna są wystarczająco dobre
TMIN
iTMAX
są ustawione na0
i2π
, więc wszystko, co musimy zmienić, toTSTEP
.źródło
SmileBASIC 3,
183159 - 25% = 119,25 bajtówBierze boki i promień
INPUT
, oblicza i przechowuje punkty, a następnie rysuje je za pomocąGLINE
.Wydaje mi się, że może to być krótsze, ale jest jak pierwsza w nocy, cokolwiek.Zakłada czyste i domyślne środowisko wyświetlania, więc może być konieczneACLS
podczas uruchamiania go z DIRECT.źródło
OpenSCAD: 31 mniej 25% = 23,25
Pierwszy post tutaj! Wiem, że spóźniłem się na przyjęcie, ale na początku wydawało mi się, że to równie dobre pytanie. Zadzwoń za pomocą
p(n,r)
.źródło
ActionScript 1, Flash Player 6: 92 - 25% = 69
źródło
C # w LINQPAD
Podziękowania dla części matematycznej należą do Geobits (mam nadzieję, że nie masz nic przeciwko!) Z odpowiedzią Java. Jestem beznadziejna z matematyki :)
Zrobiłem to w LINQPAD, ponieważ ma wbudowane okno wyjściowe. W zasadzie możesz przeciągnąć i upuścić w nim następujące elementy, a to narysuje wielokąt. Po prostu zmień go na „Program C #” i zaimportuj bibliotekę System.Drawing do właściwości zapytania.
źródło
Matlab 58 bajtów - 25% = 43,5
Nie widziałem rozwiązania Matlab, więc oto jedno, które jest dość proste:
Możesz zgolić niektóre bajty, jeśli r i n są już w obszarze roboczym.
Przykładowe wywołanie:
źródło
Python 2, 222 bajty
Sprawdza, czy piksel znajduje się po wewnętrznej stronie wszystkich hiperpłaszczyzn (linii) wielokąta. Promień jest dotknięty, ponieważ faktycznie używany jest apothem.
źródło
Mathematica 27 (= 36 - 25%)
Kiedy przesyłamy kod Mathematica, często zapominamy o nowych funkcjach, które wciąż są wbudowywane w język, a obecne słownictwo językowe gromadzi około 5000 podstawowych funkcji . Duże i rozwijające się słownictwo językowe jest bardzo przydatne podczas gry w golfa. CirclePoints zostały wprowadzone w aktualnej wersji 11.X. Konkretnym przykładem 7-stronnego promienia 5 jest:
Musisz także wprowadzić parametr kąta, aby kontrolować orientację wielokąta:
źródło
Python 2, 74 bajty - 25% = 55,5
Dane wejściowe są w zmiennych
r,n
. Jeśli zostanie uwzględniony w liczniku, będzie tor,n=input()
o 12 bajtów więcej.Wypróbuj online - (używa innego kodu, ponieważ
exec
nie jest zaimplementowany w tłumaczu online)źródło
SmileBASIC,
8575–25 % = 56,25 bajtówZmienne S i R są używane jako dane wejściowe.
Wyjaśnił:
Boki są rysowane przy użyciu koloru
-I
, który zwykle jest bliski -1 (i biały HFFFFFFFF) (z wyjątkiem sytuacji, gdyI
ma wartość 0, gdy jest przezroczysty).Możesz również narysować wypełniony wielokąt za pomocą
GTRI N,M,X,Y,R,R,-I
zamiastGLINE...
źródło
Tikz, 199 bajtów
To rozwiązanie wykorzystuje bibliotekę tikz
shapes.geometric
.Oto jak wygląda wielokąt o
5
bokach i promieniu,8in
gdy oglądany jest w evince .źródło