বহুবর্ষীয় দীর্ঘ বিভাগ


10

বহুবর্ষীয় দীর্ঘ বিভাগ প্রয়োগ করুন, একটি অ্যালগরিদম যা দুটি বহুভুজকে বিভক্ত করে এবং ভাগফল এবং বাকী অংশটি পায়:

(12x ^ 3 - 5x ^ 2 + 3x - 1) / (x ^ 2 - 5) = 12x - 5 আর 63x - 26

আপনার প্রোগ্রামগুলিতে, আপনি লেবুতে অবিচ্ছিন্ন শব্দটি সহ বহুবচনগুলি অ্যারে হিসাবে উপস্থাপন করবেন। উদাহরণস্বরূপ, x ^ 5 - 3x ^ 4 + 2x ^ 2 - x + 1 হয়ে যাবে [1, -3, 0, 2, -1, 1]।

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

উদাহরণ: div([12, -5, 3, -1], [1, 0, -5]) == ([12, -5], [63, -26])


উত্তর:


3

জে, 94

f=:>@(0&{)
d=:0{[%~0{[:f]
D=:4 :'x((1}.([:f])-((#@]{.[)f)*d);([:>1{]),d)^:(>:((#f y)-(#x)))y'

যেমন।

(1 0 _5) D (12 _5 3 _1;'')
63 _26 | 12  _5

কিছু স্নিপেটের ব্যাখ্যা, যা এটিকে দেওয়া হয়েছে: (12 -5 3 -1) এবং খ: (1 0 -5)

একটি দৈর্ঘ্য:

#a
4

বিতে শূন্যগুলি যুক্ত করে একটি এবং খ একই আদেশ করুন:

(#a) {. b
1 0 -5 0

a, b এর উচ্চতর শক্তি (প্রথম উপাদান) ভাগ করুন:

(0{a) % (0{b)
12

এটি দিয়ে বি কে গুণান এবং এটি থেকে বিয়োগ করুন:

a - 12*b
12 0 _60

পুনরাবৃত্তি n বার b = f (ক, খ):

a f^:n b

দুটি জিনিস. 1) আপনি অস্বাভাবিক ক্রমে লভ্যাংশ / ডিভাইডার গ্রহণ করে চরিত্রগুলি জিতেন? 2) লভ্যাংশে কি সেই অনুগামী `; '' 'প্রয়োজনীয়? আসল প্রোগ্রামের ভিতরে থেকে এমন কিছু মনে হচ্ছে যা আপনার করা উচিত।
জেবি

@ জেবি: ১) না, আসলে এটি "স্বাভাবিক" আদেশের চেয়ে কম হতে পারে; আমি এটি সম্পর্কে চিন্তাভাবনা শুরু করার উপায়। 2) এটি অ্যারের অংশ তাই আমার ধারণা এটির ইনপুটটির অংশ হওয়া উচিত।
এভেলেক্স

অতিরিক্ত খালি অ্যারেটি ইনপুটটির সাথে কী করবে তা আমি বুঝতে পারি না।
জেবি

3

পাইথন 2, 260 258 257 255 বাইট

exec'''def d(p,q):
 R=range;D=len(p);F=len(q)-1;d=q[0];q=[q[i]/-d@R(1,F+1)];r=[0@R(D)];a=[[0@R(F)]@R(D)]
@R(D):
  p[i]/=d;r[i]=sum(a[i])+p[i]
  for j in R(F):
   if i<D-F:a[i+j+1][F-j-1]=r[i]*q[j]
 return r[:D-F],[d*i@r[D-F:]]'''.replace('@',' for i in ')

এটি কার্যকর করে:

def d(p,q):
 R=range;D=len(p);F=len(q)-1;d=q[0];q=[q[i]/-d for i in R(1,F+1)];r=[0 for i in R(D)];a=[[0 for i in R(F)] for i in R(D)]
 for i in R(D):
  p[i]/=d;r[i]=sum(a[i])+p[i]
  for j in R(F):
   if i<D-F:a[i+j+1][F-j-1]=r[i]*q[j]
 return r[:D-F],[d*i for i in r[D-F:]]

এর মতো ব্যবহার করুন:

>>>d([12., -5., 3., -1.],[1.,0.,-5.])
([12.0, -5.0], [63.0, -26.0])

1
বাহ, আমি প্রথমবার কোনও এক্সিকিউট / প্রতিস্থাপন দেখেছি অক্ষরগুলি সংরক্ষণ করতে ব্যবহার করা হবে।
xnor

@ এক্সনর আমি এটি অন্য এক বার করেছি, তবে একাধিক প্রতিস্থাপনের জন্য।
জাস্টিন 6

2

হাস্কেল, 126

একটি শুরুর জন্য:

l s _ 0=s
l(x:s)(y:t)n=x/y:l(zipWith(-)s$map(*(x/y))t++repeat 0)(y:t)(n-1)
d s t=splitAt n$l s t n where n=length s-length t+1

নমুনা ব্যবহার:

*Main> d [12, -5, 3, -1] [1, 0, -5]
([12.0,-5.0],[63.0,-26.0])

1

লাম্বদাস সহ জাভাস্ক্রিপ্ট, 108

f=(a,b)=>{for(n=b.length;a.length>=n;a.shift())for(b.push(k=a[q=0]/b[0]);q<n;++q)a[q]-=k*b[q];b.splice(0,n)}

এটি প্রথম যুক্তিটি অনুস্মারক দ্বারা এবং দ্বিতীয় দ্বারা ফলাফল দ্বারা প্রতিস্থাপন করে।

ফায়ারফক্সে ব্যবহারের উদাহরণ:

f(x=[12,-5,3,-1], y=[1,0,-5]), console.log(x, y)
// Array [ 63, -26 ] Array [ 12, -5 ]

বাগের জন্য দুঃখিত ইতিমধ্যে স্থির।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.