พายของฉันถูกแบ่งออกเป็นสองส่วนแล้ว?


43

เขียนโปรแกรมหรือฟังก์ชั่นที่ใช้ในรายการจำนวนเต็มบวกที่ไม่มีข้อ จำกัด คุณอาจจะถือว่าเป็นการป้อนข้อมูลในรูปแบบที่สะดวกที่เหมาะสมเช่นหรือ"1 2 3 4"[1, 2, 3, 4]

ตัวเลขในรายการอินพุตแสดงถึงชิ้นส่วนของแผนภูมิวงกลมเต็มโดยที่ขนาดแต่ละส่วนเป็นสัดส่วนกับหมายเลขที่สอดคล้องกันและชิ้นส่วนทั้งหมดจะถูกจัดเรียงรอบแผนภูมิตามลำดับที่กำหนด

ตัวอย่างเช่นพายสำหรับ1 2 3 4คือ:

1 2 3 4 ตัวอย่าง

คำถามที่รหัสของคุณต้องตอบคือ: แผนภูมิวงกลมมีการแบ่งออกเป็นสองส่วนหรือไม่? นั่นคือมีเส้นตรงที่สมบูรณ์แบบจากด้านหนึ่งของวงกลมไปยังอีกด้านหนึ่งหรือไม่โดยแยกออกเป็นสองส่วนหรือไม่?

คุณจำเป็นต้องส่งออกtruthyค่าถ้ามีอย่างน้อยหนึ่งเส้นแบ่งครึ่งและเอาท์พุทfalsyค่าถ้ามีผู้ใด

ใน1 2 3 4ตัวอย่างมีการแบ่งระหว่าง4 1และ2 3ดังนั้นผลลัพธ์จะเป็นความจริง

แต่สำหรับอินพุท1 2 3 4 5นั้นไม่มีไบเซอร์เรเตอร์ดังนั้นเอาต์พุตจะเป็นเท็จ:

1 2 3 4 5 ตัวอย่าง

ตัวอย่างเพิ่มเติม

การจัดเรียงตัวเลขต่างกันอาจลบเส้นแบ่งครึ่ง
เช่น2 1 3 4→ falsy:

2 1 3 4 ตัวอย่าง

หากมีเพียงหนึ่งหมายเลขเท่านั้นในรายการอินพุตวงกลมจะไม่ถูกแบ่งออก
เช่น10→ falsy:

10 ตัวอย่าง

อาจมีหลายเส้นแบ่งครึ่ง ตราบใดที่มีมากกว่าศูนย์ผลลัพธ์ก็จะเป็นจริง
เช่น6 6 12 12 12 11 1 12→ความจริง: (มี 3 เส้นแบ่งครึ่งที่นี่)

6 6 12 12 12 11 1 12 ตัวอย่าง

อาจมีการแบ่งเป็นสองส่วนแม้ว่าจะมองไม่เห็นก็ตาม
เช่น1000000 1000001→ falsy:

ตัวอย่าง 1000000 1000001

เช่น1000000 1000001 1→ความจริง:

ตัวอย่าง 1000000 1000001 1

(ขอบคุณnces.ed.govสำหรับการสร้างแผนภูมิวงกลม)

กรณีทดสอบ

Truthy
1 2 3 4
6 6 12 12 12 11 1 12
1000000 1000001 1
1 2 3
1 1
42 42
1 17 9 13 2 7 3
3 1 2
10 20 10

Falsy
1 2 3 4 5
2 1 3 4
10
1000000 1000001
1
1 2
3 1 1
1 2 1 2 1 2
10 20 10 1

เกณฑ์การให้คะแนน

รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ Tiebreaker เป็นคำตอบก่อนหน้า


30
ฉันเชื่อว่าคุณหมายถึงคนพาย ?
Alex A.

@HelkaHomba คุณสามารถจัดเรียงส่วนต่าง ๆ เพื่อให้ทำงานได้และนั่นคือสิ่งที่คุณหมายถึงโดย "การจัดเรียงตัวเลขที่แตกต่างกันอาจลบ bisectors"
โซโลมอน Ucko

@SolomonUcko คุณไม่สามารถจัดเรียงส่วนใหม่ได้
งานอดิเรกของ Calvin

1
มีการประเมินเพียง [2 1 3 4] ของคดีเท็จเท่านั้น อีกกรณีที่ผิดพลาดนั้นถูกปฏิเสธได้ง่ายเพราะผลรวมของพวกเขาเป็นเลขคี่ (หรือความยาวของพวกเขาคือ <2)
Benny Jobigan

คำตอบ:


12

J, 18 ไบต์

5 ไบต์ขอบคุณเดนนิส

+/e.[:,/2*+/\-/+/\

@HelkaHomba : ไม่

การใช้

>> f =: +/e.[:,/2*+/\-/+/\
>> f 6 6 12 12 12 11 1 12
<< 4
>> f 10 20 10 1
<< 0

Ungolfed

black_magic  =: +/\-/+/\
doubled_bm   =: 2 * black_magic
flatten      =: ,/
sum          =: +/
is_member_of =: e.
f =: sum is_member_of monadic flatten doubled_bm

เวอร์ชัน 23 ไบต์ก่อนหน้า:

[:+/[:+/+/=+:@-/~@(+/\)

การใช้

>> f =: [:+/[:+/+/=+:@-/~@(+/\)
>> f 6 6 12 12 12 11 1 12
<< 4
>> f 10 20 10 1
<< 0

Ungolfed

black_magic =: -/~@(+/\)
double      =: +:
equals      =: =
sum         =: +/
monadic     =: [:
of          =: @
f =: monadic sum monadic sum (sum equals double of black_magic)

คำอธิบาย

ผลรวมของสตริงย่อยทั้งหมดคำนวณโดย black_magic การ+/\คำนวณผลรวมบางส่วน

ยกตัวอย่างเช่นจะกลายเป็นa b c da a+b a+b+c a+b+c+d

-/~นั้นจะสร้างตารางการลบอยู่บนพื้นฐานของการป้อนข้อมูลเพื่อให้x y zกลายเป็น:

x-x x-y x-z
y-x y-y y-z
z-x z-y z-z

เมื่อนำไปใช้กับa a+b a+b+c a+b+c+dผลลัพธ์จะเป็น:

    0  -b -b-c -b-c-d
    b   0   -c   -c-d
  b+c   c    0     -d
b+c+d c+d    d      0

aนี้คำนวณผลรวมของสตริงทั้งหมดที่ไม่ได้มี

สิ่งนี้รับประกันได้ว่าเพียงพอเพราะถ้ามีการแบ่งออกเป็นสองส่วนการแบ่งaส่วนอื่นจะไม่ประกอบด้วยaและจะไม่พันรอบ


3
ด้วยการปรับโครงสร้างบางอย่างคุณสามารถไปที่ 13 ไบต์:+/e.&,2*+/\\.
Zgarb

10

เยลลี่ , 9 8 ไบต์

Ḥ+\©_Sf®

ส่งคืนรายการที่ไม่ว่าง (ความจริง) หรือรายการว่าง (เท็จ) ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด

มันทำงานอย่างไร

Ḥ+\©_Sf®  Main link. Argument: A (list)

Ḥ         Double all integers in A.
 +\       Take the cumulative sum of 2A.
   ©      Copy; store the result in the register.
    _S    Subtract the sum of A from each partial sum of 2A.
      f®  Filter; intersect this list with the list in the register.

7

Julia, 34 30 29 ไบต์

!x=sum(x)∈cumsum!(x,2x).-x'

ขอบคุณ @GlenO สำหรับการเล่นกอล์ฟ 1 ไบต์!

ลองออนไลน์!

มันทำงานอย่างไร

หลังจากเก็บผลรวมสะสมของ2xในxเราจะลบเวกเตอร์แถวx 'จากคอลัมน์เวกเตอร์xทำให้ได้เมทริกซ์ของความแตกต่างที่เป็นไปได้ทั้งหมด โดยพื้นฐานแล้วสิ่งนี้จะคำนวณผลรวมของ subarrays ที่อยู่ติดกันทั้งหมดของxซึ่งไม่มีค่าแรก, ค่าลบของพวกเขาและ0ในแนวทแยง

ในที่สุดเราจะทดสอบว่าผลรวมของอาร์เรย์เดิมxเป็นของเมทริกซ์ที่สร้างขึ้นหรือไม่ หากเป็นกรณีนี้ผลรวมของรายการย่อยที่อยู่ติดกันอย่างน้อยหนึ่งรายการจะเท่ากับครึ่งหนึ่งของผลรวมทั้งหมดของรายการทั้งหมดนั่นหมายความว่ามีเส้นแบ่งครึ่งอย่างน้อยหนึ่งรายการ


15
มาดูกันว่า Dennis ให้คำตอบ 5 ข้อก่อนใครให้คำตอบ
งานอดิเรกของ Calvin

6

Python 2, 64 ไบต์

f=lambda l,s=0:l>[]and(sum(l)==s)|f(l[1:],s+l[0])|f(l,s+l.pop())

sซ้ำพยายามที่จะลบองค์ประกอบจากด้านหน้าหรือสิ้นสุดจนกว่าผลรวมของสิ่งที่ยังคงเท่ากับผลรวมของสิ่งที่ถูกลบออกซึ่งจะถูกเก็บไว้เป็น ใช้เวลาชี้แจงในความยาวของรายการ

เดนนิสที่บันทึกไว้ 3 popไบต์ด้วย


ทางเลือกแปลก ๆ ที่ให้รายการ:f=lambda l,s=0:l and(sum(l)==s)*l+f(l[1:],s+l[0])+f(l,s+l.pop())
xnor

5

Haskell, 41 ไบต์

f l=elem(sum l/2)$scanr(:)[]l>>=scanl(+)0

ความคิดคือการตรวจสอบว่ามีรายการย่อยของที่มีผลรวมเท่ากับl เราสร้างผลรวมของรายการย่อยเหล่านี้เป็นsum l/2 scanr(:)[]l>>=scanl(+)0ลองมาดูกันว่ามันใช้งานอย่างไรl=[1,2,3]

>> scanr(:)[]l
[[1,2,3],[2,3],[3],[]] 
-- the suffixes of l

>> scanl(+)0 [2,3,4]
[0,2,5,9]
-- the cumulative sums of the input

>> scanr(:)[]l>>=scanl(+)0
[0,1,3,6,0,2,5,0,3,0]
-- the cumulative sums of the suffixes of l, flattened to a single list

43 ไบต์เก่า:

f l|c<-scanl1(+)l=elem(sum l/2)$(-)<$>c<*>c

สร้างรายการcผลรวมสะสม จากนั้นตรวจสอบว่าผลรวมสองรายการใด ๆ เหล่านี้แตกต่างกันหรือไม่sum l/2โดยตรวจสอบว่าเป็นองค์ประกอบของรายการความแตกต่าง(-)<$>c<*>cหรือไม่


4

Pyth, 10 9 ไบต์

}sQmysd.:

ทดสอบในPyth คอมไพเลอร์

มันทำงานอย่างไร

       .:  Generate the list of all adjacent sublists.
   m       Map over the result:
     sd       Add the integers of the sublist.
    y         Double the sum.
 sQ        Compute the sum of the input.
}          Check if it belongs to the list of doubled sublist sums.

4

จริงแล้ว 21 ไบต์

;Σ@2*;lR@τ╗`╜V♂Σi`Míu

ลองออนไลน์!

โปรแกรมนี้พิมพ์ออกมา0สำหรับกรณีเท็จและจำนวนเต็มบวกสำหรับกรณีจริง

คำอธิบาย:

;Σ@2*;lR@τ╗`╜V♂Σi`Míu
;Σ                     sum of copy of input
  @2*                  double values in other copy
     ;lR               copy, range(1, len(input)+1)
        @τ             append other copy to itself
          ╗            save in reg0
           `╜V♂Σi`M    map: generate cyclic cumulative sums
                   íu  1-based index of sum of input (0 if not found)

รุ่นที่ไม่ใช่คู่แข่งขนาด 10 ไบต์

;Σ@2*σ;)-∩

ลองออนไลน์!

โปรแกรมนี้แสดงรายการที่ว่างสำหรับกรณีที่ผิดและรายการที่ไม่ว่าง มันเป็นหลักพอร์ตของเดนนิสคำตอบของวุ้น มันไม่ใช่การแข่งขันเนื่องจากผลรวมสะสมและความแตกต่างแบบเวกเตอร์เป็นวันที่ความท้าทาย

คำอธิบาย:

;Σ@2*σ;)-∩
;Σ          sum of copy of input
  @2*       multiply values in other copy by 2
     σ;     two copies of cumulative sum
       )-   subtract sum of input from each element in one copy
         ∩  set intersection with other copy

4

Python 2, 76 74 70 66 ไบต์

def f(x):n=sum(x);print n in[2*sum(x[k/n:k%n])for k in range(n*n)]

ขอบคุณ @xnor สำหรับการเล่นกอล์ฟ4ไบต์ 8!

ทดสอบบนIdeone (ยกเว้นกรณีทดสอบที่ใหญ่กว่า)


ฉันรู้ว่าคุณสามารถทำอะไรn=sum(x)ที่จะทำn in ...; ไม่เจ็บที่จะใช้ค่าที่nมากขึ้นสำหรับ
xnor

โอ้ช่างฉลาด ขอขอบคุณ!
Dennis

3

MATL 10 ไบต์

EYst!-Gs=z

ผลลัพธ์คือจำนวนของเส้นแบ่งครึ่ง

ลองออนไลน์!

คำอธิบาย

วิธีการเช่นเดียวกับเดนนิสคำตอบของจูเลีย

E       % Implicit input. Multiply by 2 element-wise 
Ys      % Cumulative sum 
t!-     % Compute all pairwise differences. Gives a 2D array 
Gs      % Sum of input 
=       % Test for equality, element-wise 
z       % Number of nonzero elements. Implicit display 

3

ทับทิม, 60 53 ไบต์

->a{a.any?{r=eval a*?+;a.rotate!.any?{|i|0==r-=2*i}}}

สร้างพาร์ติชันที่เป็นไปได้ทั้งหมดโดยทำการหมุนทุกครั้งของอาเรย์อินพุตจากนั้นรับความยาวทั้งหมด 1 .. nโดยที่nขนาดของอาเรย์อินพุต จากนั้นตรวจสอบว่ามีพาร์ติชันใด ๆ ที่มีผลรวมครึ่งหนึ่งของผลรวมทั้งหมดของอินพุตอาร์เรย์หรือไม่


2

JavaScript (ES6), 83 ไบต์

a=>a.map(_=>a.slice(--n).map(m=>s.push(t+=m),t=0),s=[],n=a.length)&&s.includes(t/2)

สร้างผลรวมที่เป็นไปได้ทั้งหมดจากนั้นตรวจสอบเพื่อดูว่าครึ่งหนึ่งของผลรวมสุดท้าย (ซึ่งคือผลรวมของรายการทั้งหมด) ปรากฏในรายการ (การสร้างผลรวมตามลำดับที่น่าอึดอัดใจเล็กน้อยเพื่อจัดเรียงผลรวมที่ฉันต้องเป็นครั้งสุดท้ายประหยัด 4 ไบต์)


2

Dyalog APL ขนาด 12 ไบต์

+/∊2×+\∘.-+\

ทดสอบด้วยTryAPL

มันทำงานอย่างไร

+/∊2×+\∘.-+\  Monadic function train. Right argument: y (vector)

     +\   +\  Yield the cumulative sum of y.
       ∘.-    Compute all differences of all partial sums.
              This computes the sums of all adjacent subvectors of y that do not
              contain the first value, their negatives, and 0's in the diagonal.
   2×         Multiply all differences by 2.
+/            Yield the sum of y.
  ∊           Test for membership.

2

Python 2 , 47 ไบต์

k=t=1
for x in input():t<<=x;k|=t*t
print k&k/t

ลองออนไลน์!

ฉันกลับมาอีก 2.75 ปีต่อมาเพื่อเอาชนะโซลูชันเดิมของฉันมากกว่า 25% โดยใช้วิธีการใหม่

รุ่นที่ยาวกว่า 1 ไบต์นี้มีความชัดเจนน้อยกว่า

k=t=0
for x in input():t+=x;k|=4**t
print k&k>>t

ลองออนไลน์!

แนวคิดคือการเก็บชุดของผลรวมสะสมtเป็นบิตของkการตั้งค่าบิต2*tเพื่อระบุว่าtเป็นผลรวมสะสม จากนั้นเราตรวจสอบว่าผลรวมสะสมใด ๆ สองรายการแตกต่างกันครึ่งหนึ่งของผลรวมรายการ (สุดท้ายt) โดยการเลื่อนบิตkนี้มากและทำ bitwise &กับต้นฉบับเพื่อดูผลลัพธ์ที่ไม่ใช่ศูนย์ (จริง)


1

APL, 25 ตัวอักษร

สมมติว่ารายการได้รับX ← 1 2 3 4มา

(+/X)∊∘.{2×+/⍺↑⍵↓X,X}⍨⍳⍴X←⎕

คำอธิบาย:

ก่อนอื่นให้ทราบว่า APL ทำการประเมินแบบฟอร์มจากขวาไปซ้าย แล้ว:

  • X←⎕ นำอินพุตของผู้ใช้และเก็บไว้ X

  • ⍴X ให้ความยาวของ X

  • ⍳⍴X ตัวเลขตั้งแต่ 1 ถึง ⍴X

  • และใน{2×+/⍺↑⍵↓X,X}เป็นอาร์กิวเมนต์ซ้ายและขวาเพื่อฟังก์ชั่น dyadic เราจะกำหนดภายในวงเล็บ

    • ตอนนี้สำหรับ⍺↑⍵↓X,Xส่วน: X,Xเพียงแค่เชื่อม X กับตัวเอง และใช้และวาง
    • +/ลด / พับ+ทับรายการทางด้านขวา

    ดังนั้น2 {2×+/⍺↑⍵↓X,X} 1= 2×+/2↑1↓X,X= 2×+/2↑1↓1 2 3 4 1 2 3 4=

    = 2×+/2↑2 3 4 1 2 3 4= 2×+/2 3= =2×510

  • ∘.brace⍨idxidx ∘.brace idxเป็นเพียง ( เป็นแผนที่แนวทแยง; ∘.เป็นผลิตภัณฑ์ด้านนอก)

    นี่จึงให้เมทริกซ์⍴Xโดยเรา⍴Xมีผลรวมสองเท่าของรายการย่อยที่เชื่อมโยงทั้งหมด

     4  6  8  2
    10 14 10  6
    18 16 14 12
    20 20 20 20
    

    สิ่งสุดท้ายที่เราต้องทำคือการตรวจสอบว่าผลรวมของXอยู่ในเมทริกซ์นี้หรือไม่

  • (+/X)∊matrixซึ่งการที่เราจะทำอย่างไรกับ


1

C, 161 145 129 ไบต์

  • บันทึกไม่กี่ไบต์ด้วย @LeakyNun
  • บันทึกไม่กี่ไบต์ด้วย @ceilingcat
i;j;k;t;r;s;f(x,n)int*x;{for(t=i=k=r=0;i<n;)t+=x[i++];for(;++k<n;i=n)for(;i--;r|=2*s==t)for(s=0,j=i;j<i+k;)s+=x[j++%n];return r;}

Ungolfed ลองออนไลน์

int f(int*x,int n)
{
    int t=0;

    for(int i=0;i<n;i++)
    {
        t += x[i];
    }

    for(int k=1;k<n;k++) // subset-size
    {
        for(int i=0,s;i<n;i++) // where to start
        {
            s=0;

            for(int j=i;j<i+k;j++) // sum the subset
            {
                s+=x[j%n];
            }

            if(2*s==t) return 1; // TRUE
        }
    }

    return 0; // FALSE
}

บางทีคุณสามารถบันทึกบางไบต์ด้วยการย้ายการประกาศของตัวแปรไปที่ระดับแรกและเปลี่ยนi<n;i++เป็นi++<n(แม้ว่าคุณอาจต้องจัดการกับ offsets บางอย่าง
Leaky Nun

0

Haskell, 68 ไบต์

f l|x<-[0..length l]=any(sum l==)[2*(sum$take a$drop b l)|a<-x,b<-x]

ฟังก์ชั่นfแรกสร้างรายการของผลรวมของชิ้นที่เป็นไปได้ทั้งหมดของรายการที่กำหนด จากนั้นจะเปรียบเทียบกับผลรวมทั้งหมดขององค์ประกอบรายการ หากเราถึงจุดครึ่งหนึ่งของผลรวมทั้งหมดแล้วเรารู้ว่าเรามีเส้นแบ่งครึ่ง ฉันยังใช้ความจริงที่ว่าถ้าคุณtakeหรือdropองค์ประกอบมากกว่าที่มีอยู่ในรายการ Haskell ไม่โยนข้อผิดพลาด


0

Mathematica, 48 ไบต์

!FreeQ[Outer[Plus,#,-#],Last@#/2]&@Accumulate@#&

ฟังก์ชั่นนิรนามคล้ายกับคำตอบอื่น ๆ อีกมากมาย

Outer[Plus, #, -#]เมื่อทำหน้าที่Accumulate@#(ซึ่งจะทำหน้าที่ในรายการอินพุตให้รายการของผลรวมต่อเนื่อง) สร้างตารางเดียวกันเป็นหลักที่ด้านล่างของคำตอบของ Leaky Nun

!FreeQ[..., Last@#/2]ตรวจสอบว่า(Last@#)/2เป็นไม่ได้หายไปจากโต๊ะที่เกิดขึ้นและLast@#เป็นวันสุดท้ายของผลรวมต่อเนื่องคือผลรวมขององค์ประกอบทั้งหมดของรายการการป้อนข้อมูล

หากคำตอบนี้ค่อนข้างน่าสนใจนั่นไม่ใช่เพราะอัลกอริธึมใหม่ แต่เพิ่มเติมเกี่ยวกับเทคนิคเฉพาะของ Mathematica; เช่น!FreeQดีเมื่อเทียบกับMemberQเนื่องจากไม่จำเป็นต้องมีการแบนของตารางจะตรวจสอบและจะบันทึกไบต์


ฉันคิดว่า!FreeQ[2Tr/@Subsequences@#,Tr@#]&ควรใช้งานได้ แต่ฉันจะไม่สามารถทดสอบได้ 10.4 ในอีก 10 วันข้างหน้า
Martin Ender

@MartinEnder แน่นอนว่ามันจะทำงานได้ดี แต่ฉันอยู่ที่ 10.2 นั่นคือสิ่งที่ฉันมี
LLlAMnYP

0

APL (NARS), ตัวอักษร 95, ไบต์ 190

{1≥k←≢w←⍵:0⋄s←+/⍵⋄∨/{s=2×s-+/⍵}¨↑¨{⍵⊂w}¨{(k⍴2)⊤⍵}¨{1≥≢⍵:⍵⋄⍵,∇{(1+2×(↑⍵))×2*0..¯2+≢⍵}⍵}2*0..k-1}

พิจารณาหนึ่งในอินพุตขององค์ประกอบ 4 อย่าง: 1 2 3 4. เราจะเลือกประโยชน์สำหรับพาร์ติชันการฝึกซ้อมของชุดนั้นได้อย่างไร? หลังจากนี้บางคนคิดว่าพาร์ติชันขององค์ประกอบทั้ง 4 ที่เราสามารถใช้ได้นั้นมีจำนวนน้อยลงทางด้านซ้าย:

0001,0010,0100,1000 2^(0..4) 1 2 4  8 
0011,0110,1100,                3 6 12
0111,1110,                       7 14
1111                               15

(1001 หรือ 1,011 ecc อาจอยู่ในเซตนั้น แต่เรามี 0110 และ 0100 ecc) ดังนั้นหมวกหนึ่งอันก็แค่เขียนฟังก์ชันหนึ่งฟังก์ชั่นที่จากจำนวนองค์ประกอบของอาร์เรย์อินพุตสร้างเลขฐานสองเหล่านี้ ... มันจะเป็น:

c←{1≥≢⍵:⍵⋄⍵,∇{(1+2×(↑⍵))×2*0..¯2+≢⍵}⍵}

จากอินพุต 1 2 4 8 [2 ^ 0..lenBytesArgument-1] หา 3 6 12, 7 14, 15; ดังนั้นหาเลขฐานสองของตัวเลขเหล่านี้และใช้พวกมันค้นหาพาร์ทิชั่นด้านขวาของอาร์เรย์อินพุท ... ฉันทดสอบฟังก์ชั่น c สำหรับองค์ประกอบอินพุต 4 เท่านั้น แต่ดูเหมือนว่ามันจะโอเคสำหรับองค์ประกอบอื่น ๆ ...

ทดสอบ:

  f←{1≥k←≢w←⍵:0⋄s←+/⍵⋄∨/{s=2×s-+/⍵}¨↑¨{⍵⊂w}¨{(k⍴2)⊤⍵}¨{1≥≢⍵:⍵⋄⍵,∇{(1+2×(↑⍵))×2*0..¯2+≢⍵}⍵}2*0..k-1}
  f¨(1 2 3 4)(6 6 12 12 12 11 1 12)(1000000 1000001 1)(1 2 3)(1 1)(42 42)
1 1 1 1 1 1 
  f¨(1 2 3 4 5)(2 1 3 4)(,10)(1000000 1000001)(,1)(1 2)(3 1 1)
0 0 0 0 0 0 0 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.