अंकों की संख्या


20

एक त्रिकोणीय संख्या एक संख्या है जिसे लगातार सकारात्मक पूर्णांक के योग के रूप में व्यक्त किया जा सकता है, 1 से शुरू। उन्हें सूत्र के साथ भी व्यक्त किया जा सकता है n(n + 1) / 2, जहां nकुछ सकारात्मक पूर्णांक है।

एक नंबर के डिजिटंगुलर समकक्ष की गणना निम्न तरीके से की जाती है:

  1. किसी संख्या को उसके अंकों के एक सरणी में विभाजित करें जैसे 613 => [6 1 3]
  2. सरणी में प्रत्येक संख्या के लिए, nवें त्रिकोणीय संख्या की गणना करें ;[6 1 3] => [21 1 6]
  3. परिणामी सरणी योग; [21 1 6] => 28

आपका कार्य एक पूर्णांक दिया जाता है n, बार-बार nडिजिटाइंगर समकक्ष की गणना करता है, जब तक कि परिणाम 1 के बराबर नहीं होता है, तब सभी मानों की गणना की जाती है। आप किसी भी क्रम में मानों का उत्पादन कर सकते हैं, और सरणी के प्रारंभ में मूल संख्या के वैकल्पिक समावेश के साथ। यह एक इसलिए सबसे छोटा कोड जीतता है।

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

23 => 9 45 25 18 37 34 16 22 6 21 4 10 1
72 => 31 7 28 39 51 16 22 6 21 4 10 1
55 => 30 6 21 4 10 1
78 => 64 31 7 28 39 51 16 22 6 21 4 10 1
613 => 28 39 51 16 22 6 21 4 10 1
8392 => 90 45 25 18 37 34 16 22 6 21 4 10 1
11111 => 5 15 16 22 6 21 4 10 1
8592025 => 117 30 6 21 4 10 1
999999999 => 405 25 18 37 34 16 22 6 21 4 10 1

1
क्या हम परिणामी सरणी में पहले की तरह मूल संख्या शामिल कर सकते हैं?
उरियेल

1
हम कैसे जानते हैं कि यह हमेशा 1 से नीचे चला जाता है?
बस सुंदर कला

5
मान लीजिए कि एक संख्या इससे बड़ी है 141और इसमें nअंक हैं। अधिकतम मूल्य अपनी digitangular समकक्ष हो सकता है 45nतो, digi-△(x) ≤ 45n < 45(1+log_10(x))है, और के लिए x > 141, हमारे पास है 45(1+log_10(x)) < x, इसलिए digi-△(x) ≤ x-1के लिए x > 141, और एक बार हम पारित 141सीमा, ठीक है, हम कार्यक्रमों के माध्यम से साबित मजबूर जानवर।
बस सुंदर कला

1
क्या मैं अपने आउटपुट के अंत में 1 को पीछे छोड़ सकता हूं?
बस सुंदर कला

1
संबंधित: डिजिटैंगुलर संख्याएँ , वैकल्पिक प्रमाण मांगती हैं कि यह क्रम अंततः 1 हो जाता है।
बस सुंदर कला

जवाबों:



7

05AB1E , 6 5 बाइट्स

Δ=SLO

इसे ऑनलाइन आज़माएं! संपादित करें: @Emigna के लिए 1 बाइट धन्यवाद सहेजा गया। स्पष्टीकरण:

Δ       Repeat until value doesn't change
 =      Print current value
  S     Split into characters
   L    Turn each character into range from 1 to N
    O   Sum

यदि आप प्रतिस्थापित करते हैं S, तो आप एक को छोड़ सकते हैं O
एमिगा

@Emigna ... ऐसा Lव्यवहार भी क्यों करता है ?
नील

अगर मुझे सही से याद है तो यह एक बग था जो उपयोगी साबित हुआ और एक फीचर के रूप में बना रहा। मुझे लगता है कि यह एक पहला तरीका था जिसने वेक्टर किया।
एमिग्ना

4

जे, 20 19 बाइट्स

(1#.2!1+,.&.":)^:a:

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

मूल संख्या को भी आउटपुट करता है।

व्याख्या

(1#.2!1+,.&.":)^:a:
               ^:a:  Apply until input converges, storing all results in an array
(1#.2!1+,.&.":)      Digitangular sum
        ,.&.":         Split to digits
          &.":           Convert to string, apply left function, then undo conversion
        ,.               Ravel items (make array of singleton arrays of items)
                         This ensures that when cast back to integers, the digits are split.
      1+               Add 1 to each
    2!                 Compute (n choose 2) on each (nth triangular number)
 1#.                   Sum (debase 1)

1
[:+/-> 1#.म्याऊ!
FrownyFrog

@FrownyFrog एक मूल चाल नहीं है, हालांकि जब मैं याद करता हूं तो मैं निश्चित रूप से इसका पर्याप्त उपयोग करता हूं।
कोल

4

एपीएल (डायलॉग) , 23 20 17 बाइट्स

3 बाइट्स @ngn की बदौलत बच गए

{⍵∪⍨+/∊⍳¨⍎¨⍕⊃⍵}⍣≡

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

कैसे?

⍵∪⍨ - करंट एरे को प्रीपेन्ड करें

+/ - का योग

- चपटा हुआ

⍳¨ - प्रत्येक की सीमा

⍎¨⍕ - का अंक

⊃⍵ - पिछला मूल्य

⍣≡अभिसरण तक। पहले 1 में शामिल होने के बाद (यूनियन) का उपयोग सुनिश्चित करता है, अगले को विशिष्ट विशिष्टता के कारण बाहर रखा जाएगा, और सरणी अभिसरण हो जाएगी।


जिज्ञासा से बाहर, यह कितना समय होगा यदि आपको मूल मूल्य के रूप में अच्छी तरह से उत्पादन करने की अनुमति नहीं थी?
21:00

2 बाइट्स @cairdcoinheringaahing - 1↓(पहले ड्रॉप)
ऊरीएल

@Uriel यहां बिजली की सीमा (⍣≡) पुनरावृत्ति की तुलना में एक छोटा समाधान देती है: {el + / it's} power लेकिन यह शर्म की बात है एपीएल के पास सभी पुनरावृत्तियों को इकट्ठा करने का एक संक्षिप्त तरीका नहीं है। अभिसरण तक एक समारोह: ⍵ (f⍵) (f⊢⍵2 () (f⊢⍵3 conver) ...
ngn

@ धन्यवाद धन्यवाद! मैंने पॉवर ऑपरेटर का उपयोग करने की कोशिश की, लेकिन मैंने इस तथ्य के बारे में नहीं सोचा कि यह 1 के बाद अभिसरण करता है। जल्द ही अपडेट होगा
Uriel

@ {+/∊⍳¨⍎¨⍕⎕←⍵}⍣≡अंतिम 1 प्रिंट किए बिना किसी भी विचार का उपयोग कैसे करें ?
एरियल

3

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

f 1=[1]
f x=x:f(sum$do d<-show x;[1..read[d]])

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

f 1=[1]                     -- if x == 1, return the singleton list [1]
f x=                        -- else
         do d<-show x       --  for each char 'd' in the string representation of x
                            --    (using the list monad)
           [1..read[d]]     --  make a list of [1..d]
                            --    (the list monad concatenates all those lists into a single list)
        sum                 --  sum those numbers
      f                     --  call f on it
    x:                      --  and put x in front of it 

संपादित करें: @ H.PWiz ने एक बाइट को बचाया। धन्यवाद!



2

वोल्फ्राम भाषा (गणितज्ञ) , ४३ ४१ बाइट्स

Echo@#>1&&#0[#.(#+1)/2&@IntegerDigits@#]&

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

यह काम किस प्रकार करता है

अभिव्यक्ति #.(#+1)/2&@IntegerDigits@#डिजिटंगुलर प्रतिरूप देता है #। हम Echoइनपुट करते हैं, &&यदि हम पहुंच गए हैं 1, तो रोकने के लिए शॉर्ट-सर्किट मूल्यांकन का उपयोग करें , और अन्यथा डिजिटेंगुलर समकक्ष पर पुनरावृत्ति करें।


.चाल के लिए मार्टिन एंडर को -2 बाइट्स धन्यवाद : Trअगर हम #(#+1)/2डॉट उत्पाद द्वारा गुणन को प्रतिस्थापित करते हैं, तो हमें अंकों का योग करने के लिए उपयोग करने की आवश्यकता नहीं है #.(#+1)/2


2
केवल अब आपका उत्तर देखा। आप से बचने के लिए स्केलर उत्पाद चाल का उपयोग करके मुझे हरा सकते हैं Tr:Echo@#>1&&#0[#.(#+1)/2&@IntegerDigits@#]&
मार्टिन एंडर

@MartinEnder धन्यवाद, यह एक साफ चाल है। मुझे आश्चर्य है कि अगर वहाँ भी कोई गोल्फर करने के लिए "एक निश्चित बिंदु के रास्ते पर इस समारोह के सभी पुनरावृत्तियों प्रिंट" (अनिवार्य रूप से, FixedPointListकि कैसे तय बिंदु दो बार प्रिंट के अलावा को लागू)। ऐसा लगता है कि पहले आना चाहिए था।
मिशा लावरोव

2

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

3 बाइट बचाने के लिए मिशा लावरोव को धन्यवाद।

#//.x_:>(y=IntegerDigits@Echo@x).++y/2&

इसे ऑनलाइन आज़माएं! (TIO के आसपास कोष्ठक की जरूरत है++y किसी कारण से । मेरे स्थानीय गणितज्ञ संस्थापन में यह उनके बिना काम करता है, जैसा कि इसे करना चाहिए।)

प्रत्येक मूल्य को अपनी लाइन पर प्रिंट करता है, इससे पहले >>और आरंभिक संख्या शामिल करता है।


आप मेरे उत्तर को वापस लेने जा सकते हैं #//.x_:>(y=IntegerDigits@Echo@x).++y/2&। (... हो सकता है। किसी कारण से, TIO को यह पसंद नहीं है, लेकिन इसके साथ मैथेमेटिका का जुर्माना?)
मिशा लावरोव

खैर, #//.x_:>(y=IntegerDigits@Echo@x).(++y)/2&41 बाइट्स है और टीआईओ में काम करता है। लेकिन मेरी गणित की नकल को नहीं लगता कि कोष्ठक आवश्यक हैं।
मिशा लावरोव

@ मीशालावरोव धन्यवाद। हाँ, कोई सुराग नहीं कि TIO को कोष्ठकों की आवश्यकता क्यों है, लेकिन स्क्रिप्ट फ़ाइलों में सिंटैक्स कभी-कभी थोड़ा अस्थिर होता है।
मार्टिन एंडर

1

ओम v2 ,  9  7 बाइट्स

·Ω}#ΣΣu

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

व्याख्या

          Implicit input as a string
·Ω        Evaluate until the result has already been seen, pushing intermediate results
  }       Split digits
   #      Range from 0 to N
    ΣΣ    Sum
      u   Convert to string

uअनावश्यक नहीं है ?
निक क्लिफर्ड

यह आवश्यक है अन्यथा }अंकों को विभाजित नहीं किया जाएगा
Cinaski

हम्म। यह एक बग हो सकता है। मैं इसे देख लूँगा।
निक क्लिफर्ड

1

रेटिना , 21 बाइट्स

;{:G`
.
$*1¶
1
$%`1
1

इसे ऑनलाइन आज़माएं! (व्यक्तिगत मामलों के आउटपुट को अच्छी तरह से अलग नहीं किया गया है, लेकिन प्रत्येक आउटपुट ए के साथ समाप्त होता है 1।)

प्रत्येक नंबर को अपनी लाइन पर प्रिंट करता है, क्रम में, शुरुआती संख्या सहित।

व्याख्या

;{:G`

यह कार्यक्रम का सिर्फ कुछ विन्यास है। {प्रोग्राम लूप बनाता है जब तक कि यह परिणाम को बदलने में विफल रहता है (जो एक बार हमें मिलता है 1), :प्रत्येक पुनरावृत्ति से पहले संख्या प्रिंट करता है, और ;अंतिम परिणाम को कार्यक्रम के अंत में दो बार मुद्रित होने से रोकता है। Gनो-सेशन मंच बनाने की बस मेरी हमेशा की तरह है।

.
$*1¶

प्रत्येक अंक को एकरूपता में बदलें और उसे अपनी रेखा पर रखें।

1
$%`1

प्रत्येक पंक्ति पर त्रिकोणीय संख्या की गणना करें, प्रत्येक 1को उसके उपसर्ग के साथ बदलकर । हम भी इस्तेमाल कर सकते हैंM!&`1+ यहां हैं, जो हमें प्रत्येक पंक्ति के सभी प्रत्यय देता है।

1

सभी 1एस की गणना करें , जो सभी त्रिकोणीय संख्याओं को जोड़ते हैं और परिणाम को दशमलव में परिवर्तित करते हैं।


क्या रेटिना एक ट्यूरिंग पूरी भाषा है?

@PirateBay हाँ।
मार्टिन एंडर

1

माणिक, 60 47 42 बाइट्स

-13 बाइट्स @JustinMariner द्वारा

-5 बाइट्स @ जीबी द्वारा

->x{p x=x.digits.sum{|k|k*-~k/2}while x>1}

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


आप कुल 5 बाइट्स बचाने के लिए सरणी और स्पैट ( [*...]) और परिवर्तन (k+1)को छोड़ सकते हैं -~k: इसे ऑनलाइन आज़माएं! इसके अतिरिक्त, आप एक अनाम लंबो फ़ंक्शन पर स्विच करके 8 और बचा सकते हैं: इसे ऑनलाइन आज़माएं!
जस्टिन मेरिनर

हम्म, कोई विचार क्यों मैंने सोचा कि .mapसरणियाँ नहीं ले सकता।
बस सुंदर कला

आप "मानचित्र {...}। राशि" के बजाय "योग {...}" का उपयोग कर सकते हैं और फिर "जबकि" से पहले स्थान हटा सकते हैं
GB






0

05AB1E , 20 12 बाइट्स

सहेजा 2 बाइट्स के लिए धन्यवाद caird coinheringaahing

ΔD,þ€iLO}O}}

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

व्याख्या

(पुराना संस्करण)

Δþ€iD>*;}OD1›iD,}}1,  Main program
Δ                }    Repeat until there is no changes
 þ                    Push digits of the input number
  €i    }             Apply for each digit
    D>*;              Calculate the triangular number for given digit
         O            Sum all numbers
          D1›iD,}     Print if greater than 1
                  1,  Print 1 at the end



0

चारकोल , 18 बाइट्स

W⊖Iθ«≔IΣ⭆θΣ…·0κθθ⸿

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। स्पष्टीकरण:

   θ                Input
  I                 Cast to integer
 ⊖                  Decrement
W   «               Loop while not zero
         θ          Current value
        ⭆           Map over characters and concatenate
             0      Literal character 0
              κ     Current character
           …·       Inclusive range
          Σ         Concatenate
       Σ            Sum of digits
      I             Cast to string
     ≔         θ    Assign back to value
                θ   Output latest value
                 ⸿  Move to start of next line


0

k , 19 बाइट्स

{+/(+/1+!"I"$)'$x}\

अप्रत्याशित रूप से पहले से ही तैनात एपीएल और जे समाधानों के समान काम करता है

               $x    cast x (implicit var of lambda) to string
   (         )'      apply composition (function train) to each character of string
    +/1+!"I"$        cast character to number, create list from 1 to n, sum it
 +/                  sum triangular numbers
{                }\  iterate lambda until result converges, appending each result

0

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

DRFSµÐĿ

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

  • DRFSµÐĿ: पूर्ण कार्यक्रम / विवादास्पद लिंक।

  • ÐĿ: लूप जब तक परिणाम अद्वितीय नहीं होते हैं (यदि 1 के अलावा कुछ भी दो बार होता है, तो दिए गए इनपुट में परिभाषित परिणाम नहीं होता है, क्योंकि यह 1 तक कभी नहीं पहुंचेगा)।

  • D: पूर्णांक से दशमलव में परिवर्तित करें।

  • R: रेंज (1-अनुक्रमित)। Vectorizes।

  • F: समतल और S: सम ( µबस एक नई मानद श्रृंखला बनाता है)


0

डीसी, 31 बाइट्स

[[I~d1+*2/rd0<m+]dsmxpd1<f]dsfx

फ़ंक्शन mअपने इनपुट के डिजिटेंगुलर फ़ंक्शन की गणना करता है;fपरिणाम 1 तक पहुंचने तक इसे दोहराता है।

ध्यान दें कि हम अंकों को निकालने के लिए इनपुट मूलांक का उपयोग करते हैं - इसका मतलब है कि यह किसी भी आधार प्रणाली में काम करेगा, केवल दशमलव नहीं।

डेमो

for i in 23 72 55 78 613 8392 11111 8592025 999999999
    do echo $i '=>' $(dc -e $i'[[I~d1+*2/rd0<m+]dsmxpd1<f]dsfx')
done
23 => 9 45 25 18 37 34 16 22 6 21 4 10 1
72 => 31 7 28 39 51 16 22 6 21 4 10 1
55 => 30 6 21 4 10 1
78 => 64 31 7 28 39 51 16 22 6 21 4 10 1
613 => 28 39 51 16 22 6 21 4 10 1
8392 => 90 45 25 18 37 34 16 22 6 21 4 10 1
11111 => 5 15 16 22 6 21 4 10 1
8592025 => 117 30 6 21 4 10 1
999999999 => 405 25 18 37 34 16 22 6 21 4 10 1


0

नीम , 8 बाइट्स

ͻ𝐂t𝕕𝐬D÷D

स्पष्टीकरण:

ͻ             Start infinite loop
 𝐂            Split top of stack into each of its characters
  t           Push infinite list of triangular numbers
   𝕕          For each of the characters, get the nth element in the above list.
    𝐬          Sum.
     D         Duplicate.
      ÷        If top of stack is equal to 1, break.
       D       Duplicate.
               Implicitly print all elements in the stack, concatenated.

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

स्वरूपित आउटपुट



0

PHP, 71 + 1 बाइट्स

for(;1<$n="$s"?:$argn;print$s._)for($i=$s=0;$p--||~$p=$n[$i++];)$s+=$p;

ऑनलाइन के साथ पाइप के रूप में चलाएं -nRया इसे आज़माएं । (एल्विस ऑपरेटर के लिए PHP 5.3 या बाद के संस्करण की आवश्यकता है)


एल्विस ऑपरेटर क्या है?
caird coinheringaahing

@ केयर्डकॉन्हेंरिंगाहिंग A?:B: यदि ए सत्य है तो एक और बी
टाइटस

0

++ , 32 बाइट्स जोड़ें

D,f,@,EDBFEREss
+?
y:1
W!,$f>x,O

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

पहले मूल्य का उत्पादन नहीं करता है

यह काम किस प्रकार करता है

D,f,@,   - Create a monadic function, f.
         - Example argument: [613]
      ED - Digits;   STACK = [[6 1 3]]
      BF - Flatten;  STACK = [6 1 3]
      ER - Range;    STACK = [[1 2 3 4 5 6] [1] [1 2 3]]
      Es - Sum each; STACK = [21 1 6]
      s  - Sum;      STACK = [28]

           f calculates n's digitangular counterpart

+?       - Take input;     x = 613; y = 0
y:1      - Set y to 1;     x = 613; y = 1
W!,      - While x != y...
   $f>x, -   Call f;       x =  28; y = 1
   O     -   Print x;

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