Polynomialception


22

f,gপূর্ণসংখ্যার উপর দুটি স্বেচ্ছাসেবী ডিগ্রি দেওয়া, আপনার প্রোগ্রাম / ফাংশনটি দ্বিতীয় বহুবর্ষের মধ্যে প্রথম বহুবর্ষের মূল্যায়ন করতে হবে। f(g(x))( দুটি বহুভিত্তির রচনাটি ওরফে (fog)(x))

বিস্তারিত

বিল্টিনগুলি অনুমোদিত। আপনি ইনপুট / আউটপুট হিসাবে যেকোন যুক্তিসঙ্গত ফর্ম্যাটিংটি ধরে নিতে পারেন তবে ইনপুট এবং আউটপুট ফর্ম্যাটটি মিলবে। যেমন একটি স্ট্রিং হিসাবে ফর্ম্যাটিং

x^2+3x+5

বা সহগের তালিকা হিসাবে:

[1,3,5] or alternatively [5,3,1]

তদুপরি ইনপুট বহুবচনগুলি পুরোপুরি প্রসারিত বলে ধরে নেওয়া যেতে পারে এবং ফলাফলগুলিও পুরোপুরি প্রসারিত হবে বলে আশা করা যায়।

উদাহরণ

A(x) = x^2 + 3x + 5, B(y) = y+1
A(B(y)) = (y+1)^2 + 3(y+1) + 5 = y^2 + 5y + 9

A(x) = x^6 + x^2 + 1, B(y) = y^2 - y
A(B(y))= y^12 - 6y^11 + 15y^10 - 20y^9 + 15y^8 - 6y^7 + y^6 + y^4 - 2 y^3 + y^2 + 1

A(x) = 24x^3 - 144x^2 + 288x - 192, B(y) = y + 2
A(B(y)) = 24y^3

A(x) = 3x^4 - 36x^3 + 138x^2 - 180x + 27, B(y) = 2y + 3
A(B(y)) = 48y^4 - 96y^2

অন্তর্নির্মিত সম্পর্কে কি?
মালটিসেন

1
@ মালটিসেন "বিশদ: বিল্টিনগুলি অনুমোদিত are (...)" : ডি
ফ্লাওয়ার

2
আমি মনে করি "কোনও যুক্তিসঙ্গত ফর্ম্যাট" কিছুটা প্রসারিত হতে পারে। বহুপদী মূল্যায়ন করে এমন কোনও ফাংশন যদি অনুমোদিত হয়, তবে গঠনটির ফাংশন (.)হাস্কেলের একটি উত্তর। আপনি সম্ভবত সহগের তালিকার কিছু উপস্থাপনা বলতে চাইছেন।
xnor

1
শিরোনাম! আমি এটি পেয়েছি :-D
লুইস মেন্ডো

2
@ লুইস মেন্ডো কুইক চিন্তাবিদ = পি
flawr

উত্তর:


10

হাস্কেল, 86 72 বাইট

u!c=foldr1((.u).zipWith(+).(++[0,0..])).map c
o g=(0:)!((<$>g).(*))!pure

oএমন কোনও ফাংশন সংজ্ঞায়িত করে o g fযা কম্পোজিশনের f ∘ g গণনা করে। বহুবচনগুলি ধ্রুবক পদে শুরু হওয়া সহগের একটি অযৌক্তিক তালিকা দ্বারা প্রতিনিধিত্ব করা হয়।

ডেমো

*Main> o [1,1] [5,3,1]
[9,5,1]
*Main> o [0,-1,1] [1,0,1,0,0,0,1]
[1,0,1,-2,1,0,1,-6,15,-20,15,-6,1]
*Main> o [2,1] [-192,288,-144,24]
[0,0,0,24]
*Main> o [3,2] [27,-180,138,-36,3]
[0,0,-96,0,48]

কিভাবে এটা কাজ করে

বহু-সম্পর্কিত সম্পর্কিত বিল্টিন বা লাইব্রেরি নেই। একই পুনরাবৃত্তি পর্যবেক্ষণ

f (x) = a + f₁ (x) x ⇒ f (x) g (x) = ag (x) + f₁ (x) g (x) x,
f (x) = a + f₁ (x) x ⇒ f (g (x)) = a + f₁ (g (x)) g (x),

যথাক্রমে বহুবর্ষীয় গুণ এবং রচনার জন্য। তারা দুজনেই ফর্ম নেয়

f (x) = a + f₁ (x) x ⇒ W (f) (x) = C (a) (x) + U (W (f₁)) (x)।

অপারেটর !ডাব্লু প্রদত্ত ইউ এবং সি এর জন্য এই ফর্মটির একটি পুনরাবৃত্তি সমাধান করে, zipWith(+).(++[0,0..])বহুপদী সংযোজনের জন্য ব্যবহার করে (দ্বিতীয় যুক্তিটি দীর্ঘতর um আমাদের উদ্দেশ্যে, এটি সর্বদা থাকবে) ধরে নেওয়া। তারপর,

(0:)এক্স দিয়ে বহুবচনীয় তর্ককে গুণিত করে (একটি শূন্য সহগ প্রেরণ করে);
(<$>g).(*)বহুপদী দ্বারা একটি স্কেলার যুক্তি গুন করে g;
(0:)!((<$>g).(*))বহুবচন দ্বারা বহুবচনীয় যুক্তিকে গুণিত করে g;
pureধ্রুবক বহুপদী (সিঙ্গলটন তালিকা) এর জন্য একটি স্কেলার যুক্তি তুলে ধরে;
(0:)!((<$>g).(*))!pureবহুবর্ষের সাথে একটি বহুপদী যুক্তি রচনা করে g


9

গণিত, 17 বাইট

Expand[#/.x->#2]&

ব্যবহারের উদাহরণ:

In[17]:= Expand[#/.x->#2]& [27 - 180x + 138x^2 - 36x^3 + 3x^4, 3 + 2x]

              2       4
Out[17]= -96 x  + 48 x

7

টিআই-বেসিক 68 কে, 12 বাইট

a|x=b→f(a,b)

ব্যবহারটি সোজা, উদাহরণস্বরূপ:

f(x^2+3x+5,y+1)

যা ফেরত দেয়

y^2+5y+9

ইনপুটগুলি বিভিন্ন ভেরিয়েবলের মধ্যে থাকতে আমার কাছে প্রতারণার মতো বলে মনে হচ্ছে। এই উত্তরের জন্য কি এটি গুরুত্বপূর্ণ?
feersum

এটি করতে নির্দ্বিধায়, আমি স্পষ্টভাবে কোনও যুক্তিসঙ্গত সুবিধাজনক ইনপুট ফর্ম্যাটটিকে অনুমতি দিয়েছি।
flawr

আপনার মন্তব্যের সম্পাদনা সম্পর্কিত: হ্যাঁ এটি কিছু যায় আসে না।
flawr

আমি এই সাইটের নিয়মগুলির সাথে খুব বেশি পরিচিত নই। টিআই-বেসিকের 1 বাইট হওয়া কি ঠিক ?
asmeurer

@ এসম্যুরার প্রকৃতপক্ষে: টিআই-বেসিক সংশ্লিষ্ট ক্যালকুলেটরগুলিতে ব্যবহৃত এনকোডিং দ্বারা স্কোর হয়। আপনি যদি বিবরণে আগ্রহী হন তবে আপনি এটি মেটাতে পড়তে পারেন । টি-বেসিক-দেব-এ এখানে টোকেনের একটি সারণী পাওয়া যাবে
flawr

6

পাইথন 2, 138 156 162 বাইট

ইনপুটগুলি প্রথমে ক্ষুদ্রতম শক্তিগুলির সাথে পূর্ণসংখ্যার তালিকা হিসাবে প্রত্যাশিত।

def c(a,b):
 g=lambda p,q:q>[]and q[0]+p*g(p,q[1:]);B=99**len(`a+b`);s=g(g(B,b),a);o=[]
 while s:o+=(s+B/2)%B-B/2,;s=(s-o[-1])/B
 return o

Ungolfed:

def c(a,b):
 B=sum(map(abs,a+b))**len(a+b)**2
 w=sum(B**i*x for i,x in enumerate(b))
 s=sum(w**i*x for i,x in enumerate(a))
 o=[]
 while s:o+=min(s%B,s%B-B,key=abs),; s=(s-o[-1])/B
 return o

এই গণনায় বহুভুজ সহগকে খুব বড় বেসে সংখ্যার অঙ্ক হিসাবে দেখা হয় (যা নেতিবাচক হতে পারে)। পলিনোমিয়ালগুলি এই ফর্ম্যাটে আসার পরে, গুণ বা সংযোজন হ'ল একক পূর্ণসংখ্যা অপারেশন। বেস যতক্ষণ পর্যাপ্ত পরিমাণে বড় হয়, এমন কোনও বাহন থাকবে না যা প্রতিবেশী অঙ্কগুলিতে ছড়িয়ে পড়ে।

B@ Xnor দ্বারা প্রস্তাবিত হিসাবে আবদ্ধ উপর উন্নতি থেকে 18।


দুর্দান্ত পদ্ধতি। জন্য B, 10**len(`a+b`)যথেষ্ট হবে?
xnor

@ এক্সনর হতে পারে ... এটা বলা আমার পক্ষে শক্ত।
শুক্রবার

+1 এটি সত্যিই সৃজনশীল সমাধান, এবং বিগিন্টগুলির একটি দুর্দান্ত ব্যবহার !!!
flawr

@xnor এখন আমি নিজেকে বোঝাতে পেরেছি যে hte
গুণাগুণ

5

পাইথন + সিমপি, 59 35 বাইট

from sympy import*
var('x')
compose

24 বাইট বন্ধ করে দেওয়ার জন্য @ এসম্যুরারকে ধন্যবাদ!

টেস্ট রান

>>> from sympy import*
>>> var('x')
x
>>> f = compose
>>> f(x**2 + 3*x + 5, x + 1)
x**2 + 5*x + 9

1
SymPy একটি compose()ফাংশন আছে।
asmeurer

1
উত্তর কোথায়? এটি আর কোনও ফাংশন সংজ্ঞায়িত কিছু নেই ...
feersum

1
@ ফেয়ারসাম এর আগে কখনও হয়নি। আপনি কেবল সেই মেটা পোস্টটি সম্পাদনা করেছেন।
মেগো

3
@ ফেয়ারসাম আপনি নিজের এজেন্ডার জন্য নীতিটি পরিবর্তন করতে একটি স্বীকৃত মেটা পোস্ট সম্পাদনা করেছেন। এটা ঠিক নেই।
মেগো

3
@ ফেয়ারসাম যদিও আপনি ভেবে দেখেছিলেন যে আপনার শব্দটি দ্ব্যর্থক, তবে এটি স্পষ্টভাবে সম্প্রদায়ের বাকী লোকদের পক্ষে নয়। আমরা from module import*;functionvalid কমত্যকে গ্রহণ করেছি যা বৈধ জমা ছিল। হোক না কেন, এই আরো সাম্প্রতিক নীতি, যা আমদানি ও নামবিহীন lambdas সঙ্গে সাহায্যকারী ফাংশন দেয়।
মেগো

3

সেজ, 24 বাইট

lambda A,B:A(B).expand()

সেজ 9.৯ হিসাবে ( http://sagecell.sagemath.org চালিত সংস্করণ ) হিসাবে, সুস্পষ্ট আর্গুমেন্ট অ্যাসাইনমেন্ট ছাড়াই ফাংশন কলগুলি ( f(2) rather than f(x=2)) একটি স্ট্রেডারে রীতিমতো বিরক্তিকর এবং অপ্রত্যাশিত বার্তা প্রিন্ট হওয়ার কারণ হয়ে থাকে। যেহেতু STDERR কোড গল্ফে ডিফল্টরূপে উপেক্ষা করা যায়, এটি এখনও বৈধ।

এটি ডেনিসের সিমপাই উত্তরের সাথে খুব মিল কারণ সেজ ক) পাইথনের উপর নির্মিত, এবং খ) ম্যাক্সিমা , কম্পিউটার বীজগণিত সিস্টেমটি সিমপাইয়ের সাথে অনেক উপায়ে ব্যবহার করে। যাইহোক, সেজ সিমপাইয়ের সাথে পাইথনের চেয়ে অনেক বেশি শক্তিশালী এবং এটি আলাদা আলাদা ভাষা যা এটির নিজস্ব উত্তরের যোগ্যতা।

সমস্ত পরীক্ষার কেস অনলাইনে যাচাই করুন



1

স্যাটেলিক টুলবক্স, 28 বাইট সহ ম্যাটল্যাব

@(f,g)collect(subs(f,'x',g))

এটি একটি বেনামে ফাংশন। এটিকে কল করতে এটি এটিকে একটি পরিবর্তনশীল বা ব্যবহারের জন্য নির্ধারণ করুন ans। ইনপুটগুলি বিন্যাসের সাথে স্ট্রিং রয়েছে (স্পেসগুলি alচ্ছিক)

x^2 + 3*x + 5

উদাহরণ রান:

>> @(f,g)collect(subs(f,'x',g))
ans = 
    @(f,g)collect(subs(f,'x',g))
>> ans('3*x^4 - 36*x^3 + 138*x^2 - 180*x + 27','2*x + 3')
ans =
48*x^4 - 96*x^2

1

পাইথন 2, 239 232 223 বাইট

r=range
e=reduce
a=lambda*l:map(lambda x,y:(x or 0)+(y or 0),*l)
m=lambda p,q:[sum((p+k*[0])[i]*(q+k*[0])[k-i]for i in r(k+1))for k in r(len(p+q)-1)]
o=lambda f,g:e(a,[e(m,[[c]]+[g]*k)for k,c in enumerate(f)])

একটি 'যথাযথ' বাস্তবায়ন যা ঘাঁটিগুলিকে অপব্যবহার করে না। সর্বনিম্ন উল্লেখযোগ্য সহগ।

aবহুপদী সংযোজন, mবহুপদী গুণ এবং oএটি রচনা।


m([c],e(m,[[1]]+[g]*k))যেমন হয় না তেমন e(m,[[c]]+[g]*k)?
নীল

@ নীল গুড কল, এটির সাথে একটিতে দুটি স্কোয়াশ করতে পারে!
orlp

a=lambda*l:map(lambda x,y:(x or 0)+(y or 0),*l)
অ্যান্ডারস ক্যাসরগ

@ আন্ডারস ক্যাসরগ রাইট, আমি এটিকে যুক্ত করেছি, ধন্যবাদ :)
orlp

আপনার বহুপদী সংযোজনটি সহজ করা সম্ভব হতে পারে, যেহেতু আমি মনে করি যে একটি তালিকা সর্বদা অপরের চেয়ে দীর্ঘ হবে, সুতরাং আপনার ( or 0)সেই সংস্করণটির দরকার নেই।
নীল

1

জাভাস্ক্রিপ্ট (ES6), 150 103 বাইট

(f,g)=>f.map(n=>r=p.map((m,i)=>(g.map((n,j)=>p[j+=i]=m*n+(p[j]||0)),m*n+(r[i]||0)),p=[]),r=[],p=[1])&&r

অ্যারি a = [a 0 , a 1 , a 2 , ...] হিসাবে বহুবর্ষগুলি গ্রহণ করে এবং প্রদান করে যা একটি 0 + a 1 * x + a 2 * x 2 প্রতিনিধিত্ব করে ...

সম্পাদনা করুন: পুনরাবৃত্তকারী থেকে পুনরাবৃত্ত বহুপদী গুণায় সরিয়ে সরিয়ে 47 বাইট সংরক্ষণ করা হয়েছে, যার পরে আমাকে দুটি mapকল একত্রীকরণের অনুমতি দেয় ।

ব্যাখ্যা: R ফলাফলের, যা শূন্য আরম্ভ করা হয়, একটি খালি অ্যারে দ্বারা প্রতিনিধিত্ব, এবং পি হয় কোনটি আরম্ভ করা হয়। পি প্রতিটি দ্বারা গুন করা হয় ঘুরে, এবং ফলাফল জমা পি একই সাথে জি দ্বারা গুণিত হয় ।

(f,g)=>f.map(n=>            Loop through each term of f (n = f[h])
 r=p.map((m,i)=>(           Loop through each term of p (m = p[i])
  g.map((n,j)=>             Loop though each term of g (n = g[j])
   p[j+=i]=m*n+(p[j]||0)),  Accumulate p*g in p
  m*n+(r[i]||0)),           Meanwhile add p[i]*f[h] to r[i]
  p=[]),                    Reset p to 0 each loop to calculate p*g
 r=[],                      Initialise r to 0
 p=[1]                      Initialise p to 1
)&&r                        Return the result


1

রুবি 2.4 + বহুবর্ষ , 41 + 12 = 53 বাইট

পতাকা ব্যবহার করে -rpolynomial। ইনপুট দুটি Polynomialবস্তু।

যদি কেউ আমাকে ভ্যানিলা রুবিতে বহির্মুখী করে তোলে (বহির্মুখী বহিরাগত গ্রন্থাগার নেই) তবে আমি খুব মুগ্ধ হব।

->a,b{i=-1;a.coefs.map{|c|c*b**i+=1}.sum}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.