找出多项式


20

我们知道f是具有非负整数系数的多项式。

给定f(1)f(1 + f(1))返回f。您可以将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 '17

9
尽管这是一个可爱的难题,但我认为代码基本上是基本转换。可能是骗子?
xnor

Answers:


27

果冻,3个字节

‘b@

在线尝试!

返回多项式作为系数列表。

由于我们知道多项式具有非负整数系数,因此f(b)可以通过基数的定义解释为“多项式的系数,以b位为底的数字”。这受制于以下条件:所有系数均不超过或等于b,但我们知道,因为b大于系数之和(即f(1)大一

程序只需将第一个参数()递增即可获得1 + f(1),然后调用基本转换原子(b),并将第一个参数作为基数,第二个参数作为数字(@用于交换参数的顺序,因为b通常会先取数字,再取底数)。

这是一个相当聪明的挑战。谢谢奥尔普!


13
这在世界上怎么可能
桑达

我需要学习果冻...
sagiksp

丹尼斯一定要看一看。
暴民埃里克(Erik the Outgolfer)'17

6

Mathematica,29 28字节

感谢郑焕敏节省了1个字节!(具有讽刺意味的是,带有Max

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

接受两个非负整数并返回(负整数)系数列表的纯函数。#2~IntegerDigits~(#+1)将与Doorknob的Jelly答案中的算法相同;不幸的是,IntegerDigits当基数等于1时,Mathematica会窒息,因此需要额外的bytes Max[...,2]


2
哈哈,真好。
JungHwan 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)))))

取消高尔夫:

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

0

C#,62个字节

(a,b)=>{var r="";a++;while(b>0){r+=(b%a)+" ";b/=a;}return r;};
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.