क्या यह एक त्रिकोणीय त्रिकोणीय संख्या है?


20

संबंधित OEIS अनुक्रम: A008867

त्रिकोणीय संख्या को काट दिया

त्रिकोणीय संख्याओं की एक सामान्य संपत्ति यह है कि उन्हें एक त्रिकोण में व्यवस्थित किया जा सकता है। उदाहरण के लिए, 21 लें और os के त्रिकोण में व्यवस्थित करें :

     ओ 
    ऊ
   OOO
  oooo
 ooooo
oooooo

आइए प्रत्येक कोने से एक "आकार:" काटकर एक ही आकार के त्रिकोणों को परिभाषित करें। 21 को समाप्त करने का एक तरीका इस प्रकार है:

     । 
    । ।
   OOO
  oooo
 । ऊँ।
। । ऊ। ।

( .मूल से त्रिकोण काटे जाते हैं)।

12 os शेष हैं, इसलिए 12 एक छोटा त्रिभुज संख्या है।

कार्य

आपका काम एक प्रोग्राम या एक फ़ंक्शन (या समतुल्य) लिखना है जो एक पूर्णांक लेता है और रिटर्न (या किसी भी मानक आउटपुट विधियों का उपयोग करता है) चाहे एक संख्या एक छोटा त्रिकोण संख्या है।

नियम

  • कोई मानक खामियां नहीं हैं।
  • इनपुट एक गैर-नकारात्मक पूर्णांक है।
  • एक कट की लंबाई मूल त्रिकोण के आधे से अधिक नहीं हो सकती (यानी कटौती ओवरलैप नहीं हो सकती है)
  • कट में साइड की लंबाई शून्य हो सकती है।

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

Truthy:

0
1
3
6
7
10
12
15
18
19

Falsy:

2
4
5
8
9
11
13
14
16
17
20

50 तक सभी पूर्णांकों के लिए परीक्षण मामले: TIO लिंक

यह , इसलिए प्रत्येक भाषा की जीत में सबसे कम बाइट मायने रखता है!

code-golf  math  decision-problem  number-theory  integer  code-golf  number  decision-problem  functional-programming  code-golf  array-manipulation  matrix  code-golf  string  classification  string  code-challenge  binary  compression  decode  code-golf  string  string  code-challenge  balanced-string  encode  code-golf  number-theory  integer  base-conversion  code-golf  math  number-theory  geometry  abstract-algebra  code-golf  array-manipulation  sorting  optimization  code-golf  math  geometry  image-processing  generation  code-golf  string  cops-and-robbers  repeated-transformation  grammars  cops-and-robbers  repeated-transformation  grammars  code-challenge  restricted-source  tips  source-layout  javascript  code-challenge  kolmogorov-complexity  restricted-source  code-golf  combinatorics  counting  math  fastest-code  linear-algebra  code-golf  math  permutations  matrix  linear-algebra  code-golf  string  decision-problem  restricted-source  code-golf  number  array-manipulation  subsequence  code-golf  number  array-manipulation  matrix  code-golf  brainfuck  code-golf  color  code-golf  quine  source-layout  code-golf  subsequence  code-golf  string  ascii-art  code-golf  string  ascii-art  alphabet  code-golf  decision-problem  interpreter  hexagonal-grid  halting-problem  code-golf  string  polynomials  calculus  code-golf  math  decision-problem  matrix  complex-numbers  code-golf  random  code-golf  number  arithmetic 

1
क्या हम सत्य और मिथ्या आउटपुट का उत्पादन कर रहे हैं या दो सुसंगत मूल्य ठीक हैं?
गेहूं जादूगर

@HeatWizard दो सुसंगत मूल्य स्वीकार्य हैं।
जंगवान मिन

हालाँकि बहुत सारे ट्रंकेशन ओवरलैप होते हैं, परिणाम छोटे ट्रंकेशन के साथ एक छोटे त्रिकोण के बराबर होता है (यदि ट्रंकेशन में साइड की लंबाई 0 हो सकती है)।
असोन तुहिद

जवाबों:



7

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

f n=or[mod(gcd(p^n)(4*n-1)-5)12<3|p<-[1..4*n]]

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

समस्या पर संख्या सिद्धांत का एक गुच्छा फेंका (धन्यवाद @flawr), मुझे यह लक्षण मिला:

n एक काटे गए त्रिकोणीय संख्या है, यदि 4n-1 के अभाज्य गुणनखंड में , किसी भी रूप में 5 mod 12 या 7 mod 12 का प्राइम समय की संख्या में दिखाई देता है।

इसका मतलब है, उदाहरण के लिए, कि 4n-1 5 से विभाज्य नहीं हो सकता है जब तक कि यह 5 2 = 25 से आगे विभाज्य न हो और कुल 5 कारकों की संख्या समान हो।

हास्केल में एक कारक-निर्मित-निर्माण नहीं है, लेकिन हम सुधार कर सकते हैं। यदि हम 12 = 3 * 4 जैसी अपराधों की शक्तियों में कारक के साथ काम करते हैं , तो हम समकक्ष कथन का उपयोग कर सकते हैं:

n एक छंटनी की गई त्रिकोणीय संख्या है, यदि 4n-1 का अभाज्य गुण मुख्य शक्तियों में नहीं है, तो प्रपत्र 5 mod 12 या 7 mod 12 है

हम k के रूप में प्रदर्शित होने वाले एक प्रमुख p की शक्ति निकाल सकते हैं । हम फिर जाँचते हैं कि परिणाम r 5 या 7 मोडुलो 12 नहीं है । ध्यान दें कि r विषम है। हम पी के रूप में कंपोजिट की भी जांच करते हैं , उन्हें उन्हें बताने के लिए एक रास्ता नहीं है, लेकिन जब तक इसके कारक नहीं होंगे तब तक चेक पास हो जाएगा।gcd(p^k)kmod(r-5)12>2

अंत में, आउटपुट में / स्विच >2करने <3और स्विच करने की उपेक्षा करने से बाइट की जगह हमें उपयोग करने की सुविधा मिलती है ।TrueFalseorand


एक संबंधित लक्षण वर्णन यह है कि 4n-1 लिया मोडुलो 12 के विभाजकों में कुल 1 का और 11 के 5 और 7 का अधिक है।

53 बाइट्स

f n=sum[abs(mod k 12-6)-3|k<-[1..4*n],mod(4*n)k==1]<0

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


वास्तव में अच्छी व्याख्या!
उभयचर जूल

6

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

f=lambda n,b=1:b>n+1or(8*n-2+3*b*b)**.5%1>0<f(n,b+1)

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

आउटपुट True/ Falseफ़्लिप। इस लक्षण वर्णन का उपयोग करता है:

n एक छोटा कर दिया त्रिकोणीय संख्या वास्तव में अगर है 8n -2 फार्म है एक 2 -3b 2 कुछ पूर्णांकों के लिए ए, बी

हम जाँच करें कि क्या किसी भी 8*n-2+3*b*bकिसी के लिए एक पूर्ण वर्ग है bसे 1करने के लिए n+1। हम बचते हैं b=0क्योंकि यह एक नकारात्मक के वर्गमूल के लिए एक त्रुटि देता है जब n==0, लेकिन यह चोट नहीं पहुंचा सकता क्योंकि केवल अजीब bकाम कर सकता है।

गैर-पुनरावर्ती:

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

lambda n:0in[(8*n-2+3*b*b)**.5%1for b in range(~n,0)]

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


क्या पुनरावर्ती और गैर-पुनरावर्ती समाधान आमतौर पर अजगर में एक दूसरे के साथ इतने प्रतिस्पर्धी हैं?
बोबाकैक

@boboquack आमतौर पर पुनरावर्ती समाधान कुछ बाइट्स से जीतता है range। यहाँ यह करीब है क्योंकि b>n+1एक लंबा आधार मामला है और 0inछोटा है।
xnor

5

आर , 45 43 बाइट्स

-2 बाइट्स व्लो को धन्यवाद

(n=scan())%in%outer(T<-cumsum(0:n),3*T,"-")

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

मुझे पूरा यकीन है कि हमें केवल इसके लिए पहले nत्रिकोणीय संख्याओं की जांच करने की आवश्यकता है ; जानवर बल जाँच करता है कि nक्या त्रिकोणीय संख्याओं और उनके त्रिगुणों के युग्म अंतर में है।


scan() n<-scan();n%in%outer(T<-cumsum(0:n),3*T,"-")
वलू

@ मेरे चेहरे की झलक मुझे हर जगह कार्यों का उपयोग करने की आदत है ...
ग्यूसेप

और मैं सिर्फ (n = स्कैन ()) के बजाय असाइनमेंट का उपयोग करने की आदत में आ गया ... tsk tsk
Vlo

5

जेली , 10 बाइट्स

0r+\ð_÷3f⁸

एक मोनाडिक लिंक एक पूर्णांक को स्वीकार करता है और एक सत्य मान (एक गैर रिक्त सूची) या एक गलत मूल्य (एक खाली सूची) लौटाता है।

इसे ऑनलाइन आज़माएं! (पादरी[0]परिणाम के रूप मेंदिखाने के लिए पायथन प्रतिनिधित्व करता है)
... या एक परीक्षण-सूट देखें (0 से 20 वर्ष तक के लिए रन)

कैसे?

N को देखते हुए, पहला N त्रिभुज संख्या बनाता है, प्रत्येक से N को घटाता है, प्रत्येक परिणाम को 3 से विभाजित करता है और कोई भी परिणाम रखता है जो पहले N त्रिभुज संख्याओं में से एक है।

0r+\ð_÷3f⁸ - Link: integer, N             e.g. 7
0r         - zero inclusive range N            [    0, 1, 2,   3,    4, 5,   6,   7]
  +\       - cumulative reduce with addition   [    0, 1, 3,   6,   10,15,  21,  28]
    ð      - start a new dyadic link with that, t, on the left and N on the right
     _     - t subtract N (vectorises)         [   -7,-6,-3,  -1,    3, 8,  14,  21]
      ÷3   - divivde by three (vectorises)     [-2.33,-2,-1.33,-0.33,1,2.67,4.67, 7]
         ⁸ - chain's left argument, t          [    0, 1, 3,   6,   10,15,  21,  28]
        f  - filter keep                       [                     1             ]
                                               - a non-empty list, so truthy

4

पाईट , १० बाइट्स

Đř△Đ3*ɐ-Ƒ∈

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

स्पष्टीकरण:

        Implicit input
Đ       Duplicate input
ř       Push [1,2,...,input]
△       For each element k in the array, get the kth triangle number
Đ       Duplicate the top of the stack
3*      Multiply by 3
ɐ       ɐ - All possible:
 -                       subtractions between elements of the two arrays  
Ƒ       Flatten the nested array
∈       Is the input in the array

आपने मुझे बहुत हरा दिया, +1 GG
FantaC

@tfbninja मुझे लगता है कि मैं क्या ɐ-करता है के लिए एक अच्छे स्पष्टीकरण था
मैडिपिप २०

1
अगर आप चाहें तो रोलबैक कर सकते हैं
FantaC


3

जे , 22 बाइट्स

e.[:,@(-/3*])2![:i.2+]

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

सीधा और कुछ हद तक खराब-गोल्फ दृष्टिकोण।

व्याख्या

e.[:,@(-/3*])2![:i.2+]
             2![:i.2+]  Range of triangular numbers up to N
      (-/3*])           All possible subtractions of 3T from T 
                        where T is triangular up to the Nth triangular number
    ,@                  Flattened into a single list
e.                      Is N in the list?

e.2,@(!-/3*!)[:i.2+]
FrownyFrog

e.2,@(!-/3*!)1+i.,]हो सकता है
FrownyFrog

3

MATL , 12 बाइट्स

tQ:qYst!3*-m

सत्य के 1लिए आउटपुट , मिथ्या के 0लिए।

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

यह कैसे काम करता है, उदाहरण के साथ

इनपुट पर विचार करें 6

t      % Implicit input. Duplicate
       % STACK: 6, 6
Q:q    % Increase, range, decrease element-wise. Gives [0 1 ... n]
       % STACK: 6, [0 1 ... 6]
Ys     % Cumulative sum
       % STACK: 6, [0 1 3 6 10 15]
t!     % Duplicate, transpose
       % STACK: 6, [0 1 3 6 10 15], [0;
                                     1;
                                     3;
                                     6;
                                     10;
                                     15]
3*     % Times 3, element-wise
       % STACK: 6, [0 1 3 6 10 15 21 28 36 45 55], [0;
                                                    3;
                                                    9;
                                                    18;
                                                    30;
                                                    45]
-      % Subtract, element-wise with broadcast
       % STACK: 6, [  0   1   3   6  10  15  21;
                     -3  -2   0   3   7  12  18;
                     -9  -8  -6  -3   1   6  12;
                    -18 -17 -15 -12  -8  -3   3;
                    -30 -29 -27 -24 -20 -15  -9;
                    -45 -44 -42 -39 -35 -30 -24;
                     -63 -62 -60 -57 -53 -48 -42]
m      % Ismember. Implicit display
       % STACK: 1



1

05AB1E , 11 बाइट्स

ÅT3*+8*>ŲZ

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

व्याख्या

ÅT            # get a list of triangle numbers upto input
  3*          # multiply each by 3
    +         # add input to each
     8*       # multiply each by 8
       >      # increment each
        Ų    # check each for squareness
          Z   # max

यह इस तथ्य पर आधारित है कि यदि विषम विषम वर्ग है तो संख्या T त्रिकोणीय 8T+1है।
हम उन त्रिकोणों की सूची पर शुरू करते हैं जिन्हें हम काट सकते हैं, उनके आधार पर संभव बड़े त्रिकोणों की गणना करें और जांचें कि क्या यह वास्तव में त्रिकोणीय है।


1

जाप , 16 बाइट्स

ò å+ d@Zd_-3*X¶U

कोशिश करो | सभी परीक्षण मामलों की जाँच करें


व्याख्या

                     :Implicit input of integer U
ò                    :Range [0,U]
  å+                 :Cumulative reduction by addition
     d@              :Does any X in array Z return true when passed through this function?
       Zd_           :  Does any element in Z return true when passe through this function?
          -3*X       :    Subtract 3*X
              ¶U     :    Check for equality with U

विकल्प

ò å+ £Zm-3*XÃdøU

कोशिश करो


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.