Số xen kẽ


12

Hãy xem xét các mảng số nguyên dương:

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

Sau đó, nối chúng:

1234567891011121314151617181920212223242526...

Và sau đó chia chúng thành các đoạn có độ dài thay đổi, mỗi chiều dài bằng số nguyên dương thứ N :

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

Bài tập

Cho một số nguyên N (dương cho 1 chỉ mục hoặc không âm cho lập chỉ mục 0), nhiệm vụ của bạn là xuất tổng số deltas của các chữ số trong đoạn thứ N (sự khác biệt giữa các chữ số liên tiếp).

Ví dụ & trường hợp thử nghiệm

Các trường hợp kiểm tra 1 chỉ số. Nếu bạn muốn những người có chỉ số 0, chỉ cần giảm N.

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

Câu đố 2 về CodeGolf-Hackathon (Tôi cũng là tác giả gốc ở đó, vì vậy tôi được phép đăng lại). Liên quan, Cảm hứng . Liên quan .



1
Tổng của tất cả các khác biệt giữa các chữ số liên tiếp chỉ là sự khác biệt giữa cuối cùng và đầu tiên.
KSmarts

Câu trả lời:


5

JavaScript (ES6), 54 53 51 50 byte

Đã lưu 1 byte nhờ @tsh

Chỉ số 0.

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

Các trường hợp thử nghiệm


Không có chỉ mục:k=>-(n=1,g=s=>s[x=k*-~k/2]-s[x+k]-n||g(s+n++))""-n
tsh

4

APL (Dyalog) , 32 byte

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

Hãy thử trực tuyến!

Làm sao?

+/⍳⍵- tổng 1đển

- làm cho phạm vi đó

' '~⍨⍕ - thành chuỗi, không có dấu cách

(+/⍳⍵-1)↓- thả đầu tiên (tổng 1đến n-1) chars

⍵↑- giữ các nký tự tiếp theo

⍎¨ - biến mọi char thành số nguyên

2-⍨/ - danh sách khác biệt (phép trừ ngược cho mỗi 2 mục)

+/ - Tổng kết lại.


4

Husk , 9 byte

ΣẊ-!SCṁdN

Hãy thử trực tuyến!

Giải pháp của tôi cho Hackathon.

Giải trình:

ΣẊ-!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

Haskell , 61 60 byte

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

Hãy thử trực tuyến!

Giải trình:

Tổng số deltas của một danh sách giống như sự khác biệt giữa phần tử cuối cùng và phần tử đầu tiên.

Phần tử cuối cùng (không có chỉ mục) là t, triangle(n)-1 = sum[2..n]. Phần tử đầu tiên là t-n+1danh sách có ncác phần tử.


4

Python 2 , 80 byte

n=input()
s=map(int,''.join(map(str,range(2**n))))
print s[n*-~n/2]-s[~-n*n/2+1]

Hãy thử trực tuyến!

2**ndĩ nhiên là quá mức cần thiết, nhưng nó ngắn hơn một byte so với thứ gì đó như thế n*n+1.



3

JavaScript (ES6), 60 57 53 byte

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 chỉ mục. Phiên bản không hồi quy 60 byte trước đó:

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

Perl 6 ,  58  55 byte

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

Kiểm tra nó

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

Kiểm tra nó

Mở rộng:

{ # 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 byte

$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;

Hãy thử trực tuyến!

Nỗ lực đầu tiên của tôi về chơi golf mã ... có cảm giác rằng điều này có thể ngắn hơn

Chỉnh sửa: đã lưu 16 byte bằng cách xóa một số cảnh báo


Chào mừng đến với trang web! Bạn có thể muốn xem qua các mẹo chơi gôn này trong PHP
caird coinheringaahing



0

Thạch , 14 byte

²RDFṫ³ḶS‘¤ðḣIS

Hãy thử trực tuyến!

Giải trình

²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

Ban đầu tôi bắt đầu bằng cách lấy phạm vi (n (n + 1) / 2) nhưng vì bạn có thể có thêm chữ số ở cuối danh sách trước khi cắt nó, tôi đã thay đổi nó thành phạm vi (n ^ 2). Bạn vẫn có thêm chữ số sau 1-9.


+²HRDFṫЀ³ḶḣЀRS€‘¤ṪðḣISnỗ lực ban đầu (thành công nhưng lâu dài)
dylnan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.