ผันคำกริยา


17

การเปลี่ยนขนาดnเป็นการเรียงลำดับของจำนวนเต็มบวกn ตัวแรก (หมายถึงแต่ละจำนวนเต็มปรากฏขึ้นหนึ่งครั้งและทุกครั้ง) พีชคณิตสามารถรักษาได้เช่นฟังก์ชั่นที่มีการเปลี่ยนแปลงคำสั่งของรายชื่อของรายการที่มีขนาดที่n ตัวอย่างเช่น

(4 1 2 3) ["a", "b", "c", "d"] = ["d", "a", "b", "c"]

ดังนั้นการเรียงสับเปลี่ยนสามารถประกอบด้วยฟังก์ชั่น

(4 1 2 3)(2 1 3 4) = (4 2 1 3)

สิ่งนี้นำมาซึ่งคุณสมบัติที่น่าสนใจมากมาย วันนี้เราจะมุ่งเน้นไปconjugacy การเรียงสับเปลี่ยนyและx (ทั้งสองขนาดn ) เป็นคอนจูเกตถ้ามีการเปลี่ยนลำดับgและg -1 (เช่นขนาดn )

x = gyg-1

และgg -1เท่ากับการเปลี่ยนรูปแบบตัวตน ( ตัวเลขn ตัวแรกตามลำดับที่เหมาะสม)

งานของคุณคือการเปลี่ยนขนาดเท่ากันสองขนาดผ่านวิธีการป้อนข้อมูลมาตรฐานและตัดสินใจว่าจะเชื่อมต่อกันหรือไม่ คุณควรส่งออกหนึ่งในสองค่าที่สอดคล้องกันหนึ่งถ้าพวกเขาเป็นคอนจูเกตและอื่น ๆ หากพวกเขาไม่ได้

นี่คือดังนั้นคำตอบจะได้คะแนนเป็นไบต์ด้วยจำนวนไบต์น้อยกว่าจะดีกว่า

มีทฤษฎีบทมากมายเกี่ยวกับการเรียงสับเปลี่ยนคอนจูเกตที่คุณมีอยู่ดังนั้นขอให้โชคดีและมีความสุขในการเล่นกอล์ฟ

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

กรณีทดสอบ

(1) (1) -> True
(1 2) (2 1) -> False
(2 1) (2 1) -> True
(4 1 3 2) (4 2 1 3) -> True
(3 2 1 4) (4 3 2 1) -> False 
(2 1 3 4 5 7 6) (1 3 2 5 4 6 7) -> True

เราสามารถรับอินพุตเป็นฟังก์ชั่นได้หรือไม่? เราสามารถใช้ขนาด n ได้หรือไม่?
xnor

@xnor แน่นอนว่าทั้งสองมีค่า ฉันไม่แน่ใจว่าคนแรกจะช่วยคุณได้อย่างไร
โพสต์ Rock Garf Hunter

กฎการป้อนข้อมูลฟังก์ชันเริ่มต้นอนุญาตให้ใช้ฟังก์ชันที่จะถูกกำหนดไว้ล่วงหน้าซึ่งจะช่วยประหยัดไบต์ในการเขียนเป็นอาร์กิวเมนต์หากคุณอนุญาต
xnor

@xnor เรากำลังพูดถึงกฎนี้หรือไม่? สำหรับฟังก์ชั่นกล่องดำที่ไม่ได้มีการเรียงสับเปลี่ยน เรื่องนี้สมเหตุสมผลเพราะฉันทามตินั้นได้รับการออกแบบมาเพื่อให้ภาษาที่ไม่มีตัวชี้ฟังก์ชัน / วัตถุแข่งขันในขณะที่พวกเขาสามารถทำได้เพราะการเรียงสับเปลี่ยนสามารถแทนได้
โพสต์ Rock Garf Hunter

ฉันเป็นฉันไม่คิดว่าความแตกต่างของพวกเขาเป็นกล่องดำ ดังนั้นที่นี่การป้อนข้อมูลอาจเป็นฟังก์ชั่น แต่เป็นอาร์กิวเมนต์ที่ชัดเจนเท่านั้น?
xnor

คำตอบ:


6

Python 2 , 87 ไบต์

f=lambda P,k:k<1or len({sum([x==eval('L['*k+'x'+']'*k)for x in L])for L in P})&f(P,k-1)

ลองออนไลน์!

รับอินพุตพร้อมกับPการเปลี่ยนลำดับและทั้งkความยาว เอาต์พุต1สำหรับคอนจูเกตและ0ไม่

สิ่งนี้ใช้ผลลัพธ์:

สองพีชคณิตxและy ที่มีคอนจูเกตว่าถ้าพวกเขาk -th อำนาจx kและY kมีจำนวนเท่ากับจุดคงที่สำหรับทุกkจาก0ไปn

การเปลี่ยนรูปแบบคอนจูเกตสองรูปแบบทำให้สมการนี้เพราะพลังของk -th นั้นยังผันกันและการผันคำกริยายังคงรักษาจำนวนคะแนนคงที่

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

ให้Xเป็นเมทริกซ์สำหรับการเปลี่ยนแปลงx จากนั้นจำนวนจุดคงที่ของx kเป็นTr (X k ) ร่องรอยเหล่านี้คือพหุนามสมมาตรรวมกำลังของค่าลักษณะเฉพาะของX k ที่มีหลายหลาก ชื่อพหุนามเหล่านี้สำหรับkจาก0ถึงnให้เรากู้ชื่อพหุนามแบบสมมาตรพื้นฐานที่สอดคล้องกันของค่าลักษณะเฉพาะเหล่านี้และดังนั้นพหุนามลักษณะและค่าลักษณะเฉพาะนั้นเอง

เนื่องจากค่าลักษณะเฉพาะเหล่านี้เป็นรากของความสามัคคีที่สอดคล้องกับวัฏจักรของxจากสิ่งเหล่านี้เราจึงสามารถกู้คืนขนาดของวงจรและหลายหลากของมัน ดังนั้น "ลายเซ็น" ของเราจะระบุการเปลี่ยนแปลงได้ถึงการผันคำกริยา


6

J , 25 ไบต์ 23 ไบต์ 16 ไบต์

วิธีการแก้ปัญหาโดยปริยายของไมล์ :

-:&([:/:~#&>)&C.

วิธีแก้ปัญหาที่ชัดเจนของ OP:

c=:4 :'-://:~"1#&>C.&>x;y'   

สิ่งนี้จะตรวจสอบว่าการเรียงสับเปลี่ยน x และ y มีประเภทวัฏจักรเดียวกันหรือไม่โดยใช้C.ฟังก์ชันในตัวเพื่อสร้างการแทนรอบ

   4 1 3 2   c   4 2 1 3
1
   3 2 1 4   c   4 3 2 1
0
   2 1 3 4 5 7 6   c   1 3 2 5 4 6 7
1

1
ยินดีต้อนรับสู่ PPCG และโพสต์แรกที่ดี ฉันย่อวิธีการของคุณให้เหลือ 16 ไบต์-:&([:/:~#&>)&C.โดยใช้แบบฟอร์มโดยปริยาย นี่คือลิงค์TIOเพื่อทดลองใช้
ระยะทาง

ขอขอบคุณ. :) ฉันยังคงเป็นผู้เริ่มต้น J และดูเหมือนว่าฉันจะใช้กับรูปแบบที่ชัดเจนได้อย่างง่ายดาย แต่การเขียนรูปแบบโดยปริยายที่มีประสิทธิภาพยังคงต้องใช้ความคิดมากเกินไปสำหรับฉัน ฉันจะเพิ่มโซลูชันของคุณ
Mathias Dolidon

PS: เราไม่นับตัวอักษรที่ได้รับมอบหมายของฟังก์ชั่นเช่นกัน? c=:
Mathias Dolidon

1
@MathiasDolidon ไม่โดยความสอดคล้องเริ่มต้นเราจะไม่นับตัวอักษรที่จำเป็นสำหรับการกำหนดเนื่องจากฟังก์ชันอาจใช้ตามที่เป็นอยู่ (พร้อมวงเล็บ แต่เราไม่นับ)
Erik the Outgolfer

1
ตกลง ! ฉันได้อัปเดตจำนวนย้อนหลังสำหรับโซลูชันที่ชัดเจนในชื่อเรื่องเพื่อพิจารณาสิ่งนี้
Mathias Dolidon

4

MATL , 20 19 17 16 ไบต์

xY@!"&G@)@b)X=va

อินพุต: เวกเตอร์คอลัมน์สองคอลัมน์ (ใช้;เป็นตัวคั่น) เอาท์พุท: 1ถ้าคอนจูเกต0ถ้าไม่ได้

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

คำอธิบาย

ไม่มีทฤษฎีบทเกี่ยวกับการเรียงสับเปลี่ยนที่ใช้ (จากความไม่รู้ที่แท้จริง); เพียงแค่กำลังดุร้ายและข้อเท็จจริงทั้งสองนี้:

  • สำหรับสองพีชคณิตPและQองค์ประกอบPQเทียบเท่ากับการใช้หน้าการจัดทำดัชนีองค์ประกอบของคิว

  • สภาพx = จีวายจี-1เทียบเท่ากับXG = GY

รหัสความคิดเห็น:

x      % Implicitly input first permutation, x. Delete it. Gets copied into clipboard G
Y@     % Implicitly input second permutation, y. Push a matrix with all permutations
       % of its elements, each permutation on a different row. So each matrix row is
       % a permutation of [1 2 ...n], where n is the size of y
!      % Transpose. Now each permutation is a column
"      % For each column
  &G   %   Push x, then y
  @    %   Push current column. This is a candidate g permutation
  )    %   Reference indexing. This gives g composed with y
  @    %   Push current column again
  b    %   Bubble up. Moves x to the top of the stack
  )    %   Reference indexing. This gives x composed with g
  X=   %   Are they equal as vectors? Gives true or false
  v    %   Concatenate stack so far. The stack contains the latest true/false result
       %   and possibly the accumulated result from previous iterations
  a    %   Any: gives true if any element is true. This is the "accumulating" function
       % Implicit end. Implicit display


2

เยลลี่ 11 ไบต์

Œ!©Ụ€ịị"®⁸e

ลองออนไลน์!

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

Œ!©Ụ€ịị"®⁸e  Main link. Left argument: x. Right argument: y

Œ!©          Take all permutations g of x. Copy the result to the register.
   Ụ€        Grade up each; sort the indices of each permutation g by their
             corresponding values. For permutations of [1, ..., n], grading up
             essentially computes the inverse, g⁻¹.
     ị       Let each g⁻¹ index into y, computing g⁻¹y.
      ị"®    Let the results index into the corresponding g, computing g⁻¹yg.
         ⁸e  Test if x occurs in the result.

เท่าที่ฉันเข้าใจจริง ๆ แล้วมันเป็นyดัชนีที่แต่ละคนg⁻¹ไม่ใช่วิธีอื่น (4 1 2 3)(2 1 3 4) = (4 2 1 3)ดูตัวอย่าง ด้วยวิธีการของคุณมันจะส่งผล(1 4 2 3)แทนเนื่องจากดัชนีที่สองเป็นครั้งแรก โดยคำนึงถึงว่าฉันมีวิธีแก้ปัญหา 12 ไบต์ฉันยังไม่เสีย :-)
Erik the Outgolfer

@EriktheOutgolfer แก้ไขแล้ว
เดนนิส

@Dennis แต่ฉันไม่ได้มาถึงข้อสรุปนั้นตามคำอธิบายฉันมาถึงวิธีการเดียวกันแน่นอนยกเว้นว่าฉันมีบางสิ่งบางอย่างŒ!©Ụ€⁹ịЀ®ị"⁸e(โดยทั่วไปการจัดทำดัชนีด้วยอาร์กิวเมนต์ที่กลับรายการ) ยกเว้นสั้นกว่าหลังจากฉันทำการแก้ไขครั้งใหญ่ ฉันไม่คิดว่าเป็นเช่นเดียวกับg⁻¹yg gyg⁻¹นอกจากนี้ฉันคิดว่าคำตอบของคุณจะได้รับประโยชน์จากการดัดแปลงเหล่านั้นเช่นกัน แต่อย่างที่ฉันพูดไปก่อนหน้านี้ฉันยังไม่ต้องการทำลายความสนุก
Erik the Outgolfer

ใช่มันเหมือนกันทุกประการ หากx = g⁻¹ygแล้วgxg⁻¹ = yดังนั้นxและyมีคอนจูเกต
เดนนิส

หืมฉันรู้สึกว่าฉันควรเปิดเผยวิธีแก้ปัญหา 12 ไบต์ของฉันแล้ว:eŒ!ị"Ụị@¥€¥¥
Erik the Outgolfer

1

Husk , 9 ไบต์

¤¦ṠmöLU¡!

ส่งคืน1สำหรับคอนจูเกตและ0สำหรับคอนจูเกตที่ไม่ใช่คอนจูเกต ลองออนไลน์!

คำอธิบาย

ชั้น conjugacy ของการเปลี่ยนแปลงPของL = [1,2, .. , n]จะถูกกำหนดโดย MultiSet ที่มีระยะเวลาน้อยที่สุดของจำนวนในแต่ละLภายใต้P เมื่อPถูกถ่ายในรูปแบบรายการฉันสามารถแทนที่Lด้วยPและรับมัลติเซ็ตเดียวกันได้ โปรแกรมคำนวณมัลติเซ็ตที่สอดคล้องกันสำหรับแต่ละอินพุตและตรวจสอบว่าอันใดอันหนึ่งเป็นมัลติเซ็ตย่อยของอีกอันหนึ่ง เนื่องจากมีจำนวนองค์ประกอบเท่ากันจึงเท่ากับมัลติเซ็ตเดียวกัน

¤¦ṠmöLU¡!  Implicit inputs: two lists of integers.
¤          Apply one function to both and combine with another function.
  ṠmöLU¡!  First function. Argument: a list P.
  Ṡm       Map this function over P:
       ¡!  iterate indexing into P,
      U    take longest prefix with unique elements,
    öL     take its length.
 ¦         Combining function: is the first list a subset of the other, counting multiplicities?

1

Perl, 61 58 57 ไบต์

รวม+2สำหรับap

ให้การเรียงสับเปลี่ยนแบบ 0 เป็น 2 บรรทัดบน STDIN

perl -ap '$_=[@1]~~[@1=map{-grep$_-$G[$i++%@G],@F=@G[@F]}@G=@F,0]'
3 0 2 1
3 1 0 2
^D

อัลกอริทึมเป็นการเปลี่ยนแปลงเล็กน้อยในโซลูชันของ xnor

นี้รุ่นเก่าของรหัสข้อผิดพลาดฮิต Perl และทิ้งหลักหลายปัจจัยการผลิตใน Perl ล่าสุดของฉัน5.26.1แต่การทำงานใน 5.16.3Perl

@{$.}=map{-grep$_==$F[$i++%@F],@G=@F[@G]}@G=@F,0}{$_=@1~~@2

อาจเป็นอีกตัวอย่างหนึ่งของศัตรู perlgolf เก่าของฉันความจริงที่ว่า Perl ไม่ได้ refcount กองซ้อนของมันอย่างถูกต้อง


1

JavaScript (ES6), 66 64 ไบต์

(a,b,g=a=>b+a.map(h=(e,i)=>e-i&&1+h(a[e],i)).sort())=>g(a)==g(b)

หากฉันอ่านคำตอบอื่นอย่างถูกต้องปัญหาจะเท่ากับการนับระยะเวลาขององค์ประกอบทั้งหมดและตรวจสอบว่าทั้งสองรายการมีจำนวนเท่ากันในแต่ละช่วงเวลา แก้ไข: บันทึก 1 ไบต์ขอบคุณ @Arnauld โดยการคำนวณน้อยกว่าระยะเวลาหนึ่ง บันทึกอีกไบต์ด้วย @Arnauld โดยใช้กฎการบังคับที่แปลกประหลาดของ JavaScript เพื่อเปรียบเทียบอาร์เรย์ ไบต์อื่นสามารถบันทึกโดยการแกง แต่ฉันไม่ชอบแกงนอกเสียจากว่าเป็นไก่ทิกก้ามาซาลา

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