ค้นหาหมายเลข biquadratic ที่ใกล้ที่สุด


18

หมายเลข biquadratic คือตัวเลขที่เป็นกำลังสี่ของจำนวนเต็มอื่นตัวอย่างเช่น: 3^4 = 3*3*3*3 = 81

กำหนดจำนวนเต็มเป็นอินพุตเอาต์พุตหมายเลข biquadratic ที่ใกล้เคียงที่สุด

นี่คือ 15 ตารางสองครั้งแรก:

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

นี่คือจำนวนน้อยที่สุดในแต่ละภาษาที่ชนะ

นี่คือ OEIS A000583


น่าสนใจที่จะทราบว่าสิ่งนี้จะไม่มีวันผูกกันเนื่องจากลำดับจะสลับเป็นเลขคี่และคู่
Okx

5
คุณสามารถเปลี่ยนชื่อเป็น "ค้นหา zenzizenzic ที่ใกล้ที่สุด" en.wiktionary.org/wiki/zenzizenzic
เลมอนที่ถูกทำลายได้

1
@Mayube จำเป็นต้องทำเพราะลำดับนั้นเป็นเพียงn^4และnสลับกันในการลงชื่อเข้าใช้
Martin Ender

2
ระบบการตั้งชื่อของ biquadratic นั้นสับสน: ก่อนที่จะเห็นเนื้อหาคำถามฉันคิดว่ามันเป็น2 x n²ตัวเลข: 2, 8, 18, 32, 50, 72, 98, ...
sergiol

2
นั่นไม่เรียกว่า "ควอร์ทิค" ใช่ไหม ( Merriam-Webster , Wiktionary )
Olivier Grégoire

คำตอบ:


15

Python 3 , 35 ไบต์

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

ลองออนไลน์!

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

ค่าnที่เอาต์พุตเปลี่ยนจาก ( k - 1) 4ถึงk 4 เป็นไปตามเงื่อนไข√ (√n - 3/4) + 1/2 = kหรือn = ((k - 1/2) 2 + 3 / 4) 2 = ( k 2 - k + 1) 2 = (( k - 1) 4 + k 4 + 1) / 2 ซึ่งเป็นสิ่งจำนวนเต็มแรกที่ใกล้ชิดกับk 4

(ทำงานสำหรับทุกn ≤ 4504699340341245 = (8192 4 + 8193 4 - 7) / 2> 2 52หลังจากที่จุดลอยตัว roundoff เริ่มต้นที่จะทำลายมันแม้ว่ามันจะทำงานทางคณิตศาสตร์สำหรับทุกn .)


คุณสามารถบันทึกไบต์ด้วยroundถ้าคุณสลับไปที่ Python 2 ซึ่งจะปัดเศษทั้งหมดขึ้น 0.5
xnor

8

อ็อกเทฟ 35 ไบต์

ความท้าทายนี้จำเป็นต้องมีวิธีการที่ใช้วิธีโน้มน้าว

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

ลองออนไลน์!

คำอธิบาย

การแสดงออกที่ผลิตเวกเตอร์แถว(1:n).^4[1 16 81 256 ... n^4]

เวกเตอร์นี้จะ convolved แล้วด้วยซึ่งเทียบเท่ากับการคำนวณค่าเฉลี่ยของการเลื่อนของบล็อกขนาด[1 1]/2 นี้โดยปริยายสันนิษฐานว่าเวกเตอร์คือซ้ายและขวาเบาะด้วย2 0ดังนั้นค่าแรกในผลลัพธ์คือ0.5(ค่าเฉลี่ยของนัย0และ1) ค่าที่สองคือ8.5(ค่าเฉลี่ยของ1และ16) เป็นต้น

เป็นตัวอย่างสำหรับn = 9ผลลัพธ์ของconv((1:n).^4,[1 1]/2)คือ

0.5 8.5 48.5 168.5 440.5 960.5 1848.5 3248.5 5328.5 3280.5

การเปรียบเทียบn>...นั้นให้ผล

1 1 0 0 0 0 0 0 0 0 0

และการประยุกต์ใช้ให้sum(...) 2ซึ่งหมายความว่าnเกิน2จำนวนจุดกึ่งกลางที่ตรงกับตัวเลขที่เป็นสองส่วน (รวมถึงจุดกึ่งกลางเพิ่มเติม0.5) ในที่สุด^4เพิ่มสิ่งนี้เพื่อ4ให้ได้ผลลัพธ์, 16.


2
มันยิ่งนักกอล์ฟ!
ข้อบกพร่อง

7

Haskell , 51 49 ไบต์

ฟังก์ชั่น monad ftw!

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

ลองออนไลน์!

คำอธิบาย:

                                (^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)


5

Neim , 5 ไบต์

𝐈4𝕎S𝕔

คำอธิบาย:

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

ลองออนไลน์!


2
ภาษาโปรแกรมนี้ดูเหมือนว่าจะใช้อักขระ Unicode ("𝕎" และ "𝕔") โดยทั่วไปอักขระดังกล่าวต้องการมากกว่าหนึ่งไบต์ แน่ใจหรือไม่ว่าตัวอักษร 5 ตัวสามารถจัดเก็บโดยใช้เพียง 5 ไบต์?
Martin Rosenau


5

Excel, 25 ไบต์

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

Excel จะอัปเดตเป็น =INT((A1^0.5-3/4)^0.5+0.5)^4


1
เพียงทราบเกี่ยวกับการประชุมสำหรับ excel: มันเป็นมาตรฐานจริงที่ Excel และ Excel VBA ฟังก์ชั่นที่รับอินพุตจากExcel.ActiveSheetวัตถุนำพวกเขาออกจากเซลล์A1
Taylor Scott

1
@TaylorScott ขอบคุณที่ชี้ให้เห็น ได้มีการอัพเดท
เวอร์นิช



3

JavaScript (ES7), 42 ไบต์

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

เวอร์ชันแบบเรียกซ้ำ 44 ไบต์

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

การสาธิต


3

อ็อกเทฟ 37 ไบต์

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

ฟังก์ชั่นไม่ระบุชื่อที่ใช้การแก้ไขเพื่อนบ้านที่ใกล้ที่สุด

ลองออนไลน์!


2
-1 ไม่conv :(
ข้อบกพร่อง

1
@ flawr สิ่งนี้ทำให้คุณรู้สึกดีขึ้นหรือไม่
Luis Mendo

1
มันทำอะไรได้มาก!
ข้อบกพร่อง


2

APL, 22 ไบต์

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

ลองออนไลน์!

อย่างไร?

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

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

o/⍨- นำoองค์ประกอบที่ดัชนีที่ ...

p=⌊/p- pองค์ประกอบขั้นต่ำคือ


2

เยลลี่ 6 ไบต์

R*4ạÐṂ

ลิงก์ monadic ส่งคืนรายการหนึ่งรายการหรือโปรแกรมเต็มรูปแบบที่พิมพ์ผลลัพธ์ (โดยใช้วิธีที่ไม่มีประสิทธิภาพ)

ลองออนไลน์!

อย่างไร?

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

R , 47 44 37 35 ไบต์

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

ลองออนไลน์!


คุณสามารถคืนค่าฟังก์ชั่นที่ไม่ระบุตัวตน (ลบf=) และแทนที่จะx[which.min((x-n)^2)]ใช้which.min((x-n)^2)^4แล้วใส่f=ลงในส่วนหัวของลิงค์ TIO สำหรับการทดสอบเช่นที่นี่ :)
Giuseppe

1
@Giuseppe โอ้ไม่จำเป็นต้องกำหนดxเลย ขอขอบคุณ!
Maxim Mikhaylov

อ่าการปรับปรุงอื่น ๆ เพียงอย่างเดียวคือรับอินพุตจาก stdin n=scan();which.min(((1:n)^4-n)^2)^4และอินพุตจะเข้าสู่ส่วนท้ายของ TIO
Giuseppe

@Giuseppe ขอบคุณอีกครั้ง! มีประโยชน์ที่จะทราบสำหรับคำตอบในอนาคตใน R.
Maxim Mikhaylov



0

QBIC , 38 ไบต์

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

คำอธิบาย

{           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 ไบต์

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

เราใช้ 940 เป็นค่าที่ตั้งไว้เนื่องจากค่าที่มากกว่าจะทำให้ int มากเกิน

เวอร์ชั่นเต็ม / ฟอร์แมต:

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 ไบต์

ฉันไม่รู้ว่าเพราะเหตุใดจึง0.75มีจำนวนที่สำคัญสำหรับเรื่องนี้ แต่เดี๋ยวก่อนทำงานอะไรก็ได้

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

ลองออนไลน์!


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