त्रिकोणीय जाली बिंदु मूल के करीब है


34

पृष्ठभूमि

एक त्रिकोणीय ग्रिड एक ग्रिड पक्ष लंबाई 1. की समभुज त्रिकोण के साथ नियमित रूप से विमान खपरैल का छत से बना है चित्र के नीचे एक त्रिकोणीय ग्रिड का एक उदाहरण है।

एक त्रिकोणीय जाली बिंदु त्रिभुजाकार ग्रिड बनाने वाले त्रिकोण का एक शीर्ष है।

मूल विमान है, जो त्रिकोणीय जाली अंक में से एक है पर एक निश्चित बिंदु है।

चुनौती

एक गैर-नकारात्मक पूर्णांक को देखते हुए n, त्रिकोणीय जाली बिंदुओं की संख्या ज्ञात करें, जिनकी उत्पत्ति से यूक्लिडियन की दूरी कम या बराबर है n

उदाहरण

निम्नलिखित आंकड़ा एक उदाहरण है n = 7(सुविधा के लिए केवल 60 डिग्री क्षेत्र दिखाते हुए, बिंदु A मूल होने के साथ):

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

Input | Output
---------------
    0 |       1
    1 |       7
    2 |      19
    3 |      37
    4 |      61
    5 |      91
    6 |     127
    7 |     187
    8 |     241
    9 |     301
   10 |     367
   11 |     439
   12 |     517
   13 |     613
   14 |     721
   15 |     823
   16 |     931
   17 |    1045
   18 |    1165
   19 |    1303
   20 |    1459
   40 |    5815
   60 |   13057
   80 |   23233
  100 |   36295
  200 |  145051
  500 |  906901
 1000 | 3627559

संकेत : यह क्रम OEIS A003215 नहीं है

नियम

लिए मानक नियम लागू होते हैं। सबसे छोटी सबमिशन जीत जाती है।

कृपया शामिल करें कि आपने अपने सबमिशन में चुनौती को कैसे हल किया।


7
OEIS A053416 त्रिज्या के बजाय व्यास के एक चक्र में समाहित अंकों की संख्या का अनुक्रम है n, इसलिए आपको जितने चाहिए, उससे दोगुने हैं।
नील

प्रासंगिक विकिपीडिया और मैथवर्ल्ड । Xnor का सूत्र समाहित करता है और प्रमाण नहीं।
user202729

4
यह OEIS A004016 के पहले n^2+1शब्दों का योग है
एलेफाल्फा

जवाबों:


49

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

f=lambda n,a=1:n*n<a/3or n*n/a*6-f(n,a+a%3)

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

यह काला जादू है।

एक लिखित प्रमाण के लिए 250 प्रतिनिधि की पेशकशएक सबूत और स्पष्टीकरण के लिएलिन का जवाबदेखें।


7
यह कैसे काम करता है? मैं एक अच्छे 30 मिनट के लिए सोच रहा था ... यह इतना आसान लग रहा है, लेकिन मैं उस पुनरावृत्ति और हलकों के बीच एक रिश्ता नहीं पा सकता ...
जुंगवान मिन

7
@JungHwanMin मेरा प्रमाण विमान ज्यामिति, ईसेनस्टीन पूर्णांक, संख्या क्षेत्रों पर गुणन, चतुष्कोणीय पारस्परिकता, अंकगणितीय प्रगति, और इंटरचेंजिंग योगों के माध्यम से एक महाकाव्य यात्रा है - यह सब एक सरल अभिव्यक्ति के लिए है। यह सब लिखना एक प्रमुख उपक्रम होगा जो मेरे पास अभी के लिए समय नहीं है, इसलिए मैं उम्मीद कर रहा हूं कि कोई और व्यक्ति एक प्रमाण देगा, एक सरलता की संभावना है कि मेरा जो कनेक्शन को स्पष्ट करता है।
xnor

14
सबूत । यह लिन की तुलना में अधिक लंबा है, लेकिन अधिक आत्म-निहित है: यह ईसेनस्टीन पूर्णांकों पर कारक के बारे में अप्रमाणित कथनों का उपयोग नहीं करता है।
पीटर टेलर

2
@PeterTaylor चेडर भिक्षु? के रूप में डार्थ और Droids में?
नील

3
@ नील, बधाई देने वाले पहले व्यक्ति बनने के लिए बधाई! मैंने एकेडमी में निगोशिएशन, लेवल 1 के लिए सौदेबाजी चिप के रूप में उपयोग करने के लिए डोमेन पंजीकृत किया।
पीटर टेलर

30

हास्केल , 48 बाइट्स

f n=1+6*sum[(mod(i+1)3-1)*div(n^2)i|i<-[1..n^2]]

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

Xnor के "ब्लैक मैजिक" फॉर्मूले का उपयोग करता है:

f(n)=1+6a=0n23a+1n23a+2

इसकी शुद्धता का प्रमाण, और एक स्पष्टीकरण कि कैसे एक्सन इसे पायथन के 43 बाइट्स में व्यक्त करने में कामयाब रहा, यहां पाया जा सकता है

1एनn2एन=(एक्स+yω)(एक्स+yω*)(एक्स,y)

6×((# के विभाजक एन1 (आधुनिक 3))-(# के विभाजक एन2 (आधुनिक 3)))

1n2


4
मुझे निश्चित रूप से यह उम्मीद नहीं थी जब xnor ने कहा "समस्या को दूर करने के पीछे कुछ गहरी गणितीय अंतर्दृष्टि है"।
बब्बलर

29

वोल्फ्राम लैंग्वेज (गणितज्ञ) , 53 51 50 बाइट्स

-1 बाइट के लिए @ मीलों धन्यवाद

Sum[Boole[x(x+y)+y^2<=#^2],{x,-2#,2#},{y,-2#,2#}]&

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

कैसे?

इसमें सोचने के बजाय:

यहाँ छवि विवरण दर्ज करें

इसके बारे में इस तरह से सोचें:

यहाँ छवि विवरण दर्ज करें

इसलिए हम [[sqrt(3)/2, 0], [1/2, 1]]दूसरी आकृति को पहले एक में बदलने के लिए ट्रांसफॉर्मेशन मैट्रिक्स लागू करते हैं ।

फिर, हमें कार्टेशियन निर्देशांक के संदर्भ में त्रिकोणीय ग्रिड में सर्कल को खोजना होगा।

(sqrt(3)/2 x)^2 + (1/2 x + y)^2 = x^2 + x y + y^2

तो हम x, yइस तरह के जाली बिंदु पाते हैंx^2 + x y + y^2 <= r^2

उदाहरण के लिए, साथ r = 3:

यहाँ छवि विवरण दर्ज करें


1
FYI करें, सूत्र x^2+x y+y^2को १२० डिग्री के साथ कोसाइन ऑफ़ लॉ से भी लिया जा सकता है ।
बब्बलर

3
x^2+x y+y^2-> x(x+y)+y^2
मील

सूत्र x^2 + xy + y^2को एइस्टीनस्टीन पूर्णांक के मानदंड से भी प्राप्त किया जा सकता है, जो है a^2 - ab + b^2। ध्यान दें कि इस शब्द के सिवाय इसके चिह्न अप्रासंगिक हैं aऔर इसमें समाधानों की मात्रा समान है। bab
orlp


7

CJam (24 बाइट्स)

{_*_,f{)_)3%(@@/*}1b6*)}

यह एक अनाम ब्लॉक (फ़ंक्शन) है जो स्टैक पर एक तर्क लेता है और स्टैक पर परिणाम छोड़ता है। ऑनलाइन टेस्ट सूट । ध्यान दें कि दो सबसे बड़े मामले बहुत धीमे हैं।

व्याख्या

alephalpha ने इस सवाल पर एक टिप्पणी में उल्लेख किया है कि

यह OEIS A004016 के पहले n ^ 2 + 1 शब्दों का योग है

(n)=1+6Σ=0n23+1-n23+2

उस सूत्र के सही होने का मेरा प्रमाण, कुछ जानकारी पर आधारित है , जो कि एलिफेल्हा के OEIS लिंक से प्राप्त हुई है:

Gf: 1 + 6 * सम_ {n> = 1} x ^ (3 * n-2) / (1-x ^ (3 * n-2)) - x ^ (3 * n-1) / (1- x ^ (3 * n-1))। - पॉल डी। हन्ना, जुलाई ३०११

एक्स

Πकश्मीर=0(1-क्षकश्मीर+1)(1+एक्सक्षकश्मीर+1)(1+एक्स-1क्षकश्मीर)=Σकश्मीरजेडक्षकश्मीर(कश्मीर+1)/2एक्सकश्मीर
Σमीटर,nजेडωमीटर-nक्षमीटर2+मीटरn+n2=Πकश्मीर=1(1-क्षकश्मीर)31-क्ष3कश्मीर
ω
Σमीटर,nजेडक्षमीटर2+मीटरn+n2=1+6Σकश्मीर0(क्ष3कश्मीर+11-क्ष3कश्मीर+1-क्ष3कश्मीर+21-क्ष3कश्मीर+2)

कोड विच्छेदन

{          e# Define a block. Stack: ... r
  _*       e#   Square it
  _,f{     e#   Map with parameter: invokes block for (r^2, 0), (r^2, 1), ... (r^2, r^2-1)
    )      e#     Increment second parameter. Stack: ... r^2 x with 1 <= x <= r^2
    _)3%(  e#     Duplicate x and map to whichever of 0, 1, -1 is equal to it (mod 3)
    @@/*   e#     Evaluate (r^2 / x) * (x mod 3)
  }
  1b6*     e#   Sum and multiply by 6
  )        e#   Increment to count the point at the origin
}

4

जे , 27 बाइट्स

[:+/@,*:>:(*++&*:)"{~@i:@+:

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

जंगवान मिन की विधि पर आधारित ।

व्याख्या

[:+/@,*:>:(*++&*:)"{~@i:@+:  Input: n
                         +:  Double
                      i:     Range [-2n .. 2n]
                  "{~        For each pair (x, y)
                *:             Square both x and y
              +                Add x^2 and y^2
             +                 Plus
            *                  Product of x and y
        >:                   Less than or equal to
      *:                     Square of n
     ,                       Flatten
  +/                         Reduce by addition

4

APL (Dyalog Classic) , 23 बाइट्स

{1+6×+/-/⌊⍵÷1+3⊥¨⍳⍵2}×⍨

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

xnor के और लियन के जवाब के लिए श्रद्धांजलि

अंतिम परीक्षा में टिप्पणी की जाती है क्योंकि इसमें अधिक मेमोरी की आवश्यकता होती है, जैसे MAXWS=200Menv में



3

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

-2 डेनिस के लिए धन्यवाद (एक शून्य के संघनन से बचने के लिए बस वर्ग वृद्धि, पूर्व-अंतर स्लाइस के बजाय पोस्ट-डिफरेंस मोडुलो-स्लाइस का उपयोग करके सिर से बचें)

उत्तर में "ब्लैक मैजिक" की विधि का उपयोग करता है जो कि उनके पायथन उत्तर में xnor द्वारा उजागर किया गया था , लेकिन पुनरावृत्ति के बजाय पुनरावृत्ति का उपयोग करता है (और थोड़ी कम गणना)

²:Ѐ‘$Im3S×6C

एक गैर-नकारात्मक पूर्णांक को स्वीकार करने और एक सकारात्मक पूर्णांक वापस करने के लिए एक अद्वैत लिंक।

इसे ऑनलाइन आज़माएं! या परीक्षण-सूट देखें

कैसे?

²:Ѐ‘$Im3S×6C - Main Link: non-negative integer, n     e.g. 7
²             - square                                     49
     $        - last two links as a monad:
    ‘         -   increment                                50
  Ѐ          -   map across (implicit range of) right with:
 :            -     integer division                       [49,24,16,12,9,8,7,6,5,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0]
      I       - incremental differences                    [-25,-8,-4,-3,-1,-1,-1,-1,-1,0,0,-1,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1]
       m3     - every third element                        [-25,-3,-1,0,0,-1,0,0,0,0,0,0,0,0,0,0,-1]
         S    - sum (vectorises)                           -31
          ×6  - multiply by six                           -186
            C - complement (1-X)                           187

2

जावास्क्रिप्ट (ईएस 6), 65 बाइट्स

यह @ JungHwanMin के समाधान का एक बंदरगाह है ।

f=(n,y=x=w=n*2)=>y-~w&&(x*x+x*y+y*y<=n*n)+f(n,y-=--x<-w&&(x=w,1))

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


मूल उत्तर (ES7), 70 बाइट्स

बस ग्रिड के माध्यम से चलता है और मिलान बिंदुओं को गिनता है।

f=(n,y=x=n*=2)=>y+n+2&&(x*x*3+(y-x%2)**2<=n*n)+f(n,y-=--x<-n&&(x=n,2))

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


पोर्टिंग एक्सनोर का उत्तर छोटा है: 42 बाइट्स (आउटपुट के trueबजाय 1; 46 अगर हम पूर्णांक-विभाजित भी करते हैं)। और मुझे पता नहीं है कि जावास्क्रिप्ट पूर्णांक-डिवीजनों को गोल्फ के लिए अच्छी तरह से जानता है ~~(a/b), लेकिन मुझे यकीन है कि उन लोगों के लिए एक छोटा रास्ता भी है ..
केविन क्रूज़सेन


1

परी / जीपी , 42 बाइट्स

अंतर्निहित का उपयोग करना qfrep

n->1+2*vecsum(Vec(qfrep([2,1;1,2],n^2,1)))

qfrep (q, B, {flag = 0}): वेक्टर (आधा) अभिन्न और निश्चित द्विघात रूप q के लिए 1 से B तक मानदंडों के वैक्टर की संख्या। यदि झंडा 1 है, तो 1 से 2B तक के मानक के वैक्टर भी गिनें।

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


0

सी # (विजुअल सी # इंटरएक्टिव कंपाइलर) , 68 बाइट्स

n=>{int g(int x,int y)=>x*x<y/3?1:x*x/y*6-g(x,y+y%3);return g(n,1);}

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

सभी के रूप में भी, दुर्भाग्य से। मुझे पता है कि यह लिखने का एक बेहतर तरीका है, लेकिन c # में एक ही समय में एक लैम्ब्डा की घोषणा करना और कॉल करना वास्तव में कुछ ऐसा नहीं है जो मैं करता हूं, ठीक है, कभी भी। हालांकि मेरे बचाव में, मैं ऐसा करने के लिए एक अच्छे कारण (कोड गोल्फ के बाहर) के बारे में नहीं सोच सकता। फिर भी, अगर कोई जानता है कि आप यह कैसे कर सकते हैं, तो मुझे बताएं और / या क्रेडिट चोरी कर लें, मुझे लगता है।



0

05AB1E , 15 बाइट्स

nD>L÷¥ā3%ÏO6*±Ì

पोर्ट ऑफ @JonathanAllan रों जेली जवाब , जो बारी में से व्युत्पन्न है @ XNOR की 'काला जादू' सूत्र

इसे ऑनलाइन आज़माएं या सभी परीक्षण मामलों को सत्यापित करें

स्पष्टीकरण:

n                # Square the (implicit) input-integer
 D>              # Duplicate it, and increase the copy by 1
   L             # Create a list in the range [1, input^2+1]
    ÷            # Integer divide input^2 by each of these integers
     ¥           # Take the deltas
      ā          # Push a list in the range [1, length] without popping the deltas itself
       3%        # Modulo each by 3
         Ï       # Only leave the values at the truthy (==1) indices
          O      # Take the sum of this list
           6*    # Multiply it by 6
             ±   # Take the bitwise NOT (-n-1)
              Ì  # And increase it by 2
                 # (after which the result is output implicitly)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.