อาร์เรย์สามารถถูกปลดได้หรือไม่?


15

พื้นหลัง

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

คำนิยาม

ในทางคณิตศาสตร์ Faro shuffle เป็นการเปลี่ยนแปลงขององค์ประกอบ2 n (สำหรับจำนวนเต็มบวกn ) ซึ่งใช้องค์ประกอบในตำแหน่งi (1 ดัชนี) ไปยังตำแหน่ง 2 i (mod 2 n +1) นอกจากนี้เรายังต้องการจัดการรายการที่มีความยาวคี่ดังนั้นในกรณีนี้เพียงเพิ่มองค์ประกอบหนึ่งไปยังส่วนท้ายของรายการ (Joker ถ้าคุณมีประโยชน์) และ Faro สลับรายการใหม่ตามข้างบน แต่ไม่ต้องสนใจ องค์ประกอบหุ่นที่เพิ่มเข้ามาเมื่อตรวจสอบคำสั่งของรายการ

เป้าหมาย

เขียนโปรแกรมหรือฟังก์ชั่นที่รับรายการจำนวนเต็มและส่งคืนหรือส่งออกความจริงหากจำนวนของแฟโร Shuffles จำนวนหนึ่งจะทำให้รายการนั้นเรียงลำดับตามลำดับที่ไม่ลดน้อยลง (แม้ว่าจำนวนนั้นจะเป็นศูนย์ มิฉะนั้นส่งคืนหรือส่งออกเป็นเท็จ

ตัวอย่าง

[1,1,2,3,5,8,13,21]  => True
[5,1,8,1,13,2,21,3] => True
[9,36,5,34,2,10,1] => True
[1,0] => True
[0] => True
[] => True
[3,2,1] => True
[3,1,2] => False
[9,8,7,6,5,4,3,2,1,0] => True
[9,8,7,6,5,4,3,2,0,1] => False
[3,1,4,1,5,9,2,6,9] => False
[-1,-1,-1,-2] => True

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

นี่คือดังนั้นแหล่งที่สั้นที่สุดในหน่วยไบต์ชนะ


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

นี่ไม่ใช่แค่ "in-shuffle N + 1 ครั้งและดูว่ามีรายการใดเรียงเรียงกันหรือไม่"?
lirtosiast

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


1
องค์ประกอบแรกไม่อยู่ในตำแหน่งแรกเสมอหรือ
Eumel

คำตอบ:


3

Pyth - 26 25 24 ไบต์

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

smSI-db.usC_c2NQsC.tc2Qb

Test Suite


3

MATL , 41 ไบต์

itn2\?YNh]tnt1+:"x[]2e!PY)ttZN~)tS=At.]wx

เอาท์พุทเป็นหรือ10

คำอธิบาย

i              % get input array
tn2\           % is size odd?
?              % if that's the case
  YNh          % concat NaN at the end
]              % end if
tn             % get size of input array
t1+:           % vector 1:n+1, where n is input size, so loop will be entered even with []
"              % for loop
  x[]2e!PY)    % delete result from previous iteration and do the shuffling
  ttZN~)       % remove NaN, if there's any
  tS=A         % check if array is sorted
  t.           % copy the result. If true, break loop
]              % end for
wx             % remove unwanted intermediate result

ตัวอย่าง

>> matl itn2\?YNh]tnt1+:"x[]2e!PY)ttZN~)tS=At.]wx
> [1,1,2,3,5,8,13,21]
1
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.