Najprostszym N-wymiarowym kształtem, jaki można stworzyć dla dowolnego wymiaru, jest Simplex i jest to zestaw punktów N + 1, które są w równej odległości od siebie.
Dla 2 wymiarów jest to trójkąt równoboczny, dla 3 wymiarów jest to zwykły czworościan, przy 4 wymiarach jest to 5 komórek i tak dalej.
Wyzwanie
Biorąc pod uwagę wymiar całkowity N jako dane wejściowe, wyślij tablicę / listę / stos / cokolwiek z N punktów wymiarowych, które reprezentują simpleks tego wymiaru. Oznacza to, że N + 1 wierzchołki są równe i niezerowa odległość od siebie.
Przykłady
1 -> [[0], [1]]
2 -> [[0, 0], [1, 0], [0.5, 0.866...]]
4 -> [[0, 0, 0, 0], [1, 0, 0, 0], [0.5, 0.866..., 0, 0], [0.5, 0.288..., 0.816..., 0], [0.5, 0.288..., 0.204..., 0.790...]]
Notatki
- Dane wejściowe są liczbą w dowolnym standardowym formacie i zawsze będą liczbami całkowitymi większymi niż 1 i mniejszymi niż 10
- Kodowanie jest dozwolone dla wejścia 1, ale nic wyższego.
- Rozsądny błąd jest dozwolony w danych wyjściowych. Problemy z arytmetyką zmiennoprzecinkową lub wyzwalaczem można zignorować.
- Dozwolona jest dowolna transformacja simpleksowego wymiaru N, pod warunkiem, że pozostaje ona regularna i niezerowa.
- Standardowe luki są zabronione.
- To jest golf golfowy , więc wygrywa najmniej bajtów.
code-golf
arithmetic
ATaco
źródło
źródło
Odpowiedzi:
Galaretka , 11 bajtów
Wypróbuj online!
Działa poprzez wygenerowanie macierzy tożsamości o rozmiarze N i powiązanie jej z listą wygenerowaną przez powtórzenie N razy singletonu √ (N + 1) + 1 , podzielone przez N .
źródło
Python
7866 bajtówZ pewnością można to poprawić,
szczególnie przy obsłudze n = 1 ''. (Jak to jest nawet simplex?)Właśnie zdałem sobie sprawę, że to nie jest konieczne. Prawdopodobnie można go jeszcze poprawić ^^Wypróbuj online!
[i*[0]+[1]+(n+~i)*[0]for i in range(n)]
tworzy matrycę tożsamości. Wszystkie punkty mają odległośćsqrt(2)
od siebie. (dzięki Rod za ulepszenie)Teraz potrzebujemy
n+1
-tego punktu o tej samej odległości od wszystkich innych punktów. Musimy wybrać(x, x, ... x)
.Odległość od
(1, 0, ... )
do(x, x, ... x)
jestsqrt((x-1)²+x²+...+x²)
. Jeśli chcemy sięn
wymiarową simplex to okazuje sięsqrt((x-1)²+(n-1)x²)
, jak mamy jeden1
in-1
0
S w pierwszym punkcie. Uprość trochę:sqrt(x²-2x+1+(n-1)x²) = sqrt(nx²-2x+1)
Chcemy, aby ta odległość była
sqrt(2)
.sqrt(2) = sqrt(nx²-2x+1)
2 = nx²-2x+1
0 = nx²-2x-1
0 = x²-2/n*x+1/n
Rozwiązanie tego równania kwadratowego (jedno rozwiązanie, drugie też działa dobrze):
x = 1/n+sqrt(1/n²+1/n) = 1/n+sqrt((n+1)/n²) = 1/n+sqrt(n+1)/n = (1+sqrt(n+1))/n
Umieść to na liście
n
razy, umieść tę listę na liście i dołącz do macierzy tożsamości.-4 Bajty dzięki Alexowi Vargie:
Pomnóż każdy wektor przez
n
. Zmienia to tworzenie macierzy tożsamości nalambda n:[i*[0]+[n]+(n+~i)*[0]
(tę samą długość) i pozbywa się podziałun
w dodatkowym punkcie, więc staje sięn*[1+(n+1)**.5]
, zapisując dwa nawiasy i/n
.źródło
Wolfram Language (Mathematica) , 46 bajtów
Wypróbuj online!
źródło
APL (Dyalog) ,
2018 bajtów1 bajt dzięki @ngn
Wypróbuj online!
źródło
(∘.=⍨⍳)
->∘.=⍨∘⍳
⌹
ale nie mogę do końca zrozumieć, jak to może działać ...{÷¯1+4○⍵*.5}⍪⍳∘.=⍳
JavaScript (ES7), 70 bajtów
Port odpowiedzi Python na @ PattuX.
źródło
Wolfram Language (Mathematica), 205 bajtów
Funkcja Simplex w Mathematica Począwszy od
{0,0,...]},{1,0,0,...]}
, Umieszczenie pierwszego punktu na początku, Drugi punkt nax
osi Trzeci punkt nax,y
płaszczyźnie, Czwarty punkt wx,y,z
przestrzeni itp. Postęp ten powoduje ponowne wykorzystanie wszystkich poprzednich punktów, dodając jeden nowy punkt na raz w nowym wymiarzeWeryfikacja
źródło
Oktawa , 31 bajtów
Zaoszczędzono 2 bajty dzięki Luisowi Mendo .
Wypróbuj online!
źródło
ones(1,n)
przez~~(1:n)
Rubinowy , 55 bajtów
zamiast zwracać podobne wielkości dla wszystkich wymiarów i używając wzoru
(1+(n+1)**0.5)/n
I skaluję w górę o współczynnik,n
aby uprościć wzór(1+(n+1)**0.5)
Wypróbuj online!
nie wziął udziału w programie testowym
Funkcja lambda przyjmuje
n
jako argument i zwraca tablicę tablic.wynik
źródło
Pari / GP , 37 bajtów
Wypróbuj online!
źródło
R , 38 bajtów
Wypróbuj online!
źródło