Đếm lên và xuống trong khi nhân đôi số gia


14

Đầu vào:

Danh sách / vectơ không trống trong đó mỗi phần tử giữ một giá trị / ký tự, cho biết bạn sẽ đếm lên hay xuống . Tôi sẽ sử dụng 1-1, nhưng bạn có thể chọn bất cứ thứ gì bạn thích. Bạn chỉ có thể sử dụng hai giá trị, bạn không thể sử dụng 1,2,3...-1,-2,-3..., tương ứng lên và xuống.

Thử thách:

Bạn sẽ sử dụng những con số trong chuỗi hình học 1, 2, 4, 8, 16, 32 ... . Mỗi khi bạn bắt đầu đếm lên hoặc xuống, bạn sẽ đếm theo số gia 1 , rồi 2 , rồi 4 , v.v. Nếu bạn thay đổi và bắt đầu đếm theo cách khác thì bạn sẽ trừ đi 1 , rồi 2 , rồi 4 và cứ thế. Đầu ra sẽ là số bạn nhận được cuối cùng.

Ví dụ:

Trong ví dụ dưới đây, dòng đầu tiên là đầu vào, dòng thứ hai là các số bạn đang đếm lên / xuống, dòng thứ ba là tổng tích lũy và dòng cuối cùng là đầu ra.

Ví dụ 1:

1   1   1   1   1   1   1   1   1   1   
1   2   4   8   16  32  64  128 256 512 
1   3   7   15  31  63  127 255 511 1023
1023

Ví dụ 2:

1   1   1   1   1   1   -1  -1  -1  -1  1   1   1
1   2   4   8   16  32  -1  -2  -4  -8  1   2   4
1   3   7   15  31  63  62  60  56  48  49  51  55
55

Như bạn có thể thấy, lần đầu tiên 1hoặc -1"đặt lại" giá trị chúng ta đang đếm và các chuỗi liên tiếp 1hoặc -1có nghĩa là nhân đôi giá trị.

Ví dụ 3:

-1  -1  1   1   -1  -1  -1
-1  -2  1   2   -1  -2  -4
-1  -3  -2  0   -1  -3  -7
-7

Một số trường hợp thử nghiệm bổ sung để giải thích cho một số trường hợp góc tiềm năng.

Đầu vào là trên dòng đầu tiên. Đầu ra là trên thứ hai.

1
1
-------    
-1
-1
-------
-1   1  -1   1  -1   1  -1   1  -1   1  -1   1
0

Đây là vì vậy bài nộp ngắn nhất trong mỗi ngôn ngữ sẽ thắng.

Câu trả lời:



6

MATL , 6 byte

Y'Wq*s

Hãy thử trực tuyến! Hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình

Xem xét đầu vào [1 1 1 1 1 1 -1 -1 -1 -1 1 1 1].

     % Implicit input
     % STACK: [1 1 1 1 1 1 -1 -1 -1 -1 1 1 1]
Y'   % Run-length encoding
     % STACK: [1 -1 1], [6 4 3]
W    % Exponentiation with base 2, element-wise
     % STACK: [1 -1 1], [64 16 8]
q    % Subtract 1
     % STACK: [1 -1 1], [63 15 7]
*    % Multiply, element-wise
     % STACK: [63 -15 7]
s    % sum of array
     % STACK: 55
     % Implicit display

6

Japt , 8 6 byte

-2 byte nhờ @ETHproductions

ò¦ xì2

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

Giải trình

Nhập liệu ngầm định: [1, 1, 1, -1, -1, -1, -1, 1, 1]

ò¦

Phân vùng mảng đầu vào ( ò) giữa các ¦phần tử ( ) khác nhau :
[[1, 1, 1], [-1, -1, -1, -1], [1, 1]]

ì2

Ánh xạ mỗi phân vùng vào chính nó được phân tích cú pháp dưới dạng một mảng gồm các 2chữ số cơ sở ( ì):[7, -15, 3]

x

Lấy tổng ( x) của mảng kết quả:-5


Kỹ thuật đẹp. Tôi tin rằng bạn có thể thay đổi ®ì2Ãxđể xì2cứu hai byte.
Sản phẩm ETH

@ETHproductions Man, bạn đã có tất cả các bài viết của tôi. Cảm ơn một lần nữa!
Justin Mariner

5

Khối , 65 byte

W(?\q.p)w.;0.w;/0>I!U-unP(nwUs;q\^q:;^!u?P(w!u+w.;;>2p!u/@Os..sr\

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

        W ( ? \
        q . p )
        w . ; 0
        . w ; /
0 > I ! U - u n P ( n w U s ; q
\ ^ q : ; ^ ! u ? P ( w ! u + w
. ; ; > 2 p ! u / @ O s . . s r
\ . . . . . . . . . . . . . . .
        . . . .
        . . . .
        . . . .
        . . . .

Xem nó chạy

Như một lời giải thích ngắn gọn về điều này:

  • Đọc trong mỗi số nguyên (1 hoặc -1) và so sánh nó với trước đó. Nếu:
    • cùng đẩy nó xuống đáy khi bắt đầu một bộ đếm
    • khác đưa bộ đếm lên đầu và tăng / giảm nó khi thích hợp.
  • Khi đầu vào kết thúc, đưa mỗi bộ đếm lên đầu và xử lý các phủ định làm 2 ^ bộ đếm - 1
  • Tổng hợp kết quả và đầu ra

4

JavaScript (ES6), 38 byte

a=>a.map(e=>r+=d=d*e>0?d+d:e,r=d=0)&&r

3

R , 32 byte

sum((2^(R=rle(scan()))$l-1)*R$v)

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

Đây là phương pháp tương tự như một vài người khác ở đây.

Với đầu vào của -1 -1 1 1 -1 -1 -1

  • Thực hiện mã hóa chiều dài chạy trên đầu vào. Kết quả với độ dài 2, 2, 3và giá trị-1, 1, -1
  • Thực hiện 2 với sức mạnh của độ dài - 1. Kết quả trong 3, 3, 7
  • Nhân với các giá trị RLE cho -3, 3, -7
  • Trả lại tổng -7




2

Brachylog , 13 byte

ḅ⟨{ȧᵐ~ḃ}×h⟩ᵐ+

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

Sử dụng Brachylog _ thay vì -.

Giải trình:

?ḅ⟨{ȧᵐ~ḃ}×h⟩ᵐ+. Predicate (implicit ?.)
?               The input
 ḅ              A list where its elements' elements are equal, and when concatenated is ?
            ᵐ   The result of mapping this predicate over ?
  ⟨        ⟩      The result of forking two predicates over ? with a third
   {    }           The result of this predicate on ?
     ᵐ                The result of mapping this predicate over ?
    ȧ                   The absolute value of ?
      ~               An input where the result of this predicate over it is ?
       ḃ                A list that represents the digits of ? in base I (default 2)
          h         An object that is the first element of ?
         ×          A number that is the product of ?
             +  A number that is the sum of ?
              . The output




1

CJam (13 byte)

{e`{(*2b}%1b}

Bộ kiểm tra trực tuyến . Đây là một khối ẩn danh (hàm) lấy một mảng int trên ngăn xếp và để lại một int trên ngăn xếp. Thử nghiệm cuối cùng cho thấy rằng nó xử lý một mảng trống chính xác, cho 0.

Cách tiếp cận là mã hóa độ dài chạy đơn giản, theo sau là giải mã độ dài chạy thủ công của mỗi lần chuyển đổi cơ sở và chạy. Sử dụng giải mã có độ dài chạy tích hợp, tôi nhận được thêm một byte với {e`1/:e~2fb1b}hoặc {e`{ae~2b}%1b}.



1

Haskell, 54 53 byte

k#(a:b:c)=k+last(b:[k*2|a==b])#(b:c)
k#_=k
(#)=<<head

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

Một đệ quy đơn giản làm tăng gấp đôi bộ tích lũy khoặc đặt lại thành 1/ -1và thêm các giá trị của mỗi bước.


0

Toán học, 60 byte

Tr[Last@*Accumulate/@(#[[1]]2^(Range@Tr[1^#]-1)&/@Split@#)]&


0

Java, 91 byte

int f(int[]a){int s=0,r=0,i=-1;while(++i<a.length)r+=s=s!=0&s>0==a[i]>0?2*s:a[i];return r;}

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.