Temukan nomor biquadratic terdekat


18

Bilangan biquadratic adalah angka yang merupakan kekuatan keempat bilangan bulat lainnya, misalnya: 3^4 = 3*3*3*3 = 81

Diberikan bilangan bulat sebagai input, menghasilkan angka biquadratic terdekat.

Berikut adalah 15 kotak ganda pertama:

1, 16, 81, 256, 625, 1296, 2401, 4096, 6561, 10000, 14641, 20736, 28561, 38416, 50625

Ini adalah sehingga byte paling sedikit di setiap bahasa menang

Ini adalah OEIS A000583


Menarik untuk dicatat bahwa ini tidak akan pernah mengikat, karena urutan bergantian angka ganjil dan genap.
Okx

5
Anda dapat mengubah nama menjadi "Temukan zenzizenzic terdekat". en.wiktionary.org/wiki/zenzizenzic
Destructible Lemon

1
@ Mayube Ini tentu saja terjadi, karena urutannya adil n^4dan nberganti - ganti.
Martin Ender

2
Nomenklatur biquadratic membingungkan: sebelum melihat isi pertanyaan, saya pikir itu 2 x n²nomor: 2, 8, 18, 32, 50, 72, 98, ...
sergiol

2
Bukankah itu disebut "quartic"? ( Merriam-Webster , Wiktionary )
Olivier Grégoire

Jawaban:


15

Python 3 , 35 byte

lambda n:int((n**.5-.75)**.5+.5)**4

Cobalah online!

Bagaimana itu bekerja

Nilai n di mana output beralih dari ( k - 1) 4 ke k 4 memenuhi √ (√n - 3/4) + 1/2 = k , atau n = ((k - 1/2) 2 + 3 / 4) 2 = ( k 2 - k + 1) 2 = (( k - 1) 4 + k 4 + 1) / 2, yang merupakan bilangan bulat pertama yang lebih dekat dengan k 4 .

(Berfungsi untuk semua n ≤ 4504699340341245 = (8192 4 + 8193 4 - 7) / 2> 2 52 , setelah itu pembulatan titik-mengambang mulai memecahkannya, meskipun bekerja secara matematis untuk semua n .)


Anda dapat menyimpan byte dengan roundjika Anda beralih ke Python 2 yang membulatkan semua .5.
xnor

8

Oktaf , 35 byte

Tantangan ini membutuhkan pendekatan berbasis konvolusi.

@(n)sum(n>conv((1:n).^4,[1 1]/2))^4

Cobalah online!

Penjelasan

Ekspresi (1:n).^4menghasilkan vektor baris [1 16 81 256 ... n^4].

Vektor ini kemudian digabungkan [1 1]/2, yang setara dengan menghitung rata-rata geser ukuran balok 2. Secara implisit ini mengasumsikan bahwa vektor berbantalan kiri dan kanan 0. Jadi nilai pertama dalam hasilnya adalah 0.5(rata-rata dari suatu implisit 0dan 1), yang kedua adalah 8.5(rata-rata dari 1dan 16), dll.

Sebagai contoh, untuk n = 9hasilnya conv((1:n).^4,[1 1]/2)adalah

0.5 8.5 48.5 168.5 440.5 960.5 1848.5 3248.5 5328.5 3280.5

Perbandingan n>...kemudian menghasilkan

1 1 0 0 0 0 0 0 0 0 0

dan melamar sum(...)memberi 2. Ini berarti bahwa npersis melebihi 2titik tengah antara angka biquadratic (termasuk titik tengah tambahan 0.5). Akhirnya, ^4angkat ini 4untuk menghasilkan hasilnya 16,.


2
Bahkan lebih pegolf!
flawr

7

Haskell , 51 49 byte

Fungsi monad ftw!

f n=snd.minimum$(abs.(n-)<$>)>>=zip$(^4)<$>[1..n]

Cobalah online!

Penjelasan:

                                (^4)<$>[1..n] -- creates a list of fourth powers
            (abs.(n-)<$>)>>=zip               -- creates a list of |n-(4th powers)| and
                                              -- zips it with the 4th powers list
    minimum                                   -- finds the minimum
                                              -- (only first tuple entry matters)
snd                                           -- exctracts the second entry (the 4th power)

6

MATL , 6 byte

t:4^Yk

Cobalah online!

Penjelasan

Pertimbangkan input 9sebagai contoh.

t    % Implicitly input n. Duplicate         
     % STACK: 9, 9
:    % Range [1 2 ... n]
     % STACK: 9, [1 2 3 4 5 6 7 8 9]
4^   % Raise to 4, element-wise
     % STACK: 9, [1 16 81 256 625 1296 2401 4096 6561]
Yk   % Closest element. Implicitly display
     % STACK: 16

5

Neim , 5 byte

𝐈4𝕎S𝕔

Penjelasan:

𝐈       Inclusive range [1 .. input]
  𝕎    Raise to the  v  power
 4                   4th
     𝕔  Select the value closest to
    S   the input

Cobalah online!


2
Bahasa pemrograman ini tampaknya menggunakan karakter Unicode ("𝕎" dan "𝕔"). Karakter semacam itu biasanya membutuhkan lebih dari satu byte. Apakah Anda yakin 5 karakter dapat disimpan hanya menggunakan 5 byte?
Martin Rosenau


5

Excel, 25 byte

=INT((A1^.5-3/4)^.5+.5)^4

Excel memperbarui ini ke =INT((A1^0.5-3/4)^0.5+0.5)^4


1
Hanya sebuah catatan tentang konvensi untuk excel: itu adalah standar de facto yang Excel dan Excel VBA fungsi yang mengambil input dari Excel.ActiveSheetobjek mengambilnya dari selA1
Taylor Scott

1
@AylorScott, terima kasih sudah menunjukkannya. Telah diperbarui.
Wernisch


4

Brachylog , 9 byte

;I≜+.~^₄∧

Cobalah online!

Penjelasan

;I≜          I = 0 / I = 1 / I = -1 / I = 2 / etc. on backtracking
   +.        Output = Input + I
    .~^₄     Output = Something to the power 4
        ∧

3

JavaScript (ES7), 42 byte

x=>(n=x**.25|0,x-(k=n**4)<++n**4-x?k:n**4)

Versi rekursif, 44 byte

f=(x,k,b)=>(a=k**4)>x?a-x>x-b?b:a:f(x,-~k,a)

Demo



2

05AB1E , 6 byte

LnnI.x

Cobalah online!

Penjelasan

LnnI.x
L      # Push [1 .. input]
 nn    # Raise every element to the 4th power
   I   # Push input
    .x # Closest element in the array to input

2

APL, 22 byte

{o/⍨p=⌊/p←|⍵-⍨o←4*⍨⍳⍵}

Cobalah online!

Bagaimana?

o←4*⍨⍳⍵- o= range ( ) 4 [vectorize]

p←|⍵-⍨o- p= abs ( o- ) [vectorize]

o/⍨- ambil oelemen di indeks tempat ...

p=⌊/p- pelemen minimumnya adalah


2

Jelly , 6 byte

R*4ạÐṂ

Tautan monadik yang mengembalikan daftar satu item, atau program lengkap yang mencetak hasilnya (menggunakan metode yang tidak efisien).

Cobalah online!

Bagaimana?

R*4ạÐṂ - Link: number, n
R      - range(n) -> [1,2,3,...,n]
 *4    - raise to the fourth power -> [1,16,81,...,n**4]
    ÐṂ - filter keep those (only ever one) minimal:
   ạ   -   absolute difference (with n)
       - if a full program: implicit print (one item lists print their content).


1

C ++, 96 byte

int Q(int N){int i=1;while (pow(i,4)<N){i++;}if (pow(i,4)-N>N-pow(i-1,4)){i--;}return pow(i,4);}

Versi lengkap:

int Q(int N)
{
    int i = 1;

    while (pow(i, 4) < N)
    {
        i++;
    }

    if (pow(i, 4)-N > N-pow(i - 1, 4))
        i--;

    return pow(i,4);
}

LINK untuk mencoba



1

R , 47 44 37 35 byte

n=scan();which.min(((1:n)^4-n)^2)^4

Cobalah online!


Anda dapat mengembalikan fungsi anonim (menghapus f=) dan alih-alih x[which.min((x-n)^2)]menggunakan which.min((x-n)^2)^4, lalu memasukkan f=ke tajuk tautan TIO untuk pengujian seperti di sini :)
Giuseppe

1
@ Giuseppe Oh, tidak perlu mendefinisikan xsama sekali. Terima kasih!
Maxim Mikhaylov

ah, maka satu-satunya perbaikan lain adalah mengambil input dari stdin, n=scan();which.min(((1:n)^4-n)^2)^4dan input masuk ke bagian footer di TIO.
Giuseppe

@Giuseppe Terima kasih lagi! Berguna untuk mengetahui jawaban di masa depan dalam R.
Maxim Mikhaylov



0

QBIC , 38 byte

{p=q^4~p>:|~p-a>a-o|_Xo\_Xp]\o=p┘q=q+1

Penjelasan

{           DO infinitely
p=q^4       Set p to q quad (q starts out as 1)
~p>:|       IF p exceeds the input THEN
~p-a>a-o    check the distance to p and to o (the last quad) and
|_Xo        PRINT o, or
\_Xp        PRINT p accordingly
]           END IF
\o=p        ELSE  ( p <= input) store p in o to keep track of this quad
┘q=q+1      and raise q for the next iteration



0

C #, 95 byte

namespace System.Linq{n=>new int[940].Select((_,i)=>i*i*i*i).OrderBy(i=>Math.Abs(i-n)).First()}

Kami menggunakan 940 sebagai nilai yang ditetapkan karena nilai yang lebih besar akan meluap int.

Versi Lengkap / Diformat:

namespace System.Linq
{
    class P
    {
        static void Main()
        {
            Func<int, int> f = n => new int[940].Select((_, i) => i * i * i * i).OrderBy(i => Math.Abs(i - n)).First();

            for (int i = 1; i <= Int32.MaxValue; ++i)
                Console.WriteLine($"{i} = {f(i)}");

            Console.ReadLine();
        }
    }
}

0

Ruby , 23 34 byte

Saya tidak tahu mengapa 0.75angka ini sangat penting, tapi hei, apa pun yang berhasil.

->n{((n**0.5-0.75)**0.5).round**4}

Cobalah online!


Ini tidak akan memberikan biquadratic terdekat. Misalnya akan mengembalikan 256 untuk 151.
P.Péter
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.