Bentuk N-Dimensi Sederhana yang dapat dibuat untuk dimensi apa pun adalah Simplex , dan ini adalah sekumpulan titik N + 1 yang semuanya berjarak sama dari satu sama lain.
Untuk 2 dimensi, ini adalah segitiga sama sisi, untuk 3 dimensi, ini adalah tetrahedron biasa, pada 4 dimensi adalah 5-Sel dan seterusnya.
Tantangan
Diberikan dimensi Integer N sebagai input, output Array / Daftar / Tumpukan / Apa pun dari titik-titik N Dimensi yang mewakili Simpleks dimensi ini. Artinya, N + 1 vertex yang sama dan tidak nol jarak dari satu sama lain.
Contohnya
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...]]
Catatan
- Input adalah angka dalam format standar apa pun , dan akan selalu menjadi bilangan bulat lebih besar dari 1 dan kurang dari 10
- Hardcoding diperbolehkan untuk input 1, tetapi tidak ada yang lebih tinggi.
- Kesalahan wajar diizinkan dalam output. Masalah dengan floating point aritmatika atau trigonometri dapat diabaikan.
- Setiap transformasi simpleks dimensional N diperbolehkan, asalkan tetap Reguler dan Non-nol.
- Celah Standar dilarang.
- Ini adalah kode-golf , byte paling sedikit menang.
code-golf
arithmetic
ATaco
sumber
sumber
Jawaban:
Jelly , 11 byte
Cobalah online!
Karya-karya menghasilkan matriks identitas berukuran N dan concatenating dengan daftar yang dihasilkan oleh mengulangi N kali tunggal √ (N + 1) + 1 , dibagi dengan N .
sumber
Python
7866 BytesTentunya dapat ditingkatkan,
terutama pada penanganan n = 1```. (Bagaimana itu bahkan simpleks?)Baru sadar itu tidak perlu. Mungkin masih bisa diperbaiki ^^Cobalah online!
[i*[0]+[1]+(n+~i)*[0]for i in range(n)]
menciptakan matriks identitas. Semua titik memiliki jaraksqrt(2)
satu sama lain. (terima kasih kepada Rod untuk meningkatkan)Sekarang kita membutuhkan
n+1
titik ke-1 dengan jarak yang sama ke semua titik lainnya. Kita harus memilih(x, x, ... x)
.Jarak dari
(1, 0, ... )
ke(x, x, ... x)
adalahsqrt((x-1)²+x²+...+x²)
. Jika kita menginginkann
simpleks dimensional, ini menjadisqrt((x-1)²+(n-1)x²)
seperti kita memiliki satu1
dann-1
0
s pada poin pertama. Sederhanakan sedikit:sqrt(x²-2x+1+(n-1)x²) = sqrt(nx²-2x+1)
Kami ingin jarak ini
sqrt(2)
.sqrt(2) = sqrt(nx²-2x+1)
2 = nx²-2x+1
0 = nx²-2x-1
0 = x²-2/n*x+1/n
Memecahkan persamaan kuadratik ini (satu solusi, solusi lain juga berfungsi dengan baik):
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
Masukkan itu dalam daftar
n
waktu, masukkan daftar itu dalam daftar dan bergabung dengan matriks identitas.-4 Bytes berkat Alex Varga:
Kalikan setiap vektor dengan
n
. Ini mengubah penciptaan matriks identitas kelambda n:[i*[0]+[n]+(n+~i)*[0]
(panjang yang sama) dan menghilangkan pembagian olehn
pada titik tambahan, sehingga menjadin*[1+(n+1)**.5]
, menyimpan dua tanda kurung dan/n
.sumber
Bahasa Wolfram (Mathematica) , 46 byte
Cobalah online!
sumber
APL (Dyalog) ,
2018 byte1 byte terima kasih kepada @ngn
Cobalah online!
sumber
(∘.=⍨⍳)
->∘.=⍨∘⍳
⌹
tetapi saya tidak tahu bagaimana cara kerjanya ...{÷¯1+4○⍵*.5}⍪⍳∘.=⍳
JavaScript (ES7), 70 byte
Port dari jawaban Python @ PattuX.
sumber
Bahasa Wolfram (Mathematica), 205 byte
Fungsi simpleks dalam Mathematica Mulai dari
{0,0,...]},{1,0,0,...]}
, Menempatkan titik pertama di titik asal, Titik kedua dix
sumbu Titik ketiga dix,y
pesawat, Titik keempat dix,y,z
ruang angkasa, dll. Perkembangan ini menggunakan kembali semua titik sebelumnya, menambahkan satu titik baru pada suatu waktu dalam dimensi baruVerifikasi
sumber
Oktaf , 31 byte
Disimpan 2 byte berkat Luis Mendo .
Cobalah online!
sumber
ones(1,n)
dengan~~(1:n)
Ruby , 55 byte
alih-alih mengembalikan besaran yang sama untuk semua dimensi dan menggunakan rumus
(1+(n+1)**0.5)/n
I, skalakan dengan faktorn
untuk menyederhanakan rumus(1+(n+1)**0.5)
Cobalah online!
ungolfed dalam program tes
Fungsi lambda mengambil
n
sebagai argumen dan mengembalikan array array.keluaran
sumber
Pari / GP , 37 byte
Cobalah online!
sumber
R , 38 byte
Cobalah online!
sumber