Codegolf Rainbow: การเรียงลำดับสีด้วยการสะท้อนแสง


9

บทนำ:

หลังจากที่ฉันโพสต์ความท้าทายที่เกี่ยวข้องกับรุ้งสองประการ: Codegolf Rainbow: สนุกกับ Integer-Arrays 1และCodegolf Rainbow: วาดในสีดำและสีขาว 2ความคิดเห็นต่อไปนี้สร้างโดย@ChrisMใน ASCII ( วาดใน Black-and-White ) ความท้าทาย :

บางทีคุณอาจรู้เรื่องนี้และมันก็เป็นไปตามการออกแบบ (ฉันรู้ว่ารุ้งกินน้ำไม่ใช่รูปสี่เหลี่ยมขนมเปียกปูนหรือ ascii เช่นกันและตำแหน่งที่สูงขึ้นของคำสั่งซื้อก็มีความซับซ้อนมากขึ้น) แต่สีในรุ้งที่ 2 ไม่ใช่หรือ

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

ดังนั้นขอความท้าทายที่สามโดยใช้ข้อเท็จจริงนั้น

ท้าทาย:

อินพุต: จำนวนเต็มบวกnซึ่งก็คือ>=2และรายการขนาด>= n+1เต็ม
ผลลัพธ์: รายการเดียวกันได้รับคำสั่งดังนี้:

  1. ก่อนแยกรายการอินพุตในรายการย่อยของขนาดn(โดยที่รายการย่อยต่อท้ายอาจมีขนาดใดก็ได้ในช่วง[1,n])
  2. จากนั้นเราจะทำสิ่งต่อไปนี้ตามจำนวนรายการย่อยm:
    • เรียงลำดับm - m//2จำนวนย่อยแรกของรายการจากต่ำสุดไปสูงสุด (โดยที่//หารด้วยจำนวนเต็ม) (เช่นที่มี 6 รายการย่อยสามรายการแรกจะถูกจัดเรียงจากต่ำสุดไปสูงสุดด้วย 5 รายการย่อยรายการกำปั้นสามรายการจะเรียงลำดับจากต่ำสุดไปสูงสุด)
    • เรียงลำดับm//2จำนวนย่อยสุดท้ายของรายการจากสูงสุดไปต่ำสุด (โดยที่//หารด้วยจำนวนเต็ม) (เช่นที่มี 6 รายการย่อยสามรายการสุดท้ายจะถูกจัดเรียงจากสูงสุดไปต่ำสุดและ 5 รายการย่อยรายการสุดท้ายสองรายการจะเรียงลำดับจากสูงสุดไปต่ำสุด)
  3. รวมรายการย่อยทั้งหมดเข้าด้วยกันเพื่อสร้างรายการเดียวอีกครั้ง

ตัวอย่าง:

อินพุต: n=7และ[3,2,1,-4,5,6,17,2,0,3,5,4,66,-7,7,6,-5,2,10]
ขั้นตอนที่ 1: [[3,2,1,-4,5,6,17],[2,0,3,5,4,66,-7],[7,6,-5,2,10]]
ขั้นตอนที่ 2: [[-4,1,2,3,5,6,17],[-7,0,2,3,4,5,66],[10,7,6,2,-5]]
ขั้นตอนที่ 3 / เอาต์พุต:[-4,1,2,3,5,6,17,-7,0,2,3,4,5,66,10,7,6,2,-5]

อินพุต: n=4และ[7,4,-8,9,3,19,0,-23,-13,13]
ขั้นตอนที่ 1: [[7,4,-8,9],[3,19,0,-23],[-13,13]]
ขั้นตอนที่ 2: [[-8,4,7,9],[-23,0,3,19],[13,-13]]
ขั้นตอนที่ 3 / เอาต์พุต:[-8,4,7,9,-23,0,3,19,13,-13]

กฏท้าทาย:

  • อินพุตจำนวนเต็มnรับประกันว่ามากกว่า 1
  • nขนาดของจำนวนเต็มรายการรับประกันได้ว่าจะมีขนาดใหญ่กว่า
  • รายการย่อยต่อท้ายอาจมีขนาดเล็กกว่าn(ดังที่เห็นได้ในตัวอย่างและกรณีทดสอบ)
  • รูปแบบ I / O มีความยืดหยุ่นในรูปแบบที่เหมาะสม สามารถเป็นรายการ / อาเรย์ของจำนวนเต็มหรือทศนิยมสตริงที่คั่นด้วยเครื่องหมายจุลภาค / space / newline กระแสของจำนวนเต็ม ฯลฯ (เอาท์พุทอาจไม่ใช่รายการ 2 มิติของรายการเช่นขั้นตอนที่ 2 ขั้นตอนที่ 3 เพื่อทำให้แบนกลับเป็นรายการเดียว จำเป็นสำหรับความท้าทายนี้)

กฎทั่วไป:

  • นี่คือ ดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์จะเป็นผู้ชนะ
    อย่าปล่อยให้ภาษาโค้ดกอล์ฟกีดกันคุณจากการโพสต์คำตอบด้วยภาษาที่ไม่ได้เข้ารหัส พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ '
  • กฎมาตรฐานใช้สำหรับคำตอบของคุณดังนั้นคุณจึงได้รับอนุญาตให้ใช้ STDIN / STDOUT ฟังก์ชั่น / วิธีที่มีพารามิเตอร์ที่เหมาะสมและชนิดผลตอบแทนโปรแกรมเต็มรูปแบบ การโทรของคุณ
  • ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
  • หากเป็นไปได้โปรดเพิ่มลิงค์พร้อมทดสอบรหัสของคุณ
  • นอกจากนี้ขอแนะนำให้เพิ่มคำอธิบายสำหรับคำตอบของคุณ

กรณีทดสอบ:

Inputs: n=7 and [3,2,1,-4,5,6,17,2,0,3,5,4,66,-7,7,6,-5,2,10]
Output: [-4,1,2,3,5,6,17,-7,0,2,3,4,5,66,10,7,6,2,-5]

Inputs: n=4 and [7,4,-8,9,3,19,0,-23,-13,13]
Output: [-8,4,7,9,-23,0,3,19,13,-13]

Inputs: n=2 and [7,-3,1]
Output: [-3,7,1]

Inputs: n=3 and [1,6,99,4,2]
Output: [1,6,99,4,2]

Inputs: n=2 and [5,2,9,3,-5,-5,11,-5,4,12,9,-2,0,4,1,10,11]
Output: [2,5,3,9,-5,-5,-5,11,4,12,9,-2,4,0,10,1,11]

Inputs: n=3 and [5,2,9,3,-5,-5,11,-5,4,12,9,-2,0,4,1,10,11]
Output: [2,5,9,-5,-5,3,-5,4,11,12,9,-2,4,1,0,11,10]

คำตอบ:


5

Brachylog , 18 17 16 ไบต์

ġ₎↔ḍ↔{izo₎ᵐ↔}ᶠcc

ลองออนไลน์!

-1 ไบต์ขอบคุณ @sundar

[<integer list>, n]คาดว่าการป้อนข้อมูลเป็น โปรดทราบว่าจำนวนเต็มลบจะแสดงด้วย_"ต่ำลบ" ของ Brachylog Rตัวแปรเอาท์พุท

ครั้งแรกที่ลองใช้ Brachylog ฉันคิดว่ามันไม่เหมาะสมและสุกงอมเพื่อลดจำนวนไบต์

คำอธิบาย

พาร์ทิชันสองแฉกเรียงตามดัชนี (0: asc, 1: desc) แบน

ġ₎               | split head of input into groups of length n (last of list)
  ↔              | reverse so that...
   ḍ             | dichotomize splits in two, attaching any additional element to the second list
    ↔            | reverse so first half of partitions corresponds to the 0 index
     {      }    | apply
      i          | : append index
       z         | : zip each sublist with the index of its parent
        o₎ᵐ      | : map over sublists, ordering by the zipped index
           ↔     | : undo earlier reverse
             ᶠ   | find all outputs
              cc | flatten two levels

ปรับแต่งเล็กน้อยสำหรับโซลูชันที่สองของคุณเพื่อรับ 17 ไบต์: ลองออนไลน์!
sundar - Reinstate Monica

@Sundar ฉันมีความสงสัยด้อมฉันได้ทำแผนที่หนึ่งมากเกินไปขอบคุณ!
ความซ้ำซ้อน

ภาษานี้มีไว้เพื่ออะไร?
Sam Orozco

@SamOrozco Terse การเขียนโปรแกรมลอจิกตรรกะ ลองคลิกที่ชื่อภาษา!
อดัม

3

เยลลี่ขนาด 9 ไบต์

sṢ€ŒHUÐeF

ลองออนไลน์!


1
ฉันไม่เข้าใจว่าทำไมภาษาการเขียนโปรแกรมนี้จึงมีอยู่
Sam Orozco

@ SamOrozco มีวัตถุประสงค์เพียงอย่างเดียวคือการแก้ปัญหาด้วยรหัสย่อที่สุด
อดัม

จริงๆเหรอ. มันเท่ห์มาก
Sam Orozco



2

05AB1E (ดั้งเดิม) 9 ไบต์

ô€{2ä`í«˜

ลองออนไลน์!

ลองออนไลน์! ใน05AB1E (Elixir rewrite) - คาดว่าอินพุตจะอยู่ในสแต็กซึ่งเป็นวิธีการเริ่มต้นของ I / O

Kevin มากับ 11 byter ของเขาซึ่งฉันเคยไป 10 แล้วฉันมากับสิ่งอื่นสำหรับ 9 ไบต์


ทำได้ดีนี่. นี่เป็นวิธีการแก้ปัญหาของฉันเริ่มต้นเป็นทางเลือก 11 ô€{2äRć€R)˜ไบต์:
Kevin Cruijssen

1
@KevinCruijssen ถึง 10 คนด้วยวิธีการของคุณฮ่าฮ่า แก้ไข : 9 ตอนนี้!
Mr. Xcoder

อ่า íสมบูรณ์ลืมเกี่ยวกับ และสนามกอล์ฟเพิ่มเติมที่ดี
Kevin Cruijssen

2

JavaScript (ES6), 82 81 ไบต์

บันทึก 1 ไบต์ขอบคุณ @redundancy

(list)(n)จะเข้าเป็น

a=>n=>(g=z=>a+a?[...a.splice(0,n).sort((x,y)=>1/z?x-y:y-x),...g(a[i+=n])]:a)(i=0)

ลองออนไลน์!


เนื่องจากaเป็นมิติเดียวฉันเชื่อว่าคุณสามารถแทนที่a>[]ด้วยa+aเพื่อตรวจสอบกรณีที่ไม่ว่างและบันทึก 1 ไบต์ กลยุทธ์การเรียกซ้ำที่ชาญฉลาดสำหรับการแบ่งพาร์ติชันและการพิจารณาว่าเมื่อใดที่จะกลับเรียงลำดับเช่นกัน!
ความซ้ำซ้อน

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