Zadanie
Jest to dość proste zadanie kodowania, wszystko, co Twój program musi zrobić, to umieścić punkt na kanwie (lub alternatywę w innym języku kodowania) i połączyć go ze wszystkimi już umieszczonymi kropkami. Twój program musi przyjąć jedno wejście, liczbę kropek, które powinny zostać umieszczone, i wyświetlać jakiś ekran z podłączonymi kropkami. Przykład
Wymagania
- Muszę być w stanie go uruchomić, co oznacza, że musi mieć kompilator / narzędzie do uruchomienia go online lub publicznie dostępne do pobrania.
- Dozwolone jest korzystanie z dowolnej biblioteki utworzonej przed ustawieniem tego wyzwania, o ile nie zostało ono zaprojektowane wyłącznie w celu jego rozwiązania.
- Jest to najkrótsze zadanie kodu, które oznacza znaki. Komentarze, kod zmieniający kolor (dla ładności) i biblioteki będą ignorowane.
- Twoja odpowiedź musi być unikalna, nie kradnij kodu innych ludzi, skróć go o kilka znaków i opublikuj ponownie.
- Musi być w stanie uruchomić się w czasie krótszym niż 5 minut, dla wartości 5 i 100. Musi także użyć rozdzielczości co najmniej 200 * 200 i umieścić każdą kropkę w losowym miejscu na kanwie, stosując nie-trywialny rozkład.
Aktualny ranking
Flawr - Matlab - 22 - Confirmed
Falko - Python 2 - 41 - Confirmed
Wyldstallyns - NetLogo - 51 - Confirmed
Ssdecontrol - R - 66 - Confirmed
David - Mathematica - 95 - Confirmed
ILoveQBasic - QBasic - 130 - Confirmed
Adriweb - TI-Nspire Lua - 145 - Confirmed
Manatwork - Bash - 148 - Confirmed
Doorknob - Python 2 - 158 - Confirmed
Kevin - TCL - 161 - Confirmed
M L - HPPPL - 231 - Confirmed
Manatwork - HTML/JS - 261 - Confirmed - Improved code of Scrblnrd3
Makando - C# - 278 - Confirmed
Scrblnrd3 - HTML/JS - 281 - Confirmed
Geobits - Java - 282 - Confirmed
Jeśli cię przegapiłem, bardzo mi przykro, po prostu dodaj komentarz do swojej pracy, a dodam go, jak tylko go zobaczę =)
TL; DR
- Wejście - liczba kropek (int, może być zakodowana na stałe)
- Wyjście - obraz losowo rozmieszczonych kropek, wszystkie połączone ze sobą (grafika)
- Zwycięzca - najkrótszy kod
Odpowiedzi:
Matlab (22)
Zakłada się, że n jest liczbą punktów i wygląda tak dla n = 10:
n=6
:Wyjaśnienie
gplot
to polecenie do drukowania wykresów. Pierwszym argumentem jestn x n
macierz częstości występowania (oczywiście pełna). Drugi argument powinien byćn x 2
macierzą ze współrzędnymi punktów, ale nie ma znaczenia, czy drugi wymiar jest większy niż 2, więc po prostu generujęn x n
macierz losowych wartości (która jest o 2 znaki krótsza niż generowanien x 2
macierzy).Linki do dokumentacji
źródło
Java:
318 282265Ponieważ, wiesz, Java:
To tylko prosta pętla, która tworzy losowe kropki i rysuje linie między bieżącą kropką a wszystkimi poprzednimi.
Przykład z 25 kropkami:
Z podziałami linii i importem:
Edycja: Ponieważ nie liczymy importów, zaimportowałem jeszcze kilka rzeczy, aby później zapisać niektóre postacie.
Edycja 2: OP dodał limit ustalonej liczby kropek. -17 znaków :)
źródło
Python
2-4135Po zaimportowaniu niektórych bibliotek dozwolonych dla tego wyzwania
możemy wykreślić pewną liczbę połączonych punktów za pomocą tylko jednej linii kodu:
(Zrzut ekranu został wygenerowany z 10 punktami.)
źródło
import
stwierdzenia w normalnym kodzie golfowym.Mathematica
9587Z pewną pomocą Belizariusza.
n = 5
n = 100
Czas: 2.082654 sec
źródło
CompleteGraph[100, VertexCoordinates -> RandomReal[{0, 199}, {100, 2}]]
100
było konieczne iInput[]
było opcjonalne.Python 2, 158
Instrukcje importu nieuwzględnione w liczbie znaków, jak wspomniano w pytaniu („biblioteki zostaną zignorowane”).
Przykładowe wyniki:
n = 2 (...):
n = 10 (wygląda jak fantazyjna rzecz 3D lub coś takiego):
n = 100 (wygląda na to, że ktoś poszedł BLELEEEAARARGHHH z czerwonym długopisem):
n = 500, 1000, 10000 (uruchamia się odpowiednio w około 1,5 sekundy, 5-6 sekund i 3,5 minuty):
Uwaga: 10000 punktów jeden uruchomiono z nieco zoptymalizowaną wersją, która zmieniła wiersz 3 (nie uwzględniając importu) na to:
W przeciwnym razie zajęłoby to wieczność. : P
Nie golfowany:
źródło
x=255
i używając go, aby zastąpić wystąpienia200
i255
.R, 66
To oszustwo graniczne, ale nadal uważam, że jest zgodne z zasadami. Skonfiguruj, ładując
igraph
pakiet za pomocąlibrary(igraph)
, który można pobrać z CRAN za pomocąinstall.packages("igraph")
. Następnie przypisz dane wejściowe do zmiennejN
. Zgodnie z zasadami nie są one liczone w sumie.N = 50
Zauważ, że ten kod rysuje również połączenia własne. Wyeliminowanie ich (choć nie ma wobec nich żadnej reguły) dodaje 6 znaków:
R 141
To jest rozwiązanie uczciwe w stosunku do dobra w bazie R:
chociaż nadal musisz wejść
N
ręcznie.N = 50
Zastanawiam się, czy w
for
pętli byłoby mniej znaków,apply
ale jestem zadowolony z tego, co mam.źródło
,"un"
na końcu pierwszej linii.QBasic lub QuickBasic, 130 znaków
Odmiany kodu
RANDOMIZE
zRANDOMIZE TIMER
.N=10
zINPUT N
lubINPUT "N";N
.Przykładowe przebiegi
Dla
N=5
, testowane z QBasic 1.1 działa na DOSBox 0.74:Dla
N=100
, testowane z QBasic 1.1 działa na DOSBox 0.74:źródło
Bash + ImageMagick: 148 znaków
Przykładowy przebieg:
Przykładowe dane wyjściowe:
Przykładowy przebieg:
Przykładowe dane wyjściowe:
Przykładowy przebieg:
Przykładowe dane wyjściowe:
źródło
TCL 161 znaków
Najwyraźniej nie wygra, ale pokonuje kilka innych zaprezentowanych tutaj i myślę, że dobrze wykorzystuje bardzo niedoceniany język.
Domyślny rozmiar płótna w moim systemie to 291 x 204. Nie jestem pewien, dlaczego, ale użycie go oszczędza 13 znaków.
Dość szybko, 400 punktów w <5 sekund, 500 w ~ 10 sekund. Rozmiar i punkty można dowolnie skalować, a kolory i style linii można zmieniać, oczywiście kosztem znaków. Nie gra w golfa i używa zmiennych, aby uczynić go bardziej przejrzystym i łatwiejszym do skalowania i kolorowania
źródło
[TI-Nspire] Lua -
145135130(Zaktualizowana stała wersja)
„Importowanie” pliku matematycznego.Random jako „r”, po pierwsze, jak dozwolone:
r=math.random
Rzeczywisty kod:
Uwaga: ten kod działa na kalkulatorach TI-Nspire (TI dodało skrypty Lua do najnowszych systemów operacyjnych tej platformy, z opartym na parzystości interfejsem API umożliwiającym użytkownikom tworzenie wykresów itp.).
Można go również wypróbować online tutaj (wystarczy usunąć skrypt demo i
n=10
na przykład dodaj mój )źródło
Formularze C # Windows, 268
N = 5
N = 50
Pełny kod podano poniżej
źródło
Pens.Tan
zamiastnew Pen(Color.Tan)
?HTML / JS, 210, dzięki manatwork
JSFiddle
źródło
~~
zamiastm.floor
zaoszczędzić 5 bajtówcanvas
tag samozamykające i usunąć apostrofów wokółid
wartości:<canvas id=q />
. (Pamiętaj, że musisz zostawić jedną spację między ostatnią wartością atrybutu a samozamykaniem/
.) BTW, w Firefox działa dobrze bezm.floor()
i~~
.C # WPF
306296Chciałbym powiedzieć, że mogę usunąć Stroke = Brushed.Red. Ale niestety oznacza to, że maluję przezroczyste linie, i zgaduję, że tak naprawdę to się nie liczy. : PI może również ogolić kilka bajtów, po prostu tworząc siatkę w widoku XAML. Ale to wydawało się niesprawiedliwe, więc rozebrałem XAML, by stać się pustym płótnem. (Nie liczę XAML jako bajtów ...)
XAML
5
100
źródło
var
przy deklarowaniu zmiennych.HPPPL,
231220(Język programowania HP Prime dla kalkulatora graficznego HP Prime)
grałem w golfa. 11 znaków mniej, rysując wszystkie możliwe nowe linie zaraz po każdym utworzeniu nowego punktu. Tylko dwie zagnieżdżone pętle zamiast poprzednich trzech.
Niegolfowany (270 znaków):
przykłady:
c (10)
c (30)
Kalkulator graficzny HP Prime ma kolorowy wyświetlacz 320 x 240 pikseli.
Emulator współpracujący również z zestawem łączności jest dostępny na stronie internetowej HP lub tutaj: http://www.hp-prime.de/en/category/6-downloads
... wciąż czeka na przybycie sprzętu. Aktualizacja czasu wykonania nastąpi.
Dzisiaj przyjechał mój HP Prime. Oto czas wykonania dla n = 100 na rzeczywistym kalkulatorze:
Około 0,65 s dla n = 100.
Emulator działa około 4 razy szybciej (około 0,178 s) na moim laptopie Core i5 2410M.
źródło
NetLogo, 51 bajtów
W razie potrzeby zamień cyfry 9 na inne stałe lub zmienne.
źródło