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
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
回答:
‘b@
多項式を係数のリストとして返します。
多項式には非負の整数係数があることがわかっているため、f(b)は、基底の定義により、「基底b桁の多項式の係数」として解釈できます。これは、いずれの係数もbを超えない、または等しいという条件に従いますが、bは係数の合計(f(1))よりも1大きいため、それを知っています。
プログラムは、最初の引数(‘
)をインクリメントして1 + f(1)を取得b
し、最初の引数を基数とし、2番目の引数を数としてベース変換アトム()を呼び出します(引数@
の順序を入れ替えるために使用し、以降b
)は、通常、最初の数と基地秒かかります。
これは非常に巧妙な挑戦でした。ありがとうorlp!
1バイト節約してくれたJungHwan Minに感謝します!(皮肉なことに、Max
)
#2~IntegerDigits~Max[#+1,2]&
2つの非負整数を取り、(非負整数)係数のリストを返す純粋な関数。DoorknobのJelly answer#2~IntegerDigits~(#+1)
と同じアルゴリズムになります。残念なことに、IntegerDigits
ベースが1に等しいとMathematicaのチョークが発生するため、余分なバイトが必要になりますMax[...,2]
。
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
a->b->{while(b>0){System.out.println(b%-~a);b/=a+1;}}
係数のリストを出力します。数学のovsに感謝します。
発現は、に割り当てなければならないFunction<Integer, IntConsumer>
第によって呼び出されapply
、その後、関数をINGのaccept
INGの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
(a,b)=>{var r="";a++;while(b>0){r+=(b%a)+" ";b/=a;}return r;};
f(1)
とf(1+f(1))
?