Uma matriz estocástica é uma matriz de probabilidades usada no contexto das cadeias de Markov.
Uma matriz estocástica direita é uma matriz em que cada linha é somada 1
.
Uma matriz estocástica esquerda é uma matriz em que cada coluna é somada 1
.
Uma matriz duplamente estocástica é uma matriz em que cada linha e cada coluna é somada 1
.
Neste desafio, representaremos as probabilidades em porcentagem usando números inteiros . Nesse caso, uma linha ou coluna deve somar 100
e não 1
.
Seu objetivo é escrever um programa ou função que, dada uma matriz quadrada de números inteiros como entrada, produza um dos quatro valores indicando que a matriz é estocástica direita, estocástica esquerda, duplamente estocástica ou nenhuma delas.
Entrada
Você pode usar qualquer representação adequada de uma matriz que seja natural para o seu idioma para a entrada. Por exemplo, uma lista de listas, uma sequência de valores separados por vírgula com linhas separadas por quebras de linha, etc.
A matriz de entrada sempre será quadrada e conterá apenas números inteiros não negativos. A matriz de entrada sempre será pelo menos 1×1
.
Você pode passar a entrada usando STDIN
, como argumento de função, ou qualquer coisa semelhante.
Saída
Você deve escolher quatro saídas distintas que correspondem a estocástico direito , estocástico esquerdo , duplamente estocástico ou nenhum deles . Essas saídas devem ser constantes, independentemente de qual entrada é passada. Seu programa não pode retornar saídas diferentes para o mesmo caso, por exemplo, dizer que qualquer número negativo corresponde a nenhum deles não é válido.
Em suma, deve haver uma correspondência 1 para 1 entre sua saída e os quatro casos possíveis. Alguns exemplos dessas quatro saídas seriam {1, 2, 3, 4}
ou {[1,0], [0,1], [1,1], [0,0]}
ou mesmo {right, left, doubly, none}
.
Indique na sua resposta as quatro saídas que o seu programa usa.
Se uma matriz é duplamente estocástica, você deve retornar a saída correspondente a duplamente estocástica, e não à direita ou esquerda estocástica.
Você pode imprimir a saída STDOUT
, retorná-la de uma função ou algo semelhante.
Casos de teste
[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]
Pontuação
Isso é código-golfe , então a resposta mais curta em bytes vence.