ভ্যান্ডারমনডে নির্ধারণকারী


25

প্রদত্ত nমানের একটি ভেক্টর (x1,x2,x3,...,xn)সংশ্লিষ্ট ভ্যান্ডারমনডে ম্যাট্রিক্সের নির্ধারককে প্রদান করে ।

এই নির্ধারক হিসাবে এটি লেখা যেতে পারে:

সূত্র

বিস্তারিত

আপনার প্রোগ্রাম / ফাংশনটি কোনও সুবিধাজনক বিন্যাসে ভাসমান পয়েন্ট সংখ্যাগুলির একটি তালিকা গ্রহণ করতে হবে যা একটি চলক দৈর্ঘ্যের জন্য অনুমতি দেয় এবং নির্দিষ্ট নির্ধারকটিকে আউটপুট দেয়।

আপনি ধরে নিতে পারেন যে ইনপুট পাশাপাশি আউটপুটটি আপনার ভাষা সমর্থন করে এমন মানগুলির সীমার মধ্যে। আপনি যদি ভাষা ভাসমান পয়েন্ট সংখ্যা সমর্থন না করেন তবে আপনি পূর্ণসংখ্যা ধরে নিতে পারেন।

কিছু পরীক্ষার মামলা

মনে রাখবেন যে যখনই দুটি সমান এন্ট্রি থাকবে তখন নির্ধারকটি 0সংশ্লিষ্ট ভান্ডারমনডে ম্যাট্রিক্সে দুটি সমান সারি থাকায় নির্ধারক হবেন । এই অনুপস্থিত টেস্টকেসটি নির্দেশ করার জন্য @ আর্যান্ডোমরাকে ধন্যবাদ।

[1,2,2,3]            0 
[-13513]             1
[1,2]                1
[2,1]               -1
[1,2,3]              2
[3,2,1]             -2
[1,2,3,4]           12
[1,2,3,4,5]        288
[1,2,4]              6
[1,2,4,8]         1008
[1,2,4,8,16]  20321280
[0, .1, .2,...,1]   6.6586e-028
[1, .5, .25, .125]  0.00384521
[.25, .5, 1, 2, 4]  19.3798828

আমরা কি অনুমান করতে পারি ইনপুটটি কমপক্ষে দৈর্ঘ্য 2?
পূর্কাকুডারী

@ পিটু 1998 না, প্রথম পরীক্ষার কেসটি দেখুন।
অ্যালেক্স এ।

3
গুরুত্বপূর্ণ পরীক্ষার ক্ষেত্রে:: [1,2,2,3] => 0অ্যারেতে দুটি সমান উপাদান, কোডটি xi-xiকেবল তুলনা করে স্ব-তাত্পর্য ( ) পরীক্ষা করে কিনা তা পরীক্ষা করে 0
এলোমেলো

@ আরন্দোমরা আপনাকে ধন্যবাদ, আমি এর মধ্যে একটির অন্তর্ভুক্ত করতে পুরোপুরি ভুলে গেছি। যখনই দুটি এন্ট্রি সমান হয়, নির্ধারক 0 হবে কারণ একই সারিতে দু'বার রয়েছে।
flawr

1
@ ফ্লোয়ার প্রত্যাশিত আউটপুটটি আপনার চশমা থেকে পরিষ্কার ছিল। আমি পরীক্ষার কেসটি প্রস্তাব দিয়েছিলাম যাতে সমান সংখ্যার জন্য প্রস্তুত না করা উত্তরগুলি তাদের ভুল আরও সহজে খুঁজে পেতে পারে।
এলোমেলো

উত্তর:


9

জেলি, 6 বাইট

œc2IFP

œc2দৈর্ঘ্য 2 প্রতিস্থাপন ছাড়াই সমস্ত সংমিশ্রণ পায় gets Iএই জোড়াগুলির প্রত্যেকের পার্থক তালিকার গণনা করে, একটি তালিকা তৈরি করে [[1], [2], [3], ..., [1]]। আমরা Fল্যাটেন এবং Pরডুপেক্ট গ্রহণ করি।

এখানে চেষ্টা করুন!


8

রুবি, 49 47 বাইট

->x{eval(x.combination(2).map{|a,b|b-a}*?*)||1}

এটি একটি ল্যাম্বডা ফাংশন যা প্রকৃত মূল্যবান, এক-মাত্রিক অ্যারে গ্রহণ করে এবং ইনপুটটির ধরণের উপর নির্ভর করে একটি ভাসা বা পূর্ণসংখ্যা ফেরত দেয়। এটিকে কল করতে, এটি একটি ভেরিয়েবলের জন্য বরাদ্দ করুন তারপর করুন f.call(input)

আমরা ব্যবহার করে আকারের সমস্ত সংমিশ্রণ পেয়েছি .combination(2)এবং প্রতিটি জোড় ব্যবহার করে পার্থক্য পেয়েছি .map {|a, b| b - a}। আমরা ফলস্বর অ্যারে দ্বারা পৃথক স্ট্রিংয়ের সাথে যোগ করি *, তারপরে evalএটি, যা পণ্যটি ফেরত দেয়। যদি nilইনপুটটির দৈর্ঘ্য 1 থাকে তবে এটি হবে , যা রুবিতে মিথ্যা, তাই আমরা ||1এই পরিস্থিতিতে 1 টি ফিরে আসতে পারি। নোট করুন যে পণ্যটি 0 এর পরেও এটি কাজ করে কারণ যে কোনও কারণেই 0 রুবিতে সত্যবাদী।

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

ডোরকনবকে 2 বাইট সংরক্ষিত!


7

গণিত, 30 বাইট

1##&@@(#2-#&@@@#~Subsets~{2})&

এটি একটি বেনামে ফাংশন।

গাণিতিক দ্বারা প্রসারিত, এটি সমান (1 ##1 & ) @@ Apply[#2 - #1 & , Subsets[#1, {2}], {1}] &। (ধন্যবাদ টিপস পৃষ্ঠা) এর 1##&সমতুল্য Times, যা দ্বারা উত্পাদিত ইনপুট তালিকা থেকে প্রতিটি স্বতন্ত্র জোড় উপাদানগুলিতে প্রয়োগ করা হয় Subsets[list, {2}]। নোট যা Subsetsউপাদানগুলির স্বতন্ত্রতার জন্য পরীক্ষা করে না।


5

জে, 13 বাইট

-/ .*@(^/i.)#

এটি একটি monadic ফাংশন যা একটি অ্যারে নেয় এবং একটি নম্বর প্রদান করে। এটি এর মতো ব্যবহার করুন:

  f =: -/ .*@(^/i.)#
  f 1 2 4
6

ব্যাখ্যা

আমি ইনপুট অ্যারের সাথে যুক্ত ভ্যান্ডারমনডে ম্যাট্রিক্স স্পষ্টভাবে নির্মাণ করি এবং তার নির্ধারকটি গণনা করি।

-/ .*@(^/i.)#   Denote input by y
            #   Length of y, say n
         i.     Range from 0 to n - 1
       ^/       Direct product of y with the above range using ^ (power)
                This gives the Vandermonde matrix
                 1 y0     y0^2     ... y0^(n-1)
                 1 y1     y1^2     ... y1^(n-1)
                   ...
                 1 y(n-1) y(n-1)^2 ... y(n-1)^(n-1)
-/ .*           Evaluate the determinant of this matrix

আমি ভেবেছিলাম জেতে শ্বেতস্থানটি অ-গুরুত্বপূর্ণ ছিল ...
কনর ওব্রায়ান

@ সিও'বিʀɪᴇɴ নির্ধারণকারী একটি বিশেষ কেস যার জন্য একটি পৃথক স্থানের প্রয়োজন, যেহেতু .এটি একটি সংশোধক চরিত্রও। :নিজের জন্য একই ।
জাগারব

উহু! চমৎকার.
কনর ও'ব্রায়ান

@ CᴏɴᴏʀO'Bʀɪᴇɴ আসলে, আমি মনে করি ঠিক এটাই জেকে কুলকে শান্ত করে তোলে। জে মানে জট, যেমন একটি বিন্দু বা ছোট রিং (এপিএল ), জেয়ের সাথে জোট করার মতো ... অবিশ্বাস্যভাবে ওভারলোড হওয়া .এবং :(যা আবার দৃশ্যমানভাবে দুটি স্ট্যাকড .এর সমান ) জে পড়তে কঠিন করে তোলে (আমার জন্য)। আরও কত তখন যখন বিন্দুর পাশে শ্বেতস্পেস অর্থ নির্ধারণ করে! .সমস্ত কম্পিউটারের ইতিহাসের জে অবশ্যই সবচেয়ে বেশি বোঝা প্রতীক হতে হবে: আমি 53 টি স্বতন্ত্র অর্থ .এবং 43 টি গণনা করি (61 যদি আপনি সমস্তকে গণনা _9:করেন 9:) এর স্বতন্ত্র অর্থ :। Yukk। ;-)
অ্যাডাম

@ Nᴮᶻ এটি সম্পর্কে ভাবতে সাহায্য করতে পারে। নিজস্ব টোকেন হিসাবে; সুতরাং, এটি একটি সাদা স্থান ছাড়া অন্য অপারেটরের ভুল হতে পারে। জে যদি আপনার পক্ষে না হয় তবে এটি বোধগম্য।
কনর ও'ব্রায়ান

4

এমএটিএল , ৯

!G-qZRQpp

এটি অনলাইন চেষ্টা করুন!

এটি সমস্ত পার্থক্যের একটি ম্যাট্রিক্স গণনা করে এবং তারপরে কেবলমাত্র মূল ত্রিভুজের নীচে অংশ রাখে, অন্যান্য এন্ট্রিগুলি তৈরি করে 1যাতে তারা পণ্যটির উপর প্রভাব ফেলবে না। নিম্ন ত্রিভুজাকার ফাংশনটি অযাচিত উপাদানগুলিকে তোলে 0, না 1। সুতরাং আমরা বিয়োগ 1, নীচের ত্রিভুজাকার অংশটি নিয়ে, এবং 1ফিরে যোগ করি । তারপরে আমরা সমস্ত এন্ট্রিগুলির পণ্য নিতে পারি।

t     % take input. Transpose
G     % push input again
-     % subtract with broadccast: matrix of all pairwise differences
q     % subtract 1
ZR    % make zero all values on the diagonal and above
Q     % add 1
p     % product of all columns
p     % product of all those products

এটি দুর্ভাগ্যজনক তবে 2Xn!dpকেবলমাত্র একক মানের সাথে কাজ করবে বলে মনে হচ্ছে যখন মানটি 2 এর চেয়ে বেশি বা তার সমান হয় ... আমি জেলিকে পরাজিত করার চেষ্টা করে নিজেই এটি লিখেছিলাম: পি
ফ্রাইআমএইজিগম্যান

নিবন্ধন করুন তুমি ঠিক. সতর্ক থাকুন জন্য ধন্যবাদ!
লুইস মেন্ডো

হ্যাঁ, আমি বুঝতে পেরেছিলাম যে সমস্যা ছিল। আপনি যখন Xnচেক if size(arg) == [1,1] ...বা অন্য কিছু করতে চান তখন আমি একটি মোড়ক যুক্ত করার মতো কিছু চেষ্টা করার বিষয়টি বিবেচনা করব । আমি উত্সটিকে গর্ত দেখতে খুব অলস, তবে (আশা করি) এটি এতটা কঠিন হওয়া উচিত নয়।
FryAmTheEggman

@ ফ্রাইআম দ্য এজিগম্যান আসলে আমি নিশ্চিত নই যে সমস্যাটি (এ কারণেই আমি দ্রুত আমার মন্তব্য সম্পাদনা করেছি)। প্রথম ইনপুট একটি সংখ্যা হলে দ্বিতীয় ইনপুট হওয়া উচিত 1বা 0এবং তারপর কোনো পার্থক্য যদি প্রথম ইনপুট অ্যারের হিসাবে অথবা একটি সংখ্যা হিসেবে ব্যাখ্যা হয়। আসল সমস্যাটি হ'ল দ্বিতীয় ইনপুট অ্যারের আকারের বেশি হতে পারে না। "1 উপাদানের মধ্যে 2 টি উপাদান বেছে নেওয়ার কত উপায় আছে" এই ক্ষেত্রে অ্যারে / সংখ্যার পার্থক্য বিবেচনা করে: প্রথম ইনপুট যদি অ্যারে রিটার্ন হয় [](খালি অ্যারে), যদি এটি একটি নম্বর ফেরত দেয় 0। আমার ধারণা আমি ফিরে আসব [], কারণ এরপরে pঅন্য ব্যাখ্যাটি বাধ্য করে
লুইস মেন্ডো

@ ফ্রাইআম দ্য এজিগম্যান আমার ধারণা আমি এই ফাংশনটি দুটি সংস্করণে বিভক্ত করব। আবার ধন্যবাদ!
লুইস মেন্ডো

3

পাইথ, 15 13 12 11 বাইট

*F+1-M.c_Q2
         Q    take input (in format [1,2,3,...])
        _     reverse the array: later we will be subtracting, and we want to
                subtract earlier elements from later elements
      .c  2   combinations of length 2: this gets the correct pairs
    -M        map a[0] - a[1] over each subarray
  +1          prepend a 1 to the array: this does not change the following
                result, but prevents an error on empty array
*F            fold over multiply (multiply all numbers in array)

@ ফ্রাইআম দ্য এজিগম্যান এবং @ পিটু 1998 কে প্রতিটি বাইটের জন্য ধন্যবাদ !


1
* খালি অ্যারেতে
এফটি

3

গণিত, 32 বাইট

Det@Table[#^j,{j,0,Length@#-1}]&

ভ্যান্ডারমনডে স্টাফের জন্য বিল্টিন না পেয়ে আমি অবাক হয়েছি। সম্ভবত এটি নিজেরাই করা এত সহজ because

এটি একটি স্পষ্টভাবে একটি ভিএম এর ট্রান্সপোজ তৈরি করে এবং তার নির্ধারক গ্রহণ করে (যা অবশ্যই মূলটির মতো হয়)। এই পদ্ধতিটি আমার জানা কোনও সূত্র ব্যবহারের চেয়ে উল্লেখযোগ্যভাবে খাটো হয়ে গেছে।


3

হাস্কেল, 34 বাইট

f(h:t)=f t*product[x-h|x<-t]
f _=1

একটি পুনরাবৃত্তি সমাধান। যখন কোনও নতুন উপাদান hসম্মুখের দিকে চাপ দেওয়া হয় তখন প্রকাশের তালিকার x-hপ্রতিটি উপাদানটির গুণফল হয় x। জগারবকে 1 বাইটের জন্য ধন্যবাদ


2

মতলব, 26 বাইট

(Noncompeting)

বিল্টিনগুলির সোজা ব্যবহার মনে রাখবেন যে (আবারও) মতলব vanderভ্যান্ডারমনডে ম্যাট্রিক তৈরি করে তবে সারিগুলির ক্রমটি উল্টে গেল।

@(v)det(fliplr(vander(v)))

2
কেন নন-কেপেটিং?
অ্যালেক্স এ।

3
যেহেতু আমিই এই চ্যালেঞ্জটি করেছি, আমি কেবল এটি সরবরাহ করতে চেয়েছিলাম যাতে লোকেরা তাদের নিজস্ব উদাহরণ চেষ্টা করতে পারে।
flawr

ডিট (উল্লিখিত সারিগুলি) = (-1) ^ n ডিট (মূল) নয়?
hYPotenuser

আমি পুরোপুরি নিশ্চিত নই, আপনি যখনই দুটি কলাম বা সারি স্যুইচ করেন তখন নির্ধারক সুইচ সাইন হিসাবে।
flawr

@hYPotenuser - n + 1 দিয়ে n প্রতিস্থাপন করুন। আপনি যা করছেন তা একটি ম্যাট্রিক্স পি দ্বারা গুণমান যা ডান দিকের নীচে বাম থেকে উপরের ডানদিকে যাওয়া ব্যতীত সমস্ত শূন্য (তাই আপনি ডিট (পি * ভান্ডার (ভি)) = ডিট (পি) ডিট (ভান্ডার (ভি) চান )))। প্রথম কলামে বা যাই হোক না কেন প্রসারণ দ্বারা আপনি ডিটি (পি) = (-1) ^ (এন + 1) দেখতে পাবেন।
ব্যাটম্যান

2

মরিচা, 86 বাইট

|a:Vec<f32>|(0..a.len()).flat_map(|x|(x+1..a.len()).map(move|y|y-x)).fold(1,|a,b|a*b);

মরিচা, ভার্বোজ যথারীতি ...

ব্যাখ্যাটি পরে আসবে (এটি বেশ সোজা, যদিও)।


2

পার্ল, 38 41 বাইট

এর জন্য +1 অন্তর্ভুক্ত করুন -p

STDIN- এ একটি লাইনে নম্বর দিন। সুতরাং যেমন চালানো

perl -p vandermonde.pl <<< "1 2 4 8"

ডাবল লুপটি পেতে একটি অশুভ পুনরায় ব্যবহার করুন:

vandermonde.pl:

$n=1;/(^| ).* (??{$n*=$'-$&;A})/;*_=n

2

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

a=>a.reduce((p,x,i)=>a.slice(0,i).reduce((p,y)=>p*(x-y),p),1)

আমি একটি অ্যারে বোঝার চেষ্টা করেছি (ফায়ারফক্স 30-57) এবং এটি 5 বাইট দীর্ঘ ছিল:

a=>[for(i of a.keys(p=1))for(j of Array(i).keys())p*=a[i]-a[j]]&&p

বোরিং নেস্টেড লুপটি যদিও সম্ভবত সংক্ষিপ্ত।


1

হাস্কেল, 53 বাইট

 f x=product[x!!j-x!!i|j<-[1..length x-1],i<-[0..j-1]]

ব্যবহারের উদাহরণ: f [1,2,4,8,16]-> 20321280

সূচকগুলি jএবং iনেস্টেড লুপে যান এবং অবস্থানের উপাদানগুলির পার্থক্যের একটি তালিকা তৈরি করুনj এবংi । তালিকার সমস্ত উপাদানগুলির পণ্য তৈরি করুন।

অন্যান্য রূপগুলি যা সামান্য দীর্ঘ হয়ে গেছে:

f x=product[last l-i|l<-scanl1(++)$pure<$>x,i<-init l], 54 বাইট

import Data.List;f i=product[y-x|[x,y]<-subsequences i], 55 বাইট


1

সিজেম, 16 বাইট

1l~{)1$f-@+:*\}h

এ সিমন্স-এর পোস্টের জবাবে , সিজেমের সংমিশ্রণ অপারেটরের অভাব সত্ত্বেও, হ্যাঁ আরও ভাল করা সম্ভব হয় :)

-১ বাইট @ মার্টিনব্যাটনারকে ধন্যবাদ।

অনলাইনে চেষ্টা করে দেখুন | পরীক্ষা স্যুট

1                   Push 1 to kick off product
 l~                 Read and evaluate input V
   {          }h    Do-while loop until V is empty
    )                 Pop last element of V
     1$               Copy the prefix
       f-             Element-wise subtract each from the popped element
         @+           Add the current product to the resulting array
           :*         Take product to produce new product
             \        Swap, putting V back on top

0

সিজেম, 32 বাইট

1q~La\{1$f++}/{,2=},{~-}%~]La-:*

আমি নিশ্চিত যে কেউ সিজেমে আরও ভালভাবে গল্ফ করতে পারে ... মূল বিষয়টি হ'ল আমি সাবসেটগুলি পাওয়ার ভাল উপায়টি দেখতে পাচ্ছি না যাতে আমার বেশিরভাগ বাইট ব্যবহার হয়। এটি পাওয়ার সেট উত্পন্ন করে (মার্টিন বাটনার একটি ধারণা ব্যবহার করে) এবং তারপরে দৈর্ঘ্য -২ উপাদান নির্বাচন করে।



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