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.