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

Skidsdev
sumber
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 .)

Anders Kaseorg
sumber
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,.

Luis Mendo
sumber
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)
cacat
sumber
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
Luis Mendo
sumber
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!

Okx
sumber
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
3
@MartinRosenau Neim menggunakan codepage khusus
Okx
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

Wernisch
sumber
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

Mathematica, 21 byte

Nearest[Range@#^4,#]&
Martin Ender
sumber
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
        ∧
Fatalisasi
sumber
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

Arnauld
sumber
3

Oktaf , 37 byte

@(n)interp1(t=(1:n).^4,t,n,'nearest')

Fungsi anonim yang menggunakan interpolasi tetangga terdekat.

Cobalah online!

Luis Mendo
sumber
2
-1 no conv :(
flawr
1
@ flawr Apakah ini membuat Anda merasa lebih baik?
Luis Mendo
1
Itu sangat banyak!
flawr
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
Datboi
sumber
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

Uriel
sumber
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).
Jonathan Allan
sumber
1

PHP , 33 byte

<?=(($argn**.5-.75)**.5+.5^0)**4;

Cobalah online!

PHP , 56 byte

<?=2*$argn-($x=($f=$argn**.25^0)**4)>($y=++$f**4)?$y:$x;

Cobalah online!

Jörg Hülsermann
sumber
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

koita_pisw_sou
sumber
1

Haskell, 35 byte

f n=(floor$(n**0.5-3/4)**0.5+0.5)^4

Port of Anders 'Python3 menjawab .

CR Drost
sumber
1

R , 47 44 37 35 byte

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

Cobalah online!

Maxim Mikhaylov
sumber
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

Japt , 20 byte

Ini terasa terlalu lama!


õp4
V®nU a
VgWaWrmU

Menguji

Shaggy
sumber
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
steenbergh
sumber
0

Gangguan Umum, 50 byte

(lambda(x)(expt(floor(+(sqrt(-(sqrt x).75)).5))4))

Cobalah online!

Renzo
sumber
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();
        }
    }
}
TheLethalCoder
sumber
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!

Nilai Tinta
sumber
Ini tidak akan memberikan biquadratic terdekat. Misalnya akan mengembalikan 256 untuk 151.
P.Péter