Temukan polinomialnya


20

Kita tahu bahwa f adalah polinomial dengan koefisien bilangan bulat non-negatif.

Diberikan pengembalian f (1) dan f (1 + f (1)) f . Anda dapat menampilkan f sebagai daftar koefisien, polinomial berformat ASCII, atau serupa.

Contoh:

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
Pertanyaan acak: Saya terlalu lelah untuk mencoba membuktikan / menyangkal ini sekarang, tetapi apakah itu dijamin bahwa kita akan selalu bisa mendapatkan jawaban dari f(1)dan f(1+f(1))?
HyperNeutrino

4
@HyperNeutrino saya tidak akan membuat tantangan ini sebaliknya.
orlp

Benar, itu poin yang bagus. Hm Menarik, saya akan melihat membuktikannya besok karena itu sangat menarik. Terima kasih atas tantangan yang menarik!
HyperNeutrino

1
The dasar konversi tag seharusnya petunjuk?
Thunda

9
Sebanyak ini adalah teka-teki lucu, saya pikir kode ini pada dasarnya adalah konversi basis. Mungkin tertipu?
xnor

Jawaban:


27

Jelly , 3 byte

‘b@

Cobalah online!

Mengembalikan polinomial sebagai daftar koefisien.

Karena kita tahu polinomial memiliki koefisien bilangan bulat non-negatif, f (b) dapat diartikan sebagai "koefisien polinomial, diambil sebagai basis b digit," dengan definisi basis. Ini tunduk pada kondisi bahwa tidak ada koefisien yang melebihi atau sama dengan b , tetapi kita tahu bahwa, karena b adalah yang lebih besar dari jumlah koefisien (yaitu f (1) ).

Program hanya menambah argumen pertama ( ) untuk mendapatkan 1 + f (1) , kemudian memanggil atom konversi basis ( b) dengan argumen pertama sebagai basis dan argumen kedua sebagai nomor (menggunakan @untuk menukar urutan argumen, karena bbiasanya mengambil nomor pertama dan basis kedua).

Ini adalah tantangan yang cukup pintar; terima kasih orlp!


13
Bagaimana mungkin di dunia ini
Thunda

Saya perlu belajar jelly ...
sagiksp

Dennis harus melihat yang ini pasti.
Erik the Outgolfer

6

Mathematica, 29 28 byte

Terima kasih kepada JungHwan Min karena menghemat 1 byte! (ironisnya, dengan aMax )

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

Fungsi murni mengambil dua bilangan bulat tidak negatif dan mengembalikan daftar koefisien (bilangan negatif). #2~IntegerDigits~(#+1)akan menjadi algoritma yang sama seperti pada jawaban Jelly Doorknob ; Sayangnya, Mathematica IntegerDigitstersedak ketika basisnya sama dengan 1, karenanya perlu byte ekstra Max[...,2].


2
Haha, bagus.
JungHwan Min

4

Python 2 , 38 byte

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

Cobalah online!


menghasilkan koefisien yang dipisahkan baris baru

Contoh output untuk 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 byte

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

Ketika secara otomatis memformat, terlihat seperti ini:

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

The \operator adalah membagi lantai


1

AHK , 63 byte

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

AutoHotkey memberikan angka 1-n sebagai nama variabel untuk parameter yang masuk. Ini menyebabkan beberapa masalah ketika Anda mencoba untuk menggunakan fungsi-fungsi tersebut karena menurut Anda maksud Anda adalah angka literal 1 daripada variabel bernama 1. Solusi terbaik yang dapat saya temukan adalah dengan menetapkannya ke variabel yang berbeda.


1

Java, 53 byte

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

Menghasilkan daftar koefisien. Berkat ovs untuk matematika.

Ekspresi harus ditetapkan ke Function<Integer, IntConsumer>dan dipanggil dengan terlebih dahulu applyfungsi, lalu accepting int. Tidak diperlukan impor dengan 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

Common Lisp, 87 byte

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

Tidak Terkumpul:

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

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.