随机矩阵是马尔可夫链上下文中使用的概率矩阵。
右随机矩阵是每一行和到1的矩阵。
左随机矩阵是一种矩阵,每一列之和为1。
双随机矩阵是一种矩阵,其中每一行和每列之和为1。
在这个挑战中,我们将用整数表示百分比的概率。在这种情况下,行或列必须与100和而不是1相加。
您的目标是编写一个程序或函数,给定一个整数平方矩阵作为输入,输出四个值中的一个,表示该矩阵要么是右随机的,要么是左随机的,或者是双随机的,或者是没有的。
您可以在输入时使用对您的语言来说自然的矩阵的任何适当表示。例如,一个列表列表,一个逗号分隔值的字符串,其中行由换行分隔,等等。
输入矩阵总是平方的,并且只包含非负整数.输入矩阵至少总是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]这是密码-高尔夫,所以以字节为单位的最短答案获胜。
发布于 2016-11-18 09:58:06
function(m)c(all(colSums(m)==100),all(rowSums(m)==100))假定m为R-矩阵的未命名函数.
输出:
[1] TRUE FALSE:左随机[1] FALSE TRUE:右随机[1] TRUE TRUE:加倍[1] FALSE FALSE:无发布于 2016-11-18 18:23:41
{}⋃Tr/@#=={100}&/@{#,#}&替换=U+F3C7=转座子字符。这个代码片段将正确地粘贴到Mathematica中。
与输出(左真相,对真})相同的真实性约定
发布于 2016-11-18 09:48:21
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 displayhttps://codegolf.stackexchange.com/questions/100277
复制相似问题