Polinomu bulun


20

Bunu biliyoruz f negatif olmayan tamsayı katsayılı bir polinom olduğunu.

Verilen f (1) ve f (1 + f (1)) dönüşü f . Sen çıkış may f katsayıları listesi gibi, bir ASCII polinom veya benzeri biçimlendirilmiş.

Örnekler:

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
Rastgele soru: I / kanıtlamak şu anda bunu çürütmek için denemek için çok yorgunum, ama biz her zaman bir cevap almak mümkün olacak garanti olduğunu f(1)ve f(1+f(1))?
HyperNeutrino

4
@HyperNeutrino Bu zorluğu başka türlü yapmazdım.
orlp

Doğru, bu iyi bir nokta. Hm. İlginç, yarın bunu kanıtlamaya çalışacağım çünkü bu çok ilginç. İlginç meydan okuma için teşekkürler!
HyperNeutrino

1
Baz-dönüşüm etiketi bir ipucu olması gerekiyordu?
Mart'ta Thunda

9
Bu şirin bir bulmaca kadar kod temelde temel dönüşüm olduğunu düşünüyorum. Muhtemelen dupe?
xnor

Yanıtlar:


27

Jöle , 3 bayt

‘b@

Çevrimiçi deneyin!

Polinomu bir katsayı listesi olarak döndürür.

Polinomun negatif olmayan tamsayı katsayılarına sahip olduğunu bildiğimiz için f (b) , bir bazın tanımı ile " polinomun katsayıları" baz b basamakları olarak alınır "olarak yorumlanabilir . Bu, katsayıların hiçbirinin b'yi aşmaması veya ona eşit olmaması koşuluna tabidir , ancak bunu biliyoruz, çünkü b , katsayıların toplamından ( f (1) ) daha büyüktür .

Program sadece 1 + f (1) elde etmek için ilk argümanı ( ) arttırır , sonra bilk dönüştürme tabanını ( ) ilk argümanı taban, ikinci argümanı sayı olarak çağırır ( argümanların @sırasını değiştirmek için, çünkü bgenellikle sayıyı birinci ve baz ikinci alır).

Bu oldukça zekice bir mücadeleydi; teşekkürler orlp!


13
Dünyada bu nasıl mümkün
Thunda

Jöle öğrenmem gerek ...
sagiksp

Dennis bunu mutlaka görmeli.
Outgolfer Erik

6

Mathematica, 29 28 bayt

1 bayt kazandığı için JungHwan Min'e teşekkürler! (ironik bir şekilde, a ile Max)

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

İki negatif olmayan tamsayı alan ve (negatif olmayan tamsayı) katsayılarının bir listesini döndüren saf işlev. Doorknob'un Jelly cevabı ile#2~IntegerDigits~(#+1) aynı algoritma olurdu ; ne yazık ki, Mathematica'nın taban 1'e eşit olduğu zaman boğulur, bu nedenle ekstra bayt ihtiyacı .IntegerDigitsMax[...,2]


2
Haha, iyi olan.
JungHwan Min

4

Python 2 , 38 bayt

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

Çevrimiçi deneyin!


satırsonu ayrılmış katsayılar çıktılar

Örnek çıktı 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 bayt

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

Otomatik olarak biçimlendirildiğinde şöyle görünür:

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

\Operatör bir zemin bölünüşün


1

AHK , 63 bayt

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

AutoHotkey, gelen parametreler için değişken adları olarak 1-n sayılarını atar. Bu işlevlerde kullanmaya çalıştığınızda bazı sorunlara neden olur, çünkü 1 adlı değişken yerine değişmez sayı 1 anlamına geldiğini düşünür. Bulabildiğim en iyi çözüm, bunları farklı değişkenlere atamaktır.


1

Java, 53 bayt

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

Katsayıların bir listesini çıkarır. Matematik için teşekkürler.

İfadesi bir atanmalıdır Function<Integer, IntConsumer>Birinci ve denilen applyişlevi ing sonra accepting int. Java 9'larla içe aktarmaya gerek yoktur 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

Ortak Lisp, 87 bayt

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.