এটি কি স্টোকাস্টিক ম্যাট্রিক্স?


24

একটি সম্ভাব্যতার সূত্রাবলি ম্যাট্রিক্স মার্কভ চেইন প্রেক্ষাপটে ব্যবহৃত সম্ভাব্যতার একটি ম্যাট্রিক্স হয়।

একটি অধিকার সম্ভাব্যতার সূত্রাবলি ম্যাট্রিক্স একটি ম্যাট্রিক্স যেখানে প্রতিটি সারির অঙ্কের হয় 1

একটি বাম স্টোকাস্টিক ম্যাট্রিক্স একটি ম্যাট্রিক্স যেখানে প্রতিটি কলামের যোগফল 1

একটি দোকর সম্ভাব্যতার সূত্রাবলি ম্যাট্রিক্স একটি ম্যাট্রিক্স যেখানে প্রতিটি সারি এবং প্রতিটি কলামের অঙ্কের হয় 1

এই চ্যালেঞ্জের মধ্যে, আমরা পূর্ণসংখ্যার ব্যবহারের শতাংশের সম্ভাবনাগুলি উপস্থাপন করব । একটি সারি বা কলাম অবশ্যই সেক্ষেত্রে যোগফল 100এবং যোগফল নয় 1

আপনার লক্ষ্যটি এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা ইনপুট হিসাবে একটি বর্গ ম্যাট্রিক্স দেওয়া হয়, চারটি মানের একটির আউটপুট দেয় যা সূচিত করে যে ম্যাট্রিক্স হয় ডান স্টোকাস্টিক, বাম স্টোকাস্টিক, দ্বিগুণ স্টোকাস্টিক বা এর কোনওটিই নয়।

ইনপুট

আপনি ইনপুটটির জন্য ম্যাট্রিক্সের কোনও উপযুক্ত প্রতিনিধিত্ব করতে পারেন যা আপনার ভাষার পক্ষে স্বাভাবিক। উদাহরণস্বরূপ, তালিকার একটি তালিকা, লাইনব্রেকগুলি দ্বারা পৃথককৃত সারিগুলির সাথে কমা দ্বারা পৃথক হওয়া মানগুলির একটি স্ট্রিং etc.

ইনপুট ম্যাট্রিক্স সর্বদা বর্গক্ষেত্র হবে এবং কেবল অ-নেতিবাচক পূর্ণসংখ্যা থাকবে। ইনপুট ম্যাট্রিক্স সর্বদা কমপক্ষে থাকবে 1×1

আপনি STDINকোনও ফাংশন আর্গুমেন্ট বা অনুরূপ কিছু ব্যবহার করে ইনপুটটি পাস করতে পারেন ।

আউটপুট

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

সংক্ষেপে, আপনার আউটপুটটির মধ্যে একটি সম্ভাব্য চারটি ক্ষেত্রে অবশ্যই 1-থেকে -1 চিঠিপত্র থাকতে হবে। যারা চার আউটপুট কিছু উদাহরণ হবে {1, 2, 3, 4}বা {[1,0], [0,1], [1,1], [0,0]}বা এমনকি {right, left, doubly, none}

আপনার উত্তরটিতে আপনার প্রোগ্রামটি যে চারটি আউটপুট ব্যবহার করে তা দয়া করে নির্দেশ করুন।

যদি কোনও ম্যাট্রিক্স দ্বিগুণ স্টোকাস্টিক হয় তবে আপনাকে অবশ্যই দ্বিগুণ স্টোকাস্টিকের সাথে মিলিয়ে আউটপুটটি ফেরত পাঠাতে হবে, এবং ডান বা বাম স্টোকাস্টিক নয়।

আপনি আউটপুট মুদ্রণ করতে STDOUTপারেন, এটি কোনও ফাংশন থেকে, বা অনুরূপ কিছু থেকে ফেরত দিতে পারেন।

পরীক্ষার মামলা

[100]               => Doubly stochastic

[42]                => None of those

[100  0  ]          => Doubly stochastic
[0    100]

[4   8   15]
[16  23  42]        => Left stochastic
[80  69  43]

[99  1 ]            => Right stochastic
[2   98]

[1   2   3   4 ]
[5   6   7   8 ]    => None of those
[9   10  11  12]
[13  14  15  16]

স্কোরিং

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর ins


আমি প্রথমে ম্যাট্রিক্সের আকার নির্ধারণ করতে কোনও ইনপুট নিতে পারি?
হাইপারনিউট্রিনো

@AlexL। না, এই মুহূর্তে চশমাগুলি পরিবর্তন করা এটি অন্যায় হবে।
ফ্যাটালাইজ করুন

উত্তর:


9

05 এ বি 1 , 13 11 10 বাইট

ডান স্টোকাস্টিক: [0,1]
বাম স্টোকাস্টিক: [1,0]
দ্বিগুণ স্টোকাস্টিক: এগুলির কোনওটিই [1,1]
নয়: [0,0]

Dø2FOTnQPˆ

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

ব্যাখ্যা

D            # duplicate input
 ø           # transpose the copy
  2F         # 2 times do (once for each matrix)
    O        # sum of the rows
     TnQ     # is equal to 100
        P    # product
         ˆ   # add to global list
             # implicitly print global list at the end of the program

14

হাস্কেল, 57 55 বাইট

import Data.List
s a=all((==100).sum)<$>[transpose a,a]

টাইপ ইনপুট (Eq a, Num a) => [[a]]। বুলিয়ান তালিকা আউটপুট[left-stochastic, right-stochastic]

2 জন বাইট সংরক্ষণের জন্য @ প্রসাদাসকিলারকে ধন্যবাদ


ফাংশন পয়েন্টফ্রি করে আপনি কিছু বাইট সংরক্ষণ করতে পারেননি? উদাহরণস্বরূপ [transpose,id]<*>(তারপরে আপনি কোনও s a=স্বতন্ত্র ফাংশন অনুমোদিত হিসাবে বাদ দিতে পারেন )
flawr

@ ফ্লোয়ার সম্ভবত, তবে [transpose,id]<*>এর একটি ধরণের রয়েছে [[[a]]]->[[[a]]], যার অন্য স্তর mapএবং একটি pure/ return/ (:[])অথবা টাইপের একটি ইনপুট [[[আন্ত]]] দরকার যা প্রাকৃতিক নয়। আমি পেয়েছি map(all(==100).map sum).(<$>[transpose,id]).flip id
সেরাটি

আহ ঠিক আছে, ব্যাখ্যা জন্য আপনাকে ধন্যবাদ!
flawr

all((==100).sum)তার বদলে কেমন হয় all(==100).map sum?
গর্বিত হাসেলেলার

নিঃসন্দেহে! allনিজেই একটি ম্যাপিং করে।
অ্যাংস

11

আর, 55 বাইট

function(m)c(all(colSums(m)==100),all(rowSums(m)==100))

নামহীন ফাংশন যেখানে mএকটি আর-ম্যাট্রিক্স হিসাবে ধরে নেওয়া হয়।

আউটপুট:

  • [1] TRUE FALSE: বাম স্টোকাস্টিক
  • [1] FALSE TRUE: ডান স্টোকাস্টিক
  • [1] TRUE TRUE: দ্বিগুণ
  • [1] FALSE FALSE: কিছুই না

any(colSums(m)-100)এবং একইভাবে rowSumsসমস্ত আউটপুট উল্টানোর সময় আপনাকে দুটি বাইট ফেলে দেবে, সুতরাং আপনি যদি এটিগুলি রাখতে চান তবে আপনি সর্বদা !নেট -1বাইটের জন্য একটি সামনে রাখতে পারেন ।
জিউসেপ

7

অক্টাভা, 35 34 32 31 বাইট

@(n)any([sum(n);sum(n')]-100,2)

এটিকে কল করুন:

f(100)
f(42)
f([4,8,15; 16,23,42; 80,69,43])
f([99,1;2,98])
f([1,2,3,4;5,6,7,8;9,10,11,12;13,14,15,16])

এটি এখানে পরীক্ষা করুন।

প্রথম দিকে ফ্লাওয়ারের জন্য 2 বাইট সংরক্ষণ করা হয়েছে, তবে আরও একটি পদ্ধতির জন্য গিয়েছিলেন যা 1 বাইট কম ছিল।

বিভিন্ন ক্ষেত্রে এটি নিম্নলিখিত ফলাফলগুলি দেয়:

0    Doubly
0    

1    None
1

0    Left
1

1    Right
0

,2একক সংখ্যা অন্তর্ভুক্ত না করা হলে শেষটি অপ্রয়োজনীয় হবে। এছাড়াও, যদি এটির 1পরিবর্তে 100(এটি যেমনটি পারে) এর সমষ্টি হয় , তবে এটি অন্য একটি 4বাইট সংরক্ষণ করতে পারে ।


6

গণিত 29 বাইট

{}⋃Tr/@#=={100}&/@{#,#}&

 = U + F3C7 = [p স্থানান্তর] অক্ষর প্রতিস্থাপন করা হচ্ছে। এই কোড স্নিপেট ম্যাথমেটিকায় সঠিকভাবে পেস্ট করবে।

আউটপুট হিসাবে {বামদিক, ডানথ্রিথ with সহ একই সত্যতা কনভেনশন


{}⋃একটি বাইট ওভার সাশ্রয়Union@
একটি সিমন্স

@ আশ্বাস, টিপসের জন্য ধন্যবাদ! এটি রেখে দিন এবং আমার বাইট মোটে একটি ত্রুটি সংশোধন করেছেন।
কেলি লোডার

এছাড়াও আমি মনে করি যদি আপনি আপনার আউটপুট {righttruth, lefttruth} করুন, তারপরে প্রতিস্থাপন Total@সঙ্গে Tr/@আরও 2 বাইট সংরক্ষণ করতে হবে।
একটি সিমন্স

অথবা সমানভাবে দুটি ম্যাট্রিককে বিপরীত করুন যাতে সমাধানটি হয়ে যায়{}⋃Tr/@#=={100}&/@{#,#}&
এ সিমন্স

@ অ্যাসিমোনস, হ্যাঁ, এটি অন্য ২ টি সংরক্ষণ করেছে। ধন্যবাদ!
কেলি লোডার

6

k, 21 19 বাইট

{min'100=+/'(x;+x)}

আউটপুট

  • 00b না
  • 10b বাম
  • 01b অধিকার
  • 11b উভয়

উদাহরণ:

k)f:{min'100=+/'(x;+x)} //store function as f
k)f(100 0;98 2)
01b

সম্পাদনা করুন: 3 দ্বারা বাইট গণনা হ্রাস - ফাংশন একটি ল্যাম্বডায় আবদ্ধ করার প্রয়োজন হয় না

সম্পাদনা করুন: বাই-কাউন্ট 2 দ্বারা হ্রাস করুন - এইচ / টি @ সিমন মেজর


1
আপনি আসলে ল্যাম্বডায় লাগিয়ে একটি বাইট সংরক্ষণ করতে পারেন: {min'100 = + / '(x; +: x)}
সাইমন মেজর

5

এমএটিএল , 12 বাইট

sG!sv!100=XA

আউটপুট দুটি শূন্য / এক মান। প্রথমে ম্যাট্রিক্সটি বাম-স্টোকাস্টিক কিনা তা নির্দেশ করে, দ্বিতীয়টি যদি ডান-স্টোকাস্টিক হয়।

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

s      % Implicitly input N×N matrix. Sum of each column. Gives a 1×N vector
G!     % Push input transposed
s      % Sum of each column. Gives a 1×N vector
v      % Concatenate vertically. Gives a 2×N matrix
!      % Transpose. N×2
100=   % Does each entry equal 100?
XA     % True for columns that contain only "true". Gives 1×2 vector. Implicitly display

মানুষ যে 100 ব্যয়বহুল ছিল, যদিও ভাল উত্তর।
ম্যাজিক অক্টোপাস উরান

5

গণিত, 46 43 বাইট tes

AllTrue[#==100&]/@Apply[Plus,{#,#},{1}]&

অন্যান্য উত্তর হিসাবে, আউটপুট হয়

{False, False} অ স্টোকাস্টিকের জন্য

{True, False} বাম-স্টোকাস্টিকের জন্য

{False, True} ডান stochastic জন্য

{True, True} দ্বিগুণ stochastic জন্য

অপারেটর ফর্মটিতে স্যুইচ করে 3 বাইট সংরক্ষণ করেছেন AllTrue


ব্যবহারের U + এ F3C7 (ব্যক্তিগত ব্যবহার) জন্য\[Transpose]
u54112

আমি এটি বিবেচনা করেছিলাম কিন্তু ভেবেছিলাম যে এটি কম আলোকিত ছিল
এ সিমন্স

এছাড়াও @শেষে একটি অতিরিক্ত রয়েছে
u54112

4

পিএইচপি, 104 বাইট

function($a){for($s=array_sum;$a[+$i];)$o|=$s($a[+$i])!=100|($s(array_column($a,+$i++))!=100)*2;echo$o;}

একটি বেনাম ফাংশন যা উভয়ই 0 => প্রতিধ্বনি করে, 1 => বাম, 2 => ডান, 3 => নয়।
ব্যবহার করুন:

php -r "$c=function($a){for($s=array_sum;$a[+$i];)$o|=$s($a[+$i])!=100|($s(array_column($a,+$i++))!=100)*2;echo$o;};$c(json_decode($argv[1]));" "[[4,8,15],[16,23,42],[80,69,43]]"

114 বাইটে একটি কমান্ড লাইন প্রোগ্রাম সংস্করণ:

for($a=json_decode($argv[1]);$a[+$i];)$o|=($s=array_sum)($a[+$i])!=100|($s(array_column($a,+$i++))!=100)*2;echo$o;

ব্যবহৃত:

 php -r "for($a=json_decode($argv[1]);$a[+$i];)$o|=($s=array_sum)($a[+$i])!=100|($s(array_column($a,+$i++))!=100)*2;echo$o;" "[[4,8,15],[16,23,42],[80,69,43]]"

4

পাইথন 2, 70 64 বাইট

পাগলের কিছুই এখানে নেই, কেবল zipম্যাট্রিক্স স্থানান্তর করতে স্প্ল্যাটিংয়ের ব্যবহার করা হচ্ছে :) ফলাফলগুলি নিম্নরূপ:

0 - not stochastic
1 - right stochastic
2 - left stochastic
3 - doubly stochastic

এবং এখানে কোড :)

k=lambda m:all(sum(x)==100for x in m)
lambda n:k(n)+2*k(zip(*n))

তারকা কি (* না ভুল?
এইচ এইচ

1
@ হ্যাঁ না, এটি splatঅপারেটর :) মূলত সেটাই আমাকে ম্যাট্রিক্স স্থানান্তর করতে দিচ্ছে :)
কেড

4

সি #, 205 203 183 বাইট

Golfed:

int F(int[,]m){int x,i,j,r,c,e,w;x=m.GetLength(0);e=w=1;for(i=0;i<x;i++){r=c=0;for(j=0;j<x;j++){r+=m[i,j];c+=m[j,i];}if(r!=100)e=0;if(c!=100)w=0;}return e==1&&w==1?3:e==1?1:w==1?2:4;}

মন্তব্যে অসম্পূর্ণ:

    int F(int[,] m)
    {
        //x - matrix size
        //i, j - loop control variables
        //r, c - row/column sum
        //e, w - east/west, pseudo-bool values indicate right/left stochastic
        int x, i, j, r, c, e, w;
        x = m.GetLength(0);
        e = w = 1;

        for (i = 0; i < x; i++)
        {
            r = c = 0;

            for (j = 0; j < x; j++)
            {
                r += m[i, j];
                c += m[j, i];
            }

            if (r != 100)
                e = 0;

            if (c != 100)
                w = 0;
        }

        return e == 1 && w == 1 ? 3 : e == 1 ? 1 : w == 1 ? 2 : 4;
    }

আউটপুট কী: 1 - ডান স্টোকাস্টিক 2 - বাম স্টোকাস্টিক 3 - ডাবল স্টোকাস্টিক 4 - কিছুই নেই

এটি ব্যবহার করে দেখুন: http://rextester.com/PKYS11433

সম্পাদনা 1: r=0;c=0;=>r=c=0;

EDIT2: নেস্টেড টেরিনারি অপারেটররা। ক্রেডিটগুলি @ ইয়ুডলে যায়।


2
if(e==1&&w==1)return 3;if(e==1)return 1;return w==1?2:4;যেহেতু eএবং wশুধুমাত্র 1 বা 0 হতে পারে, তাই এটি পরিবর্তন করা যায় return w<<1|e;এবং == 0 কে নতুন সংজ্ঞা দিতে পারে ।
লিঙ্ক এনজি

1
আপনি যদি এই ifবিবৃতিগুলির কয়েকটিকে টার্নারি অপারেশনে রূপান্তর করেন এবং কেবল শেষে একটি পূর্ণসংখ্যা ফিরে পান তবে আপনি 30 দ্বারা সংক্ষিপ্ত করতে পারেন । আইডুন্নো আমার সমাধান পোস্ট করা উচিত যদি এটি এতটা অনুরূপ।
Yodle

@ লিংকএনজি খুব সুন্দর আমি বুঝতে না পেরে কোড লিখতে চাই না। আমি বাইনারি অপারেটরদের সাথে পরিচিত নই।
পালদির

@ ইয়ডল আপনাকে ধন্যবাদ, আমি আমার সমাধানটি পরিবর্তন করেছি। আপনার পোস্টটি একেবারে মিল থাকলেও নির্দ্বিধায়।
পালদির

3

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

a=>[a.some(a=>a.reduce((l,r)=>l-r,100)),a.some((_,i)=>a.reduce((l,a)=>l-a[i],100))]

কেবল বিপরীতে, এই আউটপুটটি কেবল বাম দিকে ডান স্টোচিস্টিক ফলাফলই নয়, তবে বুলিয়ানগুলিও বিপরীত হয়, সুতরাং একটি আউটপুট [false, true] স্থির অর্থ ডান স্টোচাস্টিক।


3

সি # 6, 130 বাইট

using System.Linq;bool[]F(int[][]a)=>new[]{a.Where((_,i)=>a.Select(x=>x[i]).Sum()==100).Count()==a.Length,a.All(x=>x.Sum()==100)};

{False, False}অ সম্ভাব্যতার সূত্রাবলি জন্য
{True, False}বাম-সম্ভাব্যতার সূত্রাবলি জন্য
{False, True}ডান-সম্ভাব্যতার সূত্রাবলি জন্য
{True, True} দোকর সম্ভাব্যতার সূত্রাবলি জন্য

repl.it ডেমো

Ungolfed

bool[]F(int[][]a)=>
    // Return new array of two bools. Array type is inferred from arguments
    new[]
    {
        // Left:
        // Count the no. of columns which sums up to 100
        a.Where((_,i)=>a.Select(x=>x[i]).Sum()==100).Count()
            // Then check if no. of such columns equal to total column count
            ==a.Length,
        // Right: Do all rows sum up to 100?
        // Can't use this trick for left because no overload of All() accept Func<TSource,int,bool> like Where() does
        a.All(x=>x.Sum()==100)
    };


2

পিপ , 17 বাইট

অপ্রত্যাশিত মোড়কে, এই জমাটি একটি ফাংশন।

{[h]=UQ$+_M[Zaa]}

দুটি 0/ 1মানগুলির একটি তালিকা প্রদান করে : [0 0]= স্টোকাস্টিক নয়, [0 1]= বাম স্টোকাস্টিক, [1 0]= ডান স্টোকাস্টিক, [1 1]= দ্বিগুণ স্টোকাস্টিক। এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

{               }  A function:
              a    Function argument (nested list)
           [Za ]   Create a list containing a's transpose and a
          M        Map this function to each of the above:
       $+_           Sum down the columns
     UQ              Get unique elements
 [h]=                If stochastic, the result should be [100]

2

ডায়ালগ এপিএল , 16 বাইট

{∧/100=+/↑⍵(⍉⍵)}

{ }প্রত্যক্ষ ফাংশন সংজ্ঞা (ওরফে "dfn"), আর্গুমেন্ট

⍵(⍉⍵) ম্যাট্রিক্স এর স্থানান্তর পাশাপাশি

এগুলিকে একটি একক 2 × n × n অ্যারেতে মিশ্রিত করুন

+/ শেষ অক্ষ বরাবর যোগফল, একটি 2 × n ম্যাট্রিক্স পান

100= কোন উপাদানগুলি 100 হয় (বুলিয়ান 0 0 হয়)

∧/ "এবং" শেষ অক্ষ বরাবর -আপনি, বাম, ডান স্টোকাস্টিকের জন্য 2 বুলিয়ান পান


2

সি ++ 14, 139 136 133 130 বাইট

-৩ বাইটের জন্য s=M.size(), -৩ রেফারেন্স প্যারামিটার দিয়ে ফেরার জন্য 3 বাইট, নামবিহীন ল্যাম্বদা হিসাবে -3 বাইট

[](auto M,int&r){int a,b,i,j,s=M.size();r=3;for(i=-1;++i<s;){for(j=-1,a=b=0;++j<s;a+=M[i][j],b+=M[j][i]);r&=(a==100)+2*(b==100);}}

অনুমান ইনপুট মত হতে vector<vector<int>>। দ্বিগুণ, বাম, ডান, কোনও স্টোকাস্টিকের জন্য 3,2,1,0 প্রদান করে।

Ungolfed:

auto f=
[](auto M, int& r){
  int a,b,i,j,s=M.size();
  r=3;
  for(i=-1;++i<s;){
    for(j=-1,a=b=0;++j<s;
      a+=M[i][j],
      b+=M[j][i]);
    r&=(a==100)+2*(b==100);
  }
}
;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.