ไม้โปรแทรกเตอร์


12

ด้วยจำนวนเต็มบวกnให้ออกแบบไม้โปรแทรกเตอร์ด้วยจำนวนเครื่องหมายที่น้อยที่สุดที่ให้คุณวัดมุมทั้งหมดที่เป็นผลคูณรวมของ2π/n(แต่ละอันในการวัดเดี่ยว)

รายละเอียด

ในฐานะที่เป็นเอาท์พุทคุณสามารถส่งออกรายการจำนวนเต็มในช่วง0ถึงn-1(หรือ1ถึงn) ที่แสดงถึงตำแหน่งของแต่ละเครื่องหมาย อีกทางหนึ่งคุณสามารถส่งออกสตริง / รายการความยาวnด้วย#ที่ตำแหน่งของเครื่องหมายแต่ละอันและ_(ขีดล่าง) โดยที่ไม่มี (หรือตัวละครทั้งสองแตกต่างกันถ้าสะดวกเพิ่มเติม.)
ตัวอย่าง:สำหรับn = 5คุณจำเป็นต้องตรง 3 เครื่องหมายเพื่อให้สามารถวัดมุมทั้งหมด2π/5, 4π/5, 6π/5, 8π/5, 2πโดยการตั้งค่า (ตัวอย่าง) หนึ่งเครื่องหมายที่0หนึ่งที่เครื่องหมายและเครื่องหมายที่2π/5 6π/5เราสามารถเข้ารหัสนี้เป็นรายการหรือเป็นสตริง[0,1,3]##_#_

ตัวอย่าง

โปรดทราบว่าผลลัพธ์ไม่จำเป็นต้องซ้ำกัน

n:  output:
 1  [0]
 2  [0,1]
 3  [0,1]
 4  [0,1,2]
 5  [0,1,2]
 6  [0,1,3]
 7  [0,1,3]
 8  [0,1,2,4]
 9  [0,1,3,4]
10  [0,1,3,6]
11  [0,1,3,8]
20  [0,1,2,3,6,10]

ป.ล. : มันคล้ายกับปัญหาไม้บรรทัดกระจัดกระจายแต่แทนที่จะเป็นสเกลเชิงเส้น (ที่ปลายทั้งสอง) เราจะพิจารณาสเกลวงกลม (เชิงมุม)

PPS: สคริปต์นี้ควรคำนวณตัวอย่างหนึ่งชุดของเครื่องหมายแต่ละnอัน ลองออนไลน์!

PPPS: ตามที่ @ngn ชี้ให้เห็นปัญหานี้เทียบเท่ากับการค้นหาฐานที่ต่างกันเล็กน้อยของกลุ่มคำสั่งnวงจร คำสั่งซื้อขั้นต่ำน้อยที่สุดมีการระบุไว้ในhttp://oeis.org/A283297และมีขอบเขตทางทฤษฎีอยู่ในhttps://arxiv.org/pdf/1702.02631.pdf



ล่อชายแดนที่มีการทับซ้อนกันแน่นอนเมื่ออำนาจนายกn = q^2 + q + 1 q
Peter Taylor

@ PeterTaylor ฉันไม่เห็นว่าทำไมคุณคิดว่ามันเป็นล่อลวง และคุณสามารถอธิบายรายละเอียดในสิ่งที่มี "เหลื่อม" ได้อย่างไร? แม้ว่าจะมีความคล้ายคลึงกัน แต่ปัญหาเหล่านี้ก็แตกต่างกันมาก ยิ่งไปกว่านั้นนี่คือโค้ดกอล์ฟและความท้าทายที่คุณเชื่อมโยงไม่ได้รวมถึงขนาดของโปรแกรมในการให้คะแนน
ข้อบกพร่อง

พวกเขาไม่ใช่ปัญหาที่แตกต่างกันสองอย่าง อ่านลิงค์ OEIS ใน PPPS ของคุณ: "ชุดความแตกต่างของนักร้อง" ที่อ้างถึงมีไม้บรรทัด Golomb ที่สร้างขึ้นโดยวิธีการฉายภาพเชิงพื้นที่ที่นำมาใช้ในคำตอบของฉัน ฉันคิดว่าวิธีการให้คะแนนนั้นแตกต่างกัน
Peter Taylor

คำตอบ:


4

เยลลี่ 13 ไบต์

ŒPðṗ2I%QLðÐṀḢ

ลองออนไลน์!

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

ŒPðṗ2I%QLðÐṀḢ  Main link. Argument: n (integer)

ŒP             Powerset; generate all subsequences of [1, ..., n].
  ð       ÐṀ   Begin a dyadic chain. Call it with all subsequences S as left
               argument and n as right one. Return the array of all sequences for
               which the chain returns the maximal result, i.e., [0, ..., n-1].
   ṗ2              Cartesian power 2; generate all pairs of elements of S.
     I             Increments; map each pair [x, y] to [y-x].
      %            Map each [y-x] to [(y-x)%n].
       Q           Unique; deduplicate the array of modular difference singletons.
        L          Take the length.
         ð     Begin a new, dyadic chain.
               Left argument: S' (filted subsequences). Right argument: n
            Ḣ  Take the first element of S'.
               Since S was sorted by length, so is S', so the first element of S'
               is the shortest subsequence that satisfies the condition.

4

MATL , 20 ไบต์

:qGZ^!"G:q@&-G\m?@u.

นี้ไหลออกมาจากหน่วยความจำใน TIO 8สำหรับปัจจัยการผลิตเกิน

ลองออนไลน์!

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

สิ่งนี้สร้างพลังคาร์ทีเซียน[0 1 ... n-1]ด้วยเลขชี้กำลังnและใช้ลูปเพื่อทดสอบ tuple คาร์ทีเซียนแต่ละอัน การทดสอบประกอบด้วยในการคำนวณความแตกต่างจากจำนวนทั้งหมดขององค์ประกอบถ้า tuple และเห็นว่าแตกต่างเหล่านั้น modulo nรวมทั้งหมดตัวเลข0, 1, ... n-1,

ทันทีที่พบ tuple คาร์ทีเซียนบรรลุเงื่อนไขลูปจะออกและรายการที่ไม่ซ้ำกันใน tuple นั้นจะถูกพิมพ์เป็นโซลูชั่น

งานนี้เพราะได้รับU > โวลต์ซึ่งเป็นชุดที่เพียงพอของ tuples กับยู ที่ไม่ซ้ำกันรายการที่จะรับประกันว่าจะมีการทดสอบก่อนหน้านี้กว่า tuple ใด ๆ กับโวลต์รายการที่ไม่ซ้ำกัน "เพียงพอชุด" หมายความว่าถ้าไม่มี tuples ในชุดนั้นเป็นวิธีการแก้ปัญหาแล้วไม่มีสิ่งอันดับอื่น ๆ ที่มีจำนวนรายการที่ไม่ซ้ำกันเหมือนกันคือวิธีแก้ปัญหา

ตัวอย่างเช่นสำหรับn = 3tuples คาร์ทีเซียนดังแสดงด้านล่างโดยที่แต่ละแถวเป็น tuple:

0 0 0
0 0 1
0 0 2
0 1 0
0 1 1
0 1 2
0 2 0
 ···
2 2 1
2 2 2
  • tuple แรกเป็น tuple 0 0 0ที่เกี่ยวข้องเพียง1ค่าเดียว แม้ว่า1 1 1และ2 2 2จะปรากฏขึ้นในภายหลัง0 0 0เป็นวิธีแก้ปัญหาหากมี ดังนั้นชุดเดี่ยวที่เกิดขึ้นจาก tuple 0 0 0เป็นชุดที่เพียงพอสำหรับU1 =
  • สิ่งอันดับที่สองและสามคือ0 0 1และจัด0 0 2รูปแบบชุดที่เพียงพอสำหรับu = 2; นั่นคือครอบคลุมทุกกรณีด้วย2ค่าที่ไม่ซ้ำกัน tuple ตัวที่สี่0 1 0จะไม่ถูกเลือกเป็นโซลูชันเพราะ0 0 1จะได้รับการทดสอบก่อน ในทำนองเดียวกัน tuple จะไม่ได้รับเลือกเพราะดูเหมือนจะช้ากว่า0 2 0 0 0 2Tuples เช่น2 2 1จะไม่ถูกเลือกเป็นวิธีแก้ปัญหาเพราะ0 0 1จะเทียบเท่า (modulo nและสูงถึงค่าที่ซ้ำกัน) และปรากฏขึ้นก่อน
  • เป็นต้น

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

:q         % Push [0 1 ... n-1], where n is the input (implicit)
GZ^        % Cartesian power with exponent n. Gives an (n^n) × n matrix
           % where each row is a Cartesian tuple
!          % Transpose. Now each Cartesian tuple is a column
!"         % For each column (that is, each Cartesian tuple)
  G:q      %   Push [0 1 ... n-1] (*)
  @        %   Push current column
  &-       %   Matrix of pairwise differences (**)
  G\       %   Modulo n, element-wise
  m        %   Ismember function: for each entry in (*), gives true iff
           %   it is present in (**)
  ?        %   If all entries are true
    @      %     Push current column
    u      %     Unique entries. This is the solution
    .      %     Break loop
           %   End (implicit)
           % End (implicit)
           % Display (implicit)

3

Stax , 26 21 ไบต์

Åæ4&╕u◙╩►s∙Φ▬═(0~ d+Q

เรียกใช้และแก้ไขข้อบกพร่องออนไลน์!

ตอนนี้เวอร์ชั่นออนไลน์ล้มเหลวในการป้อนข้อมูล20แต่ข้อผิดพลาดนี้ได้รับการแก้ไขและยังไม่ได้ถูกปรับใช้กับล่ามออนไลน์ที่ถูกปรับใช้ ระวังใช้เวลาในการรัน20เคส

คำอธิบาย

ปรากฎว่าเนื่องจากวิธีการคำนวณความแตกต่างของจำนวนคู่ฉันไม่ต้องกังวลเกี่ยวกับความเท่ากันของkและx-kที่นี่ บันทึก 5 ไบต์

ใช้เวอร์ชันที่คลายการบีบอัดเพื่ออธิบาย

rS{%o~{;i@c:2{E-x%mu%x<wm
r                            [0..`x`], where `x` is input
 S                           Powerset
  {%o~                       Sort by length
      {;i@             w     For each element in the powerset
          c:2                All pairs
             {    m          Map each pair `[p,q] to
              E-                 `q-p`
                x%               `(q-p)%x`
                   u%        Count of unique modulo differences
                     x<      Loop until the count of unique modulo differences is larger than the input(`n`)
                             Now we have found a valid set in the powerset
                        m    Output the members of the set,one element per line.

โดยการบังคับใช้ข้อกำหนดที่0และ1ทั้งสองเป็นสมาชิกของคำตอบเราสามารถสร้าง powerset ด้วย[2..x]แทน[0..x]แล้วเพิ่ม0และ1ด้วยตนเองทุกองค์ประกอบใน powerset มันมีประสิทธิภาพมากกว่า แต่จำเป็นต้องจัดการอินพุต1เป็นพิเศษและค่าใช้จ่ายเพิ่มเติม



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