वैकल्पिक संख्या


12

सकारात्मक पूर्णांक के सरणी पर विचार करें:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, ...

फिर, उन्हें संक्षिप्त करें:

1234567891011121314151617181920212223242526...

और फिर उन्हें चर लंबाई के टुकड़ों में विभाजित करें, प्रत्येक लंबाई एन वें सकारात्मक पूर्णांक के बराबर होती है :

[1][23][456][7891][01112][131415][1617181][92021222][324252627][2829303132] ...
---------------------------------------------------------------------------
 1  2    3     4     5       6       7        8          9          10      ...

कार्य

पूर्णांक N (1-अनुक्रमण के लिए सकारात्मक या 0-अनुक्रमण के लिए गैर-ऋणात्मक) को देखते हुए , आपका कार्य N th chunk में अंकों के डेल्टा के योग (लगातार अंक के बीच अंतर) का उत्पादन करना है।

उदाहरण और परीक्षण के मामले

1-अनुक्रमित परीक्षण के मामले। यदि आप 0-अनुक्रमित वाले चाहते हैं, तो बस एन डे्रसमेंट एन।

N, Chunk, Deltas, Sum

1  -> 1          -> []                               -> 0
2  -> 23         -> [1]                              -> 1
3  -> 456        -> [1, 1]                           -> 2
4  -> 7891       -> [1, 1, -8]                       -> -6
5  -> 01112      -> [1, 0, 0,1]                      -> 2
6  -> 131415     -> [2, -2, 3, -3, 4]                -> 4
7  -> 1617181    -> [5, -5, 6, -6, 7, -7]            -> 0
8  -> 92021222   -> [-7, -2, 2, -1, 1, 0, 0]         -> -7
9  -> 324252627  -> [-1, 2, -2, 3, -3, 4, -4, 5]     -> 4
10 -> 2829303132 -> [6, -6, 7, -6, -3, 3, -2, 2, -1] -> 0

कोडगॉल्फ-हैकथॉन पर पहेली 2 (मैं वहां भी मूल लेखक हूं, इसलिए मुझे फटकार लगाने की अनुमति है)। संबंधित, प्रेरणासंबंधित



1
लगातार अंकों के बीच सभी अंतरों का योग केवल अंतिम और पहले के बीच का अंतर है।
केस्मार्ट

जवाबों:


5

जावास्क्रिप्ट (ईएस 6), 54 53 51 50 बाइट्स

@ बाइट के लिए 1 बाइट का धन्यवाद सहेजा गया

0 अनुक्रमित।

k=>-(n=1,g=s=>s[x=k*-~k/2]-s[x+k]-n||g(s+n++))``-n

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


शून्य-अनुक्रमित:k=>-(n=1,g=s=>s[x=k*-~k/2]-s[x+k]-n||g(s+n++))""-n
tsh

4

APL (Dyalog) , 32 बाइट्स

{+/2-⍨/⍎¨⍵↑(+/⍳⍵-1)↓' '~⍨⍕⍳+/⍳⍵}

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

कैसे?

+/⍳⍵- की राशि 1के लिएn

- उस की सीमा बनाओ

' '~⍨⍕ - स्ट्रिंग में, बिना रिक्त स्थान के

(+/⍳⍵-1)↓- पहले (का योग ड्रॉप 1करने के लिए n-1) वर्ण

⍵↑- अगले nचार्ट रखें

⍎¨ - पूर्णांक को पूर्णांक में बनाएं

2-⍨/ - अंतर सूची (प्रत्येक 2 वस्तुओं के लिए पिछड़ा घटाव)

+/ - इसे जोड़ो।


4

भूसी , 9 बाइट्स

ΣẊ-!SCṁdN

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

हैकाथॉन का मेरा समाधान।

स्पष्टीकरण:

ΣẊ-!SCṁdN⁰
    S      (x -> y -> z):f -> (x -> y):g -> x:x :: return f(x, g(x))
     C      f= [num]:x -> [x]:y -> [x] :: cut y in pieces where each piece has its respective length in x
      ṁ     g= (x -> [y]):f -> ([x]:x -> [y]) :: maps f over x then concatenate
       d     f= num:x -> [num] :: return decimal digits of x
        N   x= sequence of natural numbers [1..]
   !     ⁰ [x]:x -> num:y -> x :: get yth (impl. input) element of x (above result)
 Ẋ         (x -> x -> y):f -> [x]:x -> [y] :: map f over overlapping pairs of x (above result)
  -         f= num:x -> num:y -> num :: return y - x
Σ          [num]:x -> num :: return sum of x (above result)

4

हास्केल , 61 60 बाइट्स

l=fromEnum<$>(show=<<[1..])
f n|t<-sum[2..n]=l!!t-l!!(t-n+1)

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

स्पष्टीकरण:

किसी सूची के डेल्टा का योग अंतिम और पहले तत्व के बीच अंतर के समान है।

पिछले तत्व (शून्य अनुक्रमित) है t, triangle(n)-1 = sum[2..n]। पहला तत्व, तब है t-n+1, क्योंकि सूची में nतत्व हैं।




3

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

f=(n,s=i='',m=n*-~n/2)=>s[m]?s[m]-s[m-n+1]:f(n,s+i++)
<input type=number min=1 oninput=o.textContent=f(this.value)><pre id=o>

1 अनुक्रमित। पिछला 60-बाइट अप्रतिसादी संस्करण:

f=
(n,s=[...Array(n*n+1).keys()].join``)=>s[m=n*-~n/2]-s[m-n+1]
<input type=number min=1 oninput=o.textContent=f(this.value)><pre id=o>





1

पर्ल 6 ,  58  55 बाइट्स

{[+] ($_=(1..*).map(|*.comb).rotor(1..*)[$^a])[1..*]Z-@$_}

झसे आज़माओ

{[+] ($_=(1..*).map(|*.comb)[^$^a+[+] ^$a])[1..*]Z-@$_}

झसे आज़माओ

विस्तारित:

{ # bare block lambda with placeholder parameter 「$a」
  [+]  # reduce using &infix:«+» the following


    (
      $_ =                # store into 「$_」 for later use

        ( 1 .. * )        # Range of all positive integers
        .map( | *.comb )\ # split into digits and flatten into single list

        [                 # index into the sequence (1 based)

          ^$^a            # Range up to (and excluding) the input
                          # 「0 ..^ $a」 or 「0 .. $a-1」

          +               # shift it up by
          [+] ^$a         # the sum of the values up to (and excluding) the input

        ]

    )[ 1 .. *]            # skip the first value

    Z-                    # zip using &infix:«-»

    @$_                   # 「$_」 used as a List
}

1

PHP , 163 147 बाइट्स

$v=$argv[1];for($i=1;$i<=$v*$v;$i++){$s.=$i;$j+=$i<$v?$i:0;}$s=array_slice(str_split($s),$j,$v);for($i=0;$i<$v-1;$i++){$k+=$s[$i+1]-$s[$i];}echo$k;

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

कोड गोल्फिंग में मेरा पहला प्रयास ... भावना है कि यह छोटा हो सकता है

संपादित करें: कई झटपटों को हटाकर 16 बाइट्स सहेजे गए


साइट पर आपका स्वागत है! आप PHP में गोल्फ के लिए इन युक्तियों के माध्यम से देखना चाहते हो सकता है
caird coinheringaahing



0

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

²RDFṫ³ḶS‘¤ðḣIS

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

व्याख्या

²RDFṫ³ḶS‘¤ðḣIS    Main Link
²                  Square input
 R                 Range: [1,2,3,..,n^2]
  D                Digits: [1,2,...,[1,0],[1,1],...]
   F               Flatten list
     ³ḶS‘¤         n(n-1)/2+1
    ṫ              Remove the first n(n-1)/2+1 elements from the list of digits
          ðḣ       Take the first n digits of the list. ð is needed to prevent I from acting on n.
            I      Increment. Take the diferences
             S     Sum

मैंने मूल रूप से रेंज (n (n + 1) / 2) लेकर शुरुआत की थी, लेकिन चूंकि सूची को समाप्त करने से पहले आपके पास अतिरिक्त अंक हो सकते हैं इसलिए मैंने इसे रेंज (n ^ 2) में बदल दिया। आपके पास वैसे भी 1-9 के बाद अतिरिक्त अंक हैं।


+²HRDFṫЀ³ḶḣЀRS€‘¤ṪðḣISमूल (सफल लेकिन लंबी) कोशिश
dylnan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.