अब हम n आयामों में सोच रहे हैं!


9

प्रश्न: एक संख्या n, 2 को देखते हुए , एक nआयामी n x n x n x n x n x n ... x nलैटिस पर बिंदुओं के कितने अलग जोड़े , जहां निर्देशांक से 0लेकर n - 1दूरी , कम से कम n अलग हैं? जोड़े {(2,1,3,1), (3,2,1,3)}और {(3,2,1,3), (2,1,3,1)}एक दूसरे से अलग नहीं मानी जाती हैं, क्योंकि वे उलटे क्रम में एक ही दो बिंदुओं से युक्त होते हैं। ध्यान दें कि जोड़े की कुल संख्या बहुत तेजी से बढ़ती है। कुल जोड़े की संख्या चला जाता है 6, 351, 32 640, 4 881 250, 1 088 367 840, आदि

परीक्षण के मामलों:

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)

आपका कोड n <= 5 के लिए काम करना चाहिए, कम से कम सिद्धांत में। इसे हार्डकोड न करें, यह एक मानक कमियां है।



^ एक प्रोग्राम जो n=15आसानी से परिणाम उत्पन्न कर सकता है
लीक नून

tinyurl.com/ya2kmb24 <- C पर पोर्ट किया गया है, जो गणना कर सकता है, n=20लेकिन अतिप्रवाह से ग्रस्त है
लीक नून

आप दूरी कैसे माप रहे हैं? यूक्लिडियन मीट्रिक? या यह देखते हुए कि यह L_1 का उपयोग कर रहे हैं आप एक जाली है?
पीटर टेलर

@PeterTaylor परीक्षण के मामलों से, यह स्पष्ट है कि हम यूक्लिडियन दूरी का उपयोग कर रहे हैं all pairs are at most a distance of sqrt(2) apartलेकिन इसे अधिक स्पष्ट रूप से निर्दिष्ट किया जाना चाहिए।
ग्यूसेप

जवाबों:


3

MATL , 12 बाइट्स

tt:Z^tZPR>~z

इसे ऑनलाइन आज़माएं!

व्याख्या

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

जेली , 14 13 बाइट्स

1 बाइट डेनिस के लिए धन्यवाद।

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

इसे ऑनलाइन आज़माएं!

त्वरित maffs संस्करण

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

इसे ऑनलाइन आज़माएं!


इसे चलाने के लिए आप किस दुभाषिया का उपयोग करते हैं? मैं इसे करने की कोशिश करना चाहते हैं, लेकिन TIO बहुत धीमी गति से एन = 5 के लिए (1 मिनट के बाद का समय समाप्त हो) है prntscr.com/hqbcph
धांधली

@ bushdid911 अगर आप मर्यादा तोड़ने की कोशिश करते हैं, तो मर्यादा टूटेगी
लीक नन

आप बदल सकते हैं æ.`½के साथ ÆḊ€
डायलाॅन डेन्स

@ bushdid911 यह चल सकता है n=5, सिर्फ एक मिनट में नहीं। (यह ब्रह्मांड की उम्र से अधिक हो सकता है, सावधान रहें) यह सबसे तेज़ कोड नहीं है, इसलिए परेशान आपके कोड को तेज़ी से क्यों चलाते हैं?
user202729

1
@ bushdid911 मैंने एक तेज़ (एर) संस्करण बनाया।
लीक

2

पायथन 2 , 137 133 बाइट्स

lambda n:sum(n*n<=sum((o[i]-p[i])**2for i in range(n))for o,p in q(q(range(n),repeat=n),repeat=2))/2
from itertools import*
q=product

श्री Xcoder और ov: -4 बाइट्स। इसे ऑनलाइन आज़माएं!


135 बाइट्स । (शामिल करने की आवश्यकता नहीं f=)
श्री एक्सकोडर


2

जे , 40 बाइट्स

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

इसे ऑनलाइन आज़माएं!

यदि आप विस्तारित परिशुद्धता ( 5xइसके बजाय 5) का उपयोग करते हैं, तो 5 के लिए TIO पर समय निकालेंगे । मैं अपने कंप्यूटर पर 6 के साथ कोशिश करने के लिए परेशान नहीं जा रहा हूँ क्योंकि इससे कोई संदेह नहीं कि दुभाषिया दुर्घटनाग्रस्त हो जाएगा।

गोल्फिंग पर सलाह की तलाश, विशेष रूप से निर्देशांक की पीढ़ी के अतीत का हिस्सा। मुझे लगता है कि कुछ कैप को हटाने का एक तरीका होना चाहिए।

]<:[:+/&.:*:"1इसकी तुलना अनिवार्य रूप से की जा सकती है *:<:[:+/"1[:*:

व्याख्या

यह स्पष्टीकरण आरईपीएल पर किया गया है (तीन रिक्त स्थान एक कमांड का संकेत देते हैं, कोई रिक्त स्थान आउटपुट का संकेत नहीं देता है)। मैं जवाब के लिए निर्माण किया जाएगा।

निर्देशांक उत्पन्न करना

#~ #: i.@^~ सभी निर्देशांक जिन्हें हम जाली पर ध्यान देते हैं।

^~अपने आप में एक संख्या है, और i.वह सीमा देता है [0, n) जहां n इसका इनपुट है। @उन कार्यों को बनाता है।

   i.@^~ 2
0 1 2 3

#~ अपने आप से एक संख्या की प्रतिलिपि बनाता है, जैसे

   #~ 3
3 3 3

#:अपने दाएं तर्क को उसके बाएं तर्क के रूप में दिए गए सरणी द्वारा निर्दिष्ट आधार पर धर्मान्तरित करता है। सरणी में अंकों की संख्या उस आधार आउटपुट में अंकों की संख्या से मेल खाती है (और आपके पास मिश्रित आधार हो सकता है) उदाहरण के लिए

   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

इसलिए, सभी एक साथ, यह सभी मानों के माध्यम से गणना करते हैं आधार n (जहां n इनपुट है) तक n ^ n, प्रभावी रूप से हमें हमारे निर्देशांक दे रहा है।

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

प्रत्येक जोड़ी के बीच दूरी प्राप्त करना

पहले हम प्रत्येक युग्म का उपयोग कर दूसरों के सभी के साथ समन्वय का अंतर ले /-table और ~-reflexive। ध्यान दें कि यह इस तथ्य के लिए जिम्मेदार नहीं है कि जोड़े के लिए आदेश मायने नहीं रखता है: यह डुप्लिकेट दूरी उत्पन्न करता है।

  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

फिर हम इस क्रिया का +/&.:*:प्रत्येक समन्वय (पर "1, उर्फ ​​रैंक एक) पर उपयोग करते हैं। यह क्रिया योग है ( +/) के तहत ( &.:) वर्ग ( *:)। के तहत सही क्रिया (वर्ग) को लागू करता है और फिर इसके परिणाम एकत्र करता है और इसे बाएं क्रिया (योग) के तर्क के रूप में देता है। यह फिर सही क्रिया के व्युत्क्रम को लागू करता है (जो वर्गमूल होगा)।

   +/&.:*: 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

अप्रत्याशित रूप से, कई दूरियां समान हैं।

इनपुट से अधिक या उसके बराबर दूरी की गणना करना

अंतिम भाग यह देख रहा है कि दूरी इनपुट के उपयोग से अधिक या बराबर है या नहीं ]<:। तब सभी परिणामों का उपयोग करके सारांशित किया जाता है +/^:_(योग जब तक अभिसरण), सत्य मूल्यों की संख्या की गिनती। फिर इस मान को 2 से विभाजित किया जाता है ( मतलब 2%~, यहां ~दिए गए तर्कों के क्रम को स्वैप करें %)। हम 2 से विभाजित कर सकते हैं इसका कारण यह है कि प्रत्येक सत्य जोड़ी के लिए, युग्मित को छोड़कर फ़्लिप किए गए आदेश के लिए एक और एक होगा जो स्वयं के साथ एक समन्वय है। हालांकि, यह ठीक है, क्योंकि उन लोगों के परिणामस्वरूप 0 की दूरी होगी।


1
35 बाइट्स+/@,@(-:@<:+/&.:*:@:-"1/~)#~#:i.@^~
मील
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.