Koleksi dari urutan yang membentuk kuadrat sempurna


10

Mengingat urutan Oei A033581 , yang merupakan urutan yang tak terbatas, yang n 'th jangka (0-pengindeksan) diberikan oleh bentuk tertutup rumus 6 × n 2 .

Tugas Anda adalah menulis kode, yang menampilkan semua himpunan bagian dari himpunan N angka pertama dalam urutan, sehingga jumlah dari himpunan bagian adalah kuadrat sempurna.

Aturan

  • Bilangan bulat Ndiberikan sebagai input.
  • Anda tidak dapat menggunakan kembali nomor yang sudah digunakan dalam jumlah. (yaitu, setiap nomor dapat muncul di setiap subset paling banyak sekali)
  • Angka yang digunakan bisa non-berturut-turut.
  • Kode dengan ukuran paling tidak menang.

Contoh

Urutan yang diberikan adalah {0,6,24,54,96, ..., 15000}

Salah satu himpunan bagian yang diperlukan adalah {6,24,294}, karena

6+24+294 = 324 = 18^2

Anda perlu menemukan semua set tersebut dari semua panjang yang mungkin dalam rentang yang diberikan.


3
Pos pertama yang bagus! Anda dapat mempertimbangkan menambahkan contoh dan menguji kasus. Untuk referensi di masa mendatang, kami memiliki kotak pasir tempat Anda dapat mencoba ide-ide Anda.
9urous

Apakah ini meminta kami untuk menghitung A033581 yang diberikan N? Atau apakah saya tidak memahami ini dengan benar?
ATaco

@ATaco Seperti untuk urutan (1,9,35,39 ...) 1 + 9 + 39 = 49 kuadrat sempurna (Menggunakan 3 angka), 35 + 1 = 36 kuadrat sempurna lainnya tetapi ia menggunakan 2 angka. Jadi {1,35} adalah set yang diperlukan.
prog_SAHIL

3
@prog_SAHIL Menambahkan itu, dan beberapa lagi, sebagai contoh posting akan sangat membantu :)
Οurous

Jawaban:


3

05AB1E , 10 byte

ݨn6*æʒOŲ

Cobalah online!

Bagaimana?

ݨn6 * æʒOŲ || Program lengkap. Saya akan memanggil input N.

Ý || Rentang inklusif berbasis 0. Tekan [0, N] ∩ ℤ.
 ¨ || Hapus elemen terakhir.
  n || Kuadrat (elemen-bijaksana).
   6 * || Kalikan dengan 6.
     æ || Powerset.
      ʒ || Filter-pertahankan yang memenuhi hal berikut:
       O || --- | Jumlah mereka ...
        Ų || --- | ... Apakah kotak yang sempurna?

3

Haskell , 114 104 103 86 byte

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

Terima kasih kepada Laikoni dan Ørjan Johansen untuk sebagian besar bermain golf! :)

Cobalah online!

Versi yang sedikit lebih mudah dibaca:

--  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 Itu sangat cerdik! Terima kasih!
Cristian Lupascu

@Laikoni Benar! Terima kasih!
Cristian Lupascu


2

Pyth , 12 byte

-2 byte terima kasih kepada Tn. Xcoder

fsI@sT2ym*6*

Cobalah online!

2 byte lagi perlu ditambahkan untuk menghapus []dan [0], tetapi mereka sepertinya keluaran yang valid untuk saya!


Penjelasan

    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 byte: fsI@sT2ym*6*.
Tn. Xcoder

Itu golf pengecekan persegi yang saya cari!
Dave

2

Bersih , 145 ... 97 byte

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@

Cobalah online!

Menggunakan fungsi helper @untuk menghasilkan power set to nterm dengan menggabungkan setiap istilah [[],[6*n^2],...]dengan masing-masing istilah [[],[6*(n-1)*2],...]secara rekursif, dan dalam urutan terbalik.

Fungsi parsial fkemudian disusun (di mana ->menunjukkan okomposisi) sebagai:
apply @ -> take the elements where -> the sum -> is a square

Sayangnya tidak mungkin untuk melewatkan f=dan menyediakan fungsi parsial literal , karena aturan diutamakan mengharuskannya memiliki tanda kurung ketika digunakan inline.


1
Bah Anda punya trik yang harus dicuri jawaban Haskell ...: P
Ørjan Johansen



1

JavaScript (ES7), 107 byte

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

Demo

Berkomentar

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 byte

ò_²*6Ãà k_x ¬u1

Cobalah


Penjelasan

Hasilkan di array bilangan bulat dari 0 ke input ( ò) dan melewati masing-masing melalui fungsi ( _ Ã), kuadratkan itu ( ²) & mutiplying oleh 6 ( *6). Dapatkan semua kombinasi array itu ( à) dan hapus yang mengembalikan truey ( k) ketika melewati fungsi ( _) yang menambahkan elemen mereka ( x), dapatkan akar kuadrat dari hasil ( ¬) dan mod dengan 1 ( u1)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.