Sebuah matriks stokastik adalah matriks probabilitas digunakan dalam konteks rantai Markov.
Sebuah kanan matriks stokastik adalah matriks di mana setiap baris jumlah untuk 1
.
Sebuah meninggalkan matriks stokastik adalah matriks di mana setiap kolom jumlah untuk 1
.
Sebuah ganda matriks stokastik adalah matriks di mana setiap baris dan setiap kolom jumlah untuk 1
.
Dalam tantangan ini, kami akan mewakili probabilitas dalam persen menggunakan bilangan bulat . Baris atau kolom harus dalam hal ini jumlah 100
dan bukan 1
.
Tujuan Anda adalah untuk menulis sebuah program atau fungsi yang, diberi matriks persegi bilangan bulat sebagai input, menampilkan salah satu dari empat nilai yang menunjukkan bahwa matriks tersebut adalah stokastik kanan, stokastik kiri, stokastik berlipat ganda atau tidak ada satupun.
Memasukkan
Anda dapat menggunakan representasi matriks yang wajar untuk bahasa Anda sebagai input. Misalnya, daftar daftar, serangkaian nilai yang dipisahkan koma dengan baris yang dipisahkan oleh linebreak, dll.
Matriks input akan selalu berbentuk bujur sangkar dan hanya akan berisi bilangan bulat non-negatif. Matriks input akan selalu setidaknya 1×1
.
Anda dapat meneruskan input menggunakan STDIN
, sebagai argumen fungsi, atau yang serupa.
Keluaran
Anda harus memilih empat output berbeda yang sesuai dengan stokastik kanan , stokastik kiri , stokastik ganda atau tidak sama sekali . Keluaran tersebut harus konstan terlepas dari input apa yang dilewatkan. Program Anda mungkin tidak mengembalikan output yang berbeda untuk kasus yang sama, misalnya mengatakan bahwa angka negatif yang sesuai dengan tidak ada yang tidak valid.
Singkatnya, harus ada korespondensi 1-ke-1 antara output Anda dan empat kasus yang mungkin. Beberapa contoh dari keempat keluaran itu adalah {1, 2, 3, 4}
atau {[1,0], [0,1], [1,1], [0,0]}
atau bahkan {right, left, doubly, none}
.
Harap tunjukkan dalam jawaban Anda empat keluaran yang digunakan program Anda.
Jika matriks stochastic ganda, maka Anda harus mengembalikan output yang sesuai dengan stochastic ganda, dan bukan stochastic kanan atau kiri.
Anda dapat mencetak hasilnya STDOUT
, mengembalikannya dari fungsi, atau yang serupa.
Uji kasus
[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]
Mencetak gol
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jawaban:
05AB1E ,
131110 byteStochastic kanan: Stochastic
[0,1]
kiri : Stochastic
[1,0]
ganda:
[1,1]
Tidak satu pun dari mereka:
[0,0]
Cobalah online!
Penjelasan
sumber
Haskell,
5755 byteInput tipe
(Eq a, Num a) => [[a]]
. Output daftar boolean[left-stochastic, right-stochastic]
Terima kasih kepada @proudhaskeller karena telah menghemat 2 byte
sumber
[transpose,id]<*>
(maka Anda bisa menghilangkans a=
fungsi anynomous diizinkan)[transpose,id]<*>
memiliki tipe[[[a]]]->[[[a]]]
, yang membutuhkan lapisan lain darimap
danpure
/return
/(:[])
atau input tipe [[[Int]]], yang tidak alami. Yang terbaik yang saya dapatkan adalahmap(all(==100).map sum).(<$>[transpose,id]).flip id
all((==100).sum)
bukanall(==100).map sum
?all
melakukan pemetaan itu sendiri.R, 55 byte
Fungsi tanpa nama di mana
m
diasumsikan sebagai R-matrix.Keluaran:
[1] TRUE FALSE
: Stochastic kiri[1] FALSE TRUE
: Stochastic benar[1] TRUE TRUE
: Diragukan[1] FALSE FALSE
: Tidak adasumber
any(colSums(m)-100)
dan juga untuk iturowSums
akan menjatuhkan Anda dua byte saat membalikkan semua output, jadi jika Anda ingin menyimpannya, Anda selalu dapat meletakkan!
di depan untuk-1
byte net .Oktaf,
35343231 byteSebut saja seperti ini:
Uji di sini.
Disimpan 2 byte berkat flawr pada awalnya, tetapi pergi untuk pendekatan lain yang 1 byte lebih pendek.
Ini menghasilkan berikut untuk kasus yang berbeda:
Yang terakhir
,2
tidak perlu jika satu digit tidak dimasukkan. Juga, jika ini dijumlahkan1
alih-alih100
(seperti yang bisa terjadi), itu akan menghemat4
byte lain .sumber
Mathematica 29 Bytes
mengganti karakter = U + F3C7 = [\ Transpose]. Cuplikan kode ini akan menempel dengan benar ke Mathematica.
Konvensi kebenaran yang sama dengan {lefttruth, righttruth} sebagai output
sumber
{}⋃
menghemat satu byte lebihUnion@
Total@
denganTr/@
akan menghemat 2 byte lebih lanjut.{}⋃Tr/@#=={100}&/@{#,#}&
k,
2119 byteKeluaran
00b
tidak ada10b
kiri01b
kanan11b
keduaContoh:
sunting: kurangi jumlah byte oleh 3 - fungsi tidak perlu dimasukkan dalam lambda
sunting: kurangi bytecount sebesar 2 - H / T @Simon Major
sumber
MATL , 12 byte
Output adalah dua nilai nol / satu. Pertama menunjukkan apakah matriksnya stochastic kiri, kedua jika itu adalah stochastic kanan.
Cobalah online! Atau verifikasi semua kasus uji
sumber
Mathematica,
4643 byteSeperti jawaban lain, hasilnya adalah
{False, False}
untuk non-stokastik{True, False}
untuk stochastic kiri{False, True}
untuk stochastic kanan{True, True}
untuk stokastik gandaDisimpan 3 byte dengan beralih ke bentuk operator dari
AllTrue
sumber
\[Transpose]
�
itu kurang mencerahkan@
di akhirPHP, 104 byte
Fungsi anonim yang menggema 0 => keduanya, 1 => kiri, 2 => kanan, 3 => keduanya.
Gunakan seperti:
Versi program baris perintah dengan 114 byte:
Digunakan seperti:
sumber
Python 2,
7064 BytesTidak ada yang gila di sini, hanya menggunakan splatting in
zip
untuk memindahkan matriks :) Outputnya adalah sebagai berikut:Dan inilah kodenya :)
sumber
splat
operatornya :) Intinya itulah yang membiarkan saya mengubah urutan matriks :)C #,
205203183 byteGolf:
Tidak dikoleksi dengan komentar:
Kunci output: 1 - stokastik kanan 2 - stokastik kiri 3 - stokastik ganda 4 - tidak ada
Cobalah: http://rextester.com/PKYS11433
EDIT1:
r=0;c=0;
=>r=c=0;
EDIT2: Operator ternary bersarang. Kredit diberikan ke @Yodle.
sumber
if(e==1&&w==1)return 3;if(e==1)return 1;return w==1?2:4;
Karenae
danw
hanya bisa 1 atau 0, itu dapat diubah menjadireturn w<<1|e;
dan mendefinisikan kembali tidak ada == 0.if
pernyataan tersebut menjadi operasi ternary dan mengembalikan integer pada akhirnya. Idunno jika saya harus memposting solusi saya karena sangat mirip.JavaScript (ES6), 83 byte
Justru sebaliknya, ini tidak hanya menghasilkan hasil stoachistic kanan di sebelah kiri, tetapi boolean juga terbalik, sehingga output
[false, true]
masih berarti stoachistic kanan.sumber
C # 6, 130 byte
{False, False}
untuk non-stochastic{True, False}
untuk stochastic kiri{False, True}
untuk stochastic kanan{True, True}
untuk stochastic gandademo repl.it
Tidak disatukan
sumber
Groovy, 57
Keluaran
[0,0]
jika tidak ada.[1,0]
jika benar[0,1]
jika dibiarkan.[1,1]
jika keduanya.sumber
Pip , 17 byte
Dalam putaran yang tidak terduga, pengajuan ini adalah fungsi.
Mengembalikan daftar dua
0
/1
nilai:[0 0]
= tidak stokastik,[0 1]
= stokastik kiri,[1 0]
= stokastik kanan,[1 1]
= stokastik dua kali lipat. Cobalah online!Penjelasan
sumber
Dyalog APL , 16 byte
{∧/100=+/↑⍵(⍉⍵)}
{ }
definisi fungsi langsung (alias "dfn"),⍵
adalah argumennya⍵(⍉⍵)
matriks di samping transposisinya↑
mencampurnya menjadi sebuah array 2 × n × n tunggal+/
jumlah sepanjang sumbu terakhir, dapatkan matriks 2 × n100=
elemen mana yang 100 (booleans adalah 0 1)∧/
"dan" -pangkas sepanjang sumbu terakhir, dapatkan 2 boolean untuk stokastik kiri, kanansumber
C ++ 14,
139136133130 byte-3 byte untuk
s=M.size()
, -3 byte untuk kembali dengan parameter referensi, -3 byte sebagai lambda yang tidak disebutkan namanyaMengasumsikan input menjadi seperti
vector<vector<int>>
. Mengembalikan 3,2,1,0 untuk dua kali lipat, kiri, kanan, tidak ada stokastik.Tidak Disatukan:
sumber