พื้นหลัง
ความเท่าเทียมกันของการเปลี่ยนแปลง , ตามที่กำหนดโดยวิกิพีเดียเป็นดังนี้
เครื่องหมายหรือการลงลายมือชื่อของการเปลี่ยนแปลงσนั้นแทน sgn (σ) และกำหนดให้เป็น +1 ถ้าσคือ even และ −1 ถ้าσเป็นเลขคี่
เครื่องหมายของการเปลี่ยนแปลงสามารถแสดงอย่างชัดเจนว่า
sgn (σ) = (−1) ^ N (σ)
โดยที่ N (σ) คือจำนวนผู้รุกรานในσ
อีกทางเลือกหนึ่งสัญญาณของการเปลี่ยนแปลงσสามารถกำหนดได้จากการสลายตัวลงในผลิตภัณฑ์ของ transpositions เป็น
sgn (σ) = (−1) ^ m
โดยที่ m คือจำนวน transpositions ในการย่อยสลาย
สำหรับคนที่ไม่ชอบซุปอักษรกรีกในคณิตศาสตร์ของพวกเขาฉันจะลองและทำให้คำจำกัดความง่ายขึ้นด้วยตัวอย่าง (เช่นขโมยมาจากวิกิพีเดีย)
ตัวอย่าง
พิจารณาอาร์เรย์การป้อนข้อมูลและการเปลี่ยนแปลงของมันสมมติว่า{1, 2, 3, 4, 5}
{3, 4, 5, 2, 1}
เพื่อที่จะได้รับจากอาร์เรย์เดิมเพื่อการเปลี่ยนแปลงของคุณต้องสลับดัชนี0
และ2
, 1
และ3
แล้วและ2
4
แม้ว่านี่จะไม่ใช่วิธีการแก้ปัญหาที่ไม่ซ้ำกัน แต่ความเท่าเทียมกันถูกกำหนดไว้อย่างดีดังนั้นจึงใช้ได้กับทุกกรณี
เนื่องจากต้องการการสลับ 3 ครั้งเราจึงติดป้ายการเปลี่ยนแปลงนี้ด้วยความodd
เท่าเทียมกัน อย่างที่คุณคาดไว้การเปลี่ยนแปลงที่ต้องใช้จำนวนครั้งที่แลกเปลี่ยนนั้นมีความeven
เท่าเทียมกัน
ท้าทาย
ความท้าทายของคุณคือการเขียนโปรแกรมเป็นไบต์น้อยที่สุดเพื่อกำหนดความเท่าเทียมกันของการเปลี่ยนแปลง โปรแกรมหรือฟังก์ชั่นของคุณจะต้อง:
- ยอมรับเป็นอาร์กิวเมนต์สองอินพุตอาร์เรย์ (หรือสตริง) ที่เป็นตัวแทนของชุดก่อนและหลังการเปลี่ยนแปลง
- ส่งคืนหรือพิมพ์อักขระสำหรับเลขคู่
e
หรือo
คี่ให้เปลี่ยนรูป - ควรสมมติว่าดัชนีทั้งหมดในอาร์เรย์หรือสตริงมีค่าที่ไม่ซ้ำกัน
กรณีทดสอบ
สมมติว่าคุณประกาศฟังก์ชันที่ชื่อf
:
f([10], [10]) == "e"
f([10, 30, 20], [30, 20, 10]) == "e"
f([10, 30, 20, 40], [30, 20, 40, 10]) == "o"
นี่คือรหัสกอล์ฟโปรแกรมที่สั้นที่สุดในหน่วยไบต์ชนะ!
[10], [10] -> e
(ไม่มีการเปลี่ยนใจ) [10 30 20], [30 20 10] -> e
(สองรายการ) [10 30 20 40], [30 20 40 10] -> o
(การย้ายที่สามครั้ง)