ค้นหาพหุนาม


20

เรารู้ว่าfคือพหุนามที่มีสัมประสิทธิ์จำนวนเต็มไม่เป็นลบ

ป.ร. ให้f (1)และf (1 + f (1))ผลตอบแทนฉ คุณสามารถส่งออกfเป็นรายการค่าสัมประสิทธิ์พหุนามในรูปแบบ ASCII หรือคล้ายกัน

ตัวอย่าง:

f(1)  f(1+f(1))  f
0     0          0
1     1          1
5     75         2x^2 + 3
30    3904800    4x^4 + 7x^3 + 2x^2 + 8x + 9
1     1073741824 x^30

1
คำถามแบบสุ่ม: ฉันเหนื่อยเกินกว่าจะลองพิสูจน์ / พิสูจน์ได้ในขณะนี้ แต่รับประกันได้ไหมว่าเราจะได้รับคำตอบจากf(1)และf(1+f(1))?
HyperNeutrino

4
@HyperNeutrino ฉันจะไม่ทำสิ่งนี้อย่างอื่น
orlp

ใช่นั่นเป็นจุดที่ดี ฮึ่ม น่าสนใจฉันจะตรวจสอบเพื่อพิสูจน์ในวันพรุ่งนี้เพราะมันน่าสนใจมาก ขอบคุณสำหรับความท้าทายที่น่าสนใจ!
HyperNeutrino

1
ฐานแปลงแท็กควรจะเป็นคำใบ้?
Thunda

9
เท่านี้เป็นปริศนาที่น่ารักฉันคิดว่ารหัสนั้นเป็นพื้นฐานการแปลง อาจตกเป็นเหยื่อล่อ?
xnor

คำตอบ:


27

เยลลี่ 3 ไบต์

‘b@

ลองออนไลน์!

ส่งคืนพหุนามเป็นรายการค่าสัมประสิทธิ์

เนื่องจากเรารู้ว่าพหุนามมีค่าสัมประสิทธิ์จำนวนเต็มไม่เป็นลบf (b)สามารถตีความได้ว่า "สัมประสิทธิ์ของพหุนามนำมาเป็นฐานหลัก" โดยคำจำกัดความของฐาน สิ่งนี้อยู่ภายใต้เงื่อนไขที่ไม่มีสัมประสิทธิ์เกินหรือเท่ากับbแต่เรารู้ว่าเพราะbเป็นหนึ่งมากกว่าผลรวมของสัมประสิทธิ์ (ซึ่งคือf (1) )

โปรแกรมจะเพิ่มอาร์กิวเมนต์แรก ( ) เพื่อรับ1 + f (1)จากนั้นเรียกอะตอมฐานการแปลง ( b) ด้วยอาร์กิวเมนต์แรกเป็นฐานและอาร์กิวเมนต์ที่สองเป็นตัวเลข (ใช้@เพื่อสลับลำดับของอาร์กิวเมนต์ เนื่องจากbโดยปกติจะใช้หมายเลขแรกและฐานที่สอง)

นี่เป็นความท้าทายที่ฉลาดทีเดียว ขอบคุณ orlp!


13
เป็นไปได้อย่างไรในโลกนี้
Thunda

ฉันต้องเรียนรู้เยลลี่ ...
sagiksp

เดนนิสต้องเห็นอันนี้อย่างแน่นอน
Erik the Outgolfer

6

Mathematica, 29 28 ไบต์

ขอบคุณ JungHwan Min ที่ช่วยประหยัด 1 ไบต์! (แดกดันกับMax)

#2~IntegerDigits~Max[#+1,2]&

ฟังก์ชั่นแท้รับสองจำนวนเต็มลบและส่งกลับรายการของค่าสัมประสิทธิ์ #2~IntegerDigits~(#+1)จะเป็นขั้นตอนวิธีการเช่นเดียวกับในDoorknob คำตอบของเจลลี่ ; โชคไม่ดีที่ Mathematica เป็นIntegerDigitsฉายาเมื่อฐานเท่ากับ 1 Max[...,2]จึงจำเป็นที่จะต้องไบต์พิเศษ


2
ฮ่าฮ่าเป็นคนดี
JungHwan Min Min

4

Python 2 , 38 ไบต์

a,b=input()
while b:print b%-~a;b/=a+1

ลองออนไลน์!


เอาต์พุตสัมประสิทธิ์การขึ้นบรรทัดใหม่คั่น

ตัวอย่างผลลัพธ์สำหรับ30, 3904800:

9
8
2
7
4

=> 9*x^0 + 8*x^1 + 2*x^2 + 7*x^3 + 4*x^4


3

VBA, 75 ไบต์

Sub f(b,n)
b=b+1
Do While n>0
s=n Mod b &" " &s
n=n\b
Loop
Debug.?s
End Sub

เมื่อมันจัดรูปแบบโดยอัตโนมัติดูเหมือนว่า:

Sub f(b, n)
    b = b + 1
    Do While n > 0
        s = n Mod b & " " & s
        n = n \ b
    Loop
    Debug.Print s
End Sub

ตัว\ดำเนินการคือการแบ่งพื้น


1

AHK , 63 ไบต์

a=%1%
b=%2%
a+=1
While b>0
{s:=Mod(b,a) " "s
b:=b//a
}
Send,%s%

AutoHotkey กำหนดหมายเลข 1-n เป็นชื่อตัวแปรสำหรับพารามิเตอร์ขาเข้า มันทำให้เกิดปัญหาบางอย่างเมื่อคุณพยายามใช้สิ่งเหล่านี้ในฟังก์ชั่นเพราะมันคิดว่าคุณหมายถึงตัวอักษรหมายเลข 1 แทนที่จะเป็นตัวแปรที่ชื่อ 1 วิธีแก้ปัญหาที่ดีที่สุดที่ฉันสามารถหาได้คือการกำหนดให้กับตัวแปรที่แตกต่างกัน


1

Java, 53 ไบต์

a->b->{while(b>0){System.out.println(b%-~a);b/=a+1;}}

ส่งออกรายการค่าสัมประสิทธิ์ ขอบคุณ ovs สำหรับคณิตศาสตร์

การแสดงออกจะต้องได้รับมอบหมายให้เป็นFunction<Integer, IntConsumer>และเรียกได้ว่าเป็นครั้งแรกที่applyไอเอ็นจีฟังก์ชั่นแล้วไอเอ็นจีaccept intไม่จำเป็นต้องมีการนำเข้ากับ Java 9 jshell:

C:\Users\daico>jshell
|  Welcome to JShell -- Version 9-ea
|  For an introduction type: /help intro

jshell> Function<Integer, IntConsumer> golf =
        a->b->{while(b>0){System.out.println(b%-~a);b/=a+1;}}
golf ==> $Lambda$14/13326370@4b9e13df

jshell> golf.apply(30).accept(3904800)
9
8
2
7
4

1

Lisp ทั่วไป, 87 ไบต์

(defun p(x y)(multiple-value-bind(q m)(floor y (1+ x))(if(= 0 q)`(,m)`(,m ,@(p x q)))))

Ungolfed:

(defun find-polynomial (f<1> f<1+f<1>>)
  (multiple-value-bind (q m)
      (floor f<1+f<1>> (1+ f<1>))
    (if (zerop q) `(,m)
      (cons m (find-polynomial f<1> q)))))

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