Şimdi n boyutunda düşünüyoruz!


9

Soru: Verilen bir sayı n≥ 2 kaç farklı nokta çiftleri bir on nboyutlu n x n x n x n x n x n ... x nkoordinatlar arasında değişir kafes 0için n - 1bir mesafe vardır , en azından n ayrı? Çiftler {(2,1,3,1), (3,2,1,3)}ve {(3,2,1,3), (2,1,3,1)}ters sırada aynı iki noktadan oluştuğu için birbirinden ayrı olarak kabul edilmezler. Toplam çift sayısının çok hızlı büyüdüğünü unutmayın. Toplam çiftlerinin sayısı gider 6, 351, 32 640, 4 881 250, 1 088 367 840, vs.

Test senaryoları:

2 -> 0 (all pairs are at most a distance of sqrt(2) < 2 apart)
3 -> 28 (They must either be (2,2,1) or a permutation apart, or (2,2,2) apart. Each corner
has three non-corner (2,2,1) points corresponding to it. And each corner is associated 
with a corner pair that is a (2,2,2). Thus. 3.5 * 8 = 28.
4 -> 4,888
5 -> 1,501,948
6 -> 486,039,360 (I would like someone to verify this if possible)

Kodunuz en azından teoride n <= 5 için çalışmalıdır. Sabit kodlamayın, bu standart bir boşluk.



^ n=15Kolayca sonuç üretebilen bir program
Leaky Nun

tinyurl.com/ya2kmb24 <- kadar hesaplayabilen n=20ancak taşma nedeniyle ağır derecede acı çeken C'ye taşındı
Leaky Nun

Mesafeyi nasıl ölçüyorsunuz? Öklid metriği? Ya da bir kafes olduğu göz önüne alındığında L_1 kullanıyor musunuz?
Peter Taylor

@PeterTaylor test vakalarından, Öklid mesafesini kullandığımız açıktır, all pairs are at most a distance of sqrt(2) apartancak bu daha açık bir şekilde belirtilmelidir.
Giuseppe

Yanıtlar:


3

MATL , 12 bayt

tt:Z^tZPR>~z

Çevrimiçi deneyin!

açıklama

tt   % Implicit input n. Duplicate twice
     % STACK: n, n, n
:    % Range [1 2 ... n]
     % STACK: n, n, [1 2 ... n]
Z^   % Cartesian power. Gives an n^n × n matrix C where each row is a Cartesian tuple
     % STACK: n, C
t    % Duplicate
     % STACK: n, C, C
ZP   % Euclidean distance. Gives an n^n × n^n matrix D of pairwise distances
     % STACK: n, D
R    % Upper triangular part: sets elements below the main diagonal to 0. Call that U
     % STACK: n, U
>~   % Less than or equal? Element-wise. Gives a true-false matrix B
     % STACK: n, B
z    % Number of nonzeros. Implicitly display
     % STACK: number of entries in B that equal true

2

Jöle , 14 13 bayt

Dennis sayesinde 1 bayt.

ṗ⁸Œc_/€ÆḊ€<ċ0

Çevrimiçi deneyin!

Hızlı maffs sürümü

ŒgL€!P:@L!$×P
²S<
ḶœċçÐḟ²ð>0S’2*×⁸ạ⁹$Ѥð€S

Çevrimiçi deneyin!


Bunu çalıştırmak için hangi tercümanı kullanıyorsunuz? Bunu denemek istiyorum ama TIO çok yavaş (1 dakika sonra zaman aşımına) n = 5 içindir prntscr.com/hqbcph
hileli

@ bushdid911 Sınırı aşmaya çalışırsanız, sınır kırılacaktır
Leaky Nun

Sen yerini alabilir æ.`½ile ÆḊ€.
dylnan

@ bushdid911 Sadece n=5bir dakika içinde çalışamaz. (evrenin yaşından daha uzun sürebilir, dikkatli olun) Bu en hızlı kod değil, neden kodunuzu hızlı çalıştırmıyorsunuz?
user202729

1
@ bushdid911 Hızlı (er) bir versiyon yaptım.
Leaky Nun


2

J , 40 bayt

2%~[:+/^:_]<:[:+/&.:*:"1[:-"1/~#~#:i.@^~

Çevrimiçi deneyin!

Genişletilmiş hassasiyet kullanırsanız ( 5xyerine 5) TIO'da 5 kez zaman aşımına uğrar . Şüphesiz tercümanı çökerteceği için bilgisayarımda 6 ile uğraşmayacağım.

Golf, özellikle koordinatların üretilmesi geçmiş kısmı için tavsiye arıyorum. Bazı kapakları çıkarmanın bir yolu olmalı gibi hissediyorum.

]<:[:+/&.:*:"1yerine eşdeğer olabilir *:<:[:+/"1[:*:.

açıklama

Bu açıklama REPL'de yapılır (üç boşluk bir komutu, hiçbir boşluk bir çıktıyı göstermez). Cevabı ben oluşturacağım.

Koordinatları oluşturma

#~ #: i.@^~ örgü üzerinde önem verdiğimiz tüm koordinatları verir.

^~" i.Kendine yükseltilmiş bir sayıdır" ve n'nin girdisi olduğu [0, n) aralığını verir. @bu fonksiyonları oluşturur.

   i.@^~ 2
0 1 2 3

#~ bir sayıyı tek başına kopyalar, ör.

   #~ 3
3 3 3

#:sağ argümanını sol argüman olarak verilen dizi tarafından belirtilen tabana dönüştürür . Dizideki basamak sayısı, bu temel çıktıdaki basamak sayısına karşılık gelir (ve karışık bir tabana sahip olabilirsiniz) Örneğin,

   3 3 3 #: 0
0 0 0
   5 5 #: 120
4 0
NB. If you want 120 base 5 use #.inv
   #.inv 120
4 4 0

Yani, hep birlikte, bu, n koordinatlarımızı etkili bir şekilde veren n tabanına (n'nin girdi olduğu) n ^ n değerine kadar tüm değerleri numaralandırdığını söylüyor.

   (#~ #: i.@^~) 2
0 0
0 1
1 0
1 1

Her bir çift arasındaki mesafelerin elde edilmesi

İlk olarak, her koordinatın farkını diğer -dyad -table /ve ~-reflexive kullanarak alırız. Bunun, siparişin çiftler için önemli olmadığı gerçeğini hesaba katmadığını unutmayın: bu yinelenen mesafeler oluşturur.

  NB. 2 {. takes the first two elements (I'm omitting the rest).
  2 {. -"1/~ (#~ #: i.@^~) 2
 0  0
 0 _1
_1  0
_1 _1

 0  1
 0  0
_1  1
_1  0

Sonra bu fiili +/&.:*:her koordinatta kullanıyoruz (at "1, aka rank one). Bu fiil +/( &.:) square ( *:) altında sum ( ) şeklindedir . Altında sağ fiil (kare) uygulandıktan sonra sonuçları toplanır ve sol fiile (toplam) argüman olarak verilir. Daha sonra (fiil kökü olacak) sağ fiilin tersini uygular.

   +/&.:*: 3 4
5
   +/&.:*:"1 ([: -"1/~ #~ #: i.@^~) 2
      0       1       1 1.41421
      1       0 1.41421       1
      1 1.41421       0       1
1.41421       1       1       0

Şaşırtıcı olmayan bir şekilde, birçok mesafe aynı.

Girişe eşit veya daha büyük mesafeleri sayma

Son bölüm, mesafenin kullanılan girişe eşit veya daha büyük olup olmadığını görmektir ]<:. Daha sonra tüm sonuçlar +/^:_(yakınsamaya kadar toplam) kullanılarak toplanır ve doğruluk değerleri sayılır. Daha sonra bu değer 2'ye bölünür ( 2%~burada ~verilen bağımsız değişkenlerin sırasını değiştirir %). 2'ye bölebilmemizin nedeni, her bir doğru eşleştirme için, kendisiyle bir koordinat olan eşleşmeler hariç , ters çevrilmiş düzen için başka bir tane olacaktır . Yine de, sorun değil, çünkü bunlar 0 mesafeyle sonuçlanacak.


1
35 byte ile+/@,@(-:@<:+/&.:*:@:-"1/~)#~#:i.@^~
mil
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.