การรวบรวมจากลำดับที่เป็นสี่เหลี่ยมจัตุรัสที่สมบูรณ์แบบ


10

ที่กำหนดลำดับOEIS A033581ซึ่งเป็นลำดับอนันต์ที่n 'TH ระยะ (0 ดัชนี) จะได้รับจากรูปแบบสูตรปิด6 × n 2

งานของคุณคือการเขียนโค้ดซึ่งจะส่งออกชุดย่อยทั้งหมดของชุดหมายเลขแรกของ N ในลำดับเช่นว่าผลรวมของเซตย่อยเป็นรูปสี่เหลี่ยมจัตุรัสที่สมบูรณ์แบบ

กฎระเบียบ

  • จำนวนเต็มNถูกกำหนดเป็นอินพุต
  • คุณไม่สามารถใช้ซ้ำหมายเลขที่ใช้แล้วในผลรวม (นั่นคือแต่ละหมายเลขสามารถปรากฏในแต่ละชุดย่อยได้ไม่เกินหนึ่งครั้ง)
  • หมายเลขที่ใช้สามารถติดต่อกันไม่ได้
  • รหัสที่มีขนาดน้อยที่สุดชนะ

ตัวอย่าง

ลำดับที่กำหนดคือ {0,6,24,54,96, ... , 15000}

หนึ่งในเซตย่อยที่ต้องการคือ {6,24,294} เพราะ

6+24+294 = 324 = 18^2

คุณต้องค้นหาชุดดังกล่าวของความยาวที่เป็นไปได้ทั้งหมดในช่วงที่กำหนด


3
โพสต์แรกดีมาก! คุณอาจลองเพิ่มตัวอย่างและกรณีทดสอบ สำหรับการอ้างอิงในอนาคตเรามีSandboxที่คุณสามารถทดลองใช้ความคิดของคุณได้
Οurous

นี่ขอให้เราคำนวณ A033581 จาก N หรือไม่? หรือฉันไม่เข้าใจเรื่องนี้อย่างถูกต้อง?
ATaco

@ATaco เช่นเดียวกับลำดับ (1,9,35,39 ... ) 1 + 9 + 39 = 49 สี่เหลี่ยมจัตุรัสที่สมบูรณ์แบบ (ใช้ตัวเลข 3 ตัว), 35 + 1 = 36 สี่เหลี่ยมจัตุรัสที่สมบูรณ์แบบอีกอันหนึ่ง แต่ใช้ตัวเลข 2 ตัว ดังนั้น {1,35} เป็นชุดที่จำเป็น
prog_SAHIL

3
@prog_SAHIL เพิ่มที่และอื่น ๆ ไม่กี่เป็นตัวอย่างการโพสต์จะเป็นประโยชน์ :)
Οurous

ขอให้เรายังคงอภิปรายนี้ในการแชท
prog_SAHIL

คำตอบ:


3

05AB1E , 10 ไบต์

ݨn6*æʒOŲ

ลองออนไลน์!

อย่างไร?

ݨn6 * æʒOŲ || โปรแกรมเต็มรูปแบบ ฉันจะเรียกอินพุต N

Ý || ช่วงรวมแบบอิง 0 กด [0, N] ∩ℤ
 ¨ || ลบองค์ประกอบสุดท้าย
  n || สแควร์ (องค์ประกอบฉลาด)
   6 * || คูณด้วย 6
     æ || Powerset
      ʒ || ตัวกรอง - เก็บสิ่งที่พึงพอใจดังต่อไปนี้:
       O || --- | ผลรวมของพวกเขา ...
        Ų || --- | ... เป็นรูปสี่เหลี่ยมจัตุรัสหรือไม่?

3

Haskell , 114 104 103 86 ไบต์

f n=[x|x<-concat<$>mapM(\x->[[],[x*x*6]])[0..n-1],sum x==[y^2|y<-[0..],y^2>=sum x]!!0]

ขอบคุณLaikoniและØrjan Johansenสำหรับการเล่นกอล์ฟส่วนใหญ่! :)

ลองออนไลน์!

รุ่นที่อ่านง่ายขึ้นเล็กน้อย:

--  OEIS A033581
ns=map((*6).(^2))[0..]

-- returns all subsets of a list (including the empty subset)
subsets :: [a] -> [[a]]
subsets[]=[[]]
subsets(x:y)=subsets y++map(x:)(subsets y)

-- returns True if the element is present in a sorted list
t#(x:xs)|t>x=t#xs|1<2=t==x

-- the function that returns the square subsets
f :: Int -> [[Int]]
f n = filter (\l->sum l#(map(^2)[0..])) $ subsets (take n ns)

@Laikoni นั่นช่างแยบยลมาก ๆ ! ขอบคุณ!
Cristian Lupascu

@Laikoni ถูกต้อง! ขอบคุณ!
Cristian Lupascu


2

Pyth , 12 ไบต์

-2 ไบต์ขอบคุณ Mr. Xcoder

fsI@sT2ym*6*

ลองออนไลน์!

ต้องเพิ่มอีก 2 ไบต์เพื่อลบ[]และ[0]แต่ดูเหมือนว่าเอาต์พุตที่ถูกต้องสำหรับฉัน!


Explanataion

    fsI@sT2ym*6*
    f                  filter
           y           the listified powerset of
            m*6*ddQ    the listified sequence {0,6,24,...,$input-th result}
        sT             where the sum of the sub-list
     sI@  2            is invariant over int parsing after square rooting

12 fsI@sT2ym*6*ไบต์:
นาย Xcoder

นั่นคือการตรวจสอบสนามกอล์ฟที่ฉันกำลังมองหา!
เดฟ

2

สะอาด , 145 ... 97 ไบต์

import StdEnv
@n=[[]:[[6*i^2:b]\\i<-[0..n-1],b<- @i]]
f=filter((\e=or[i^2==e\\i<-[0..e]])o sum)o@

ลองออนไลน์!

ใช้ฟังก์ชั่นตัวช่วย@ในการสร้างพลังงานที่ตั้งค่าเป็นnข้อตกลงโดยเชื่อมโยงแต่ละเทอม[[],[6*n^2],...]กับแต่ละเทอมของการ[[],[6*(n-1)*2],...]เรียกซ้ำและในลำดับย้อนกลับ

ฟังก์ชั่นบางส่วนfนั้นจะประกอบไปด้วย (โดยที่->หมายถึงoองค์ประกอบ) เป็น:
apply @ -> take the elements where -> the sum -> is a square

น่าเสียดายที่มันเป็นไปไม่ได้ที่จะข้ามf=และให้ฟังก์ชั่นบางส่วนตามตัวอักษรเพราะกฎที่สำคัญกว่านั้นจำเป็นต้องมีวงเล็บเมื่อใช้แบบอินไลน์


1
Bah คุณมีเคล็ดลับคำตอบของ Haskell ควรขโมย ... : P
Ørjan Johansen



1

JavaScript (ES7), 107 ไบต์

n=>[...Array(n)].reduce((a,_,x)=>[...a,...a.map(y=>[6*x*x,...y])],[[]]).filter(a=>eval(a.join`+`)**.5%1==0)

การสาธิต

แสดงความคิดเห็น

n =>                      // n = input
  [...Array(n)]           // generate a n-entry array
  .reduce((a, _, x) =>    // for each entry at index x:
    [                     //   update the main array a[] by:
      ...a,               //     concatenating the previous values with
      ...a.map(           //     new values built from the original ones
        y =>              //     where in each subarray y:
          [ 6 * x * x,    //       we insert a new element 6x² before
            ...y       ]  //       the original elements
      )                   //     end of map()
    ],                    //   end of array update
    [[]]                  //   start with an array containing an empty array
  )                       // end of reduce()
  .filter(a =>            // filter the results by keeping only elements for which:
    eval(a.join`+`) ** .5 //   the square root of the sum
    % 1 == 0              //   gives an integer
  )                       // end of filter()

0

Japt 15 ไบต์

ò_²*6Ãà k_x ¬u1

ลองมัน


คำอธิบาย

สร้างอาร์เรย์ของจำนวนเต็มตั้งแต่ 0 ถึงอินพุต ( ò) และส่งผ่านแต่ละฟังก์ชั่น ( _ Ã) ยกกำลังสอง ( ²) & การคูณด้วย 6 ( *6) รับการรวมกันทั้งหมดของอาร์เรย์นั้น ( à) และลบสิ่งที่คืนค่าความจริง ( k) เมื่อผ่านฟังก์ชั่น ( _) ที่เพิ่มองค์ประกอบของพวกเขา ( x), รับค่าสแควร์รูทของผลลัพธ์ ( ¬) และ mods ที่ 1 ( u1)

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