การนับขึ้นและลงในขณะที่เพิ่มขึ้นสองเท่า


14

การป้อนข้อมูล:

รายการ / เวกเตอร์ที่ไม่มีค่าว่างซึ่งแต่ละองค์ประกอบมีค่า / ตัวอักษรเพื่อระบุว่าคุณจะนับรวมหรือไม่ หรือลง ฉันจะใช้1และ-1แต่คุณสามารถเลือกสิ่งที่คุณต้องการ คุณสามารถใช้สองค่าเท่านั้นคุณไม่สามารถใช้1,2,3...และ-1,-2,-3...สำหรับขึ้นและลงตามลำดับ

ท้าทาย:

คุณจะใช้ตัวเลขในเรขาคณิตแบบ1, 2, 4, 8, 16, 32 ... ทุกครั้งที่คุณเริ่มนับขึ้นหรือลงคุณจะนับทีละ1จากนั้น2จากนั้น4และต่อไปเรื่อย ๆ หากคุณเปลี่ยนและเริ่มนับด้วยวิธีอื่นคุณจะลบ 1จากนั้น2จากนั้น4และต่อไปเรื่อย ๆ ผลลัพธ์จะเป็นตัวเลขที่คุณได้รับในท้ายที่สุด

ตัวอย่าง:

ในตัวอย่างด้านล่างบรรทัดแรกคืออินพุตบรรทัดที่สองคือตัวเลขที่คุณกำลังนับขึ้น / ลงบรรทัดที่สามคือผลรวมสะสมและบรรทัดสุดท้ายคือเอาต์พุต

ตัวอย่างที่ 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

ตัวอย่างที่ 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

อย่างที่คุณเห็นค่าแรก1หรือ-1"รีเซ็ต" ค่าที่เรากำลังนับและลำดับต่อเนื่องของ1หรือ-1หมายถึงการเพิ่มค่าเป็นสองเท่า

ตัวอย่างที่ 3:

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

กรณีทดสอบเพิ่มเติมเพื่อพิจารณากรณีมุมที่อาจเกิดขึ้น

อินพุตอยู่บนบรรทัดแรก เอาต์พุตอยู่ที่วินาที

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

นี่คือเพื่อการส่งที่สั้นที่สุดในแต่ละภาษาชนะ

คำตอบ:



6

MATL , 6 ไบต์

Y'Wq*s

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย

[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

Japtap , 8 6 ไบต์

-2 ไบต์ขอบคุณ @ETHproductions

ò¦ xì2

ลองออนไลน์!

คำอธิบาย

อินพุตโดยนัย: [1, 1, 1, -1, -1, -1, -1, 1, 1]

ò¦

อาร์เรย์อินพุตพาร์ติชัน ( ò) ระหว่างอิลิเมนต์ ( ¦) ที่แตกต่างกัน:
[[1, 1, 1], [-1, -1, -1, -1], [1, 1]]

ì2

แมปพาร์ติชันแต่ละตัวแยกวิเคราะห์เป็นอาร์เรย์ของ2ตัวเลขฐาน( ì):[7, -15, 3]

x

รับผลรวม ( x) ของอาร์เรย์ผลลัพธ์:-5


เทคนิคที่ดี ผมเชื่อว่าคุณสามารถเปลี่ยน®ì2Ãxไปxì2เพื่อประหยัดไบต์ที่สอง
ETHproductions

@ETHproductions ผู้ชายคุณได้โพสต์ของฉันแล้ว ขอบคุณอีกครั้ง!
Justin Mariner

5

Cubix , 65 ไบต์

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

ลองออนไลน์!

        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
\ . . . . . . . . . . . . . . .
        . . . .
        . . . .
        . . . .
        . . . .

ดูมันทำงาน

ตามคำอธิบายสั้น ๆ ของสิ่งนี้:

  • อ่านในแต่ละจำนวนเต็ม (1 หรือ -1) และเปรียบเทียบกับก่อนหน้า ถ้า:
    • ผลักไปที่ด้านล่างเดียวกับจุดเริ่มต้นของเคาน์เตอร์
    • อื่นนำเคาน์เตอร์ไปด้านบนและเพิ่ม / ลดตามความเหมาะสม
  • เมื่ออินพุตเสร็จแล้วให้แต่ละตัวนับขึ้นไปด้านบนและจัดการเชิงลบทำ 2 ^ ตัวนับ - 1
  • รวมผลลัพธ์และผลลัพธ์


3

R , 32 ไบต์

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

ลองออนไลน์!

นี่เป็นวิธีการเดียวกับวิธีอื่น ๆ ที่นี่

ด้วยอินพุตของ -1 -1 1 1 -1 -1 -1

  • ทำการเข้ารหัส Run Length บนอินพุท ผลลัพธ์ที่มีความยาว2, 2, 3และค่า-1, 1, -1
  • ทำ 2 ต่อความยาว - 1 ผลลัพธ์ 3, 3, 7
  • คูณด้วยค่า RLE ที่ให้ -3, 3, -7
  • ส่งคืนผลรวม -7



2

C ++ 14, 58 ไบต์

[](auto v,int&s){int p=s=0;for(auto x:v)s+=p=x*p<1?x:2*p;}

รับอินพุตผ่านvอาร์กิวเมนต์ ( std::vectorหรือคอนเทนเนอร์ iterable ใด ๆ ) เอาต์พุตไปยังsอาร์กิวเมนต์ (โดยการอ้างอิง) องค์ประกอบของแต่ละคนvจะต้องเป็นอย่างใดอย่างหนึ่งหรือ1-1

ตัวอย่างการใช้งานและกรณีทดสอบ


2

Brachylogขนาด 13 ไบต์

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

ลองออนไลน์!

Brachylog ใช้แทน_-

คำอธิบาย:

?ḅ⟨{ȧᵐ~ḃ}×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 ไบต์)

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

ชุดทดสอบออนไลน์ชุดทดสอบออนไลน์นี่คือบล็อกที่ไม่ระบุชื่อ (ฟังก์ชัน) ซึ่งใช้อาร์เรย์ของ ints บนสแต็กและปล่อย int ไว้บนสแต็ก การทดสอบครั้งล่าสุดแสดงให้เห็นว่ามันจัดการกับอาร์เรย์ที่ว่างเปล่าอย่างถูกต้องให้ 0

วิธีการคือการเข้ารหัสความยาวการรันตรงไปตรงมาแล้วตามด้วยการถอดรหัสความยาวการรันแบบแมนนวลของแต่ละการแปลงและการแปลงฐาน ใช้ในตัวสำหรับการทำงานที่มีความยาวถอดรหัสฉันจะได้รับหนึ่งไบต์มากขึ้นด้วยหรือ{e`1/:e~2fb1b}{e`{ae~2b}%1b}



1

Haskell, 54 53 ไบต์

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

ลองออนไลน์!

การเรียกซ้ำง่าย ๆ ที่เพิ่มตัวสะสมเป็นสองเท่าkหรือรีเซ็ตเป็น1/ -1และเพิ่มค่าของแต่ละขั้นตอน





โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.