JSFiddle - React, Tailwind, and code Playground

JavaScript

var s = [100,100,5,100,100,100,100,100,100,100,100,100,100];
var M = [ [83,0,0,-7,0,0,-1], [64,0,0,0,0,0,0], [0,19,0,-15,0,-16,1], [28,0,0,-18,0,0,0], [0,45,0,-86,0,0,0], [0,33,0,0,0,-8,0], [0,0,12,0,0,-16,0], [0,0,52,0,0,-40,0], [0,0,0,0,64,0,0], [0,0,0,23,-17,0,0], [0,0,0,0,0,81,0], [0,0,0,0,5,0,0],  [-10,-94,-118,-40,-14,-44,78] ];

function findScalingFactor ( n, v ) {
	var p = m = 0, f = null, r = [];
	for ( let j in v ) {
		if ( v[j] > 0 ) { p += v[j]; }
		else if ( v[j] < 0 ) { m += v[j]; r.push(j)  }
	}
	if ( Math.abs(m) > p + n ) {
		f = ( p + n ) / Math.abs(m);
		console.log(v)
		console.log(m)
		console.log(p)
		console.log(n)
		console.log(f)
		console.log(r)
		return {'f': f, 'r': r};
	} else {
		return {'f': null};
	}
}

function scaleRows ( M, f ) {
	for ( let i in M ) {
		for ( let j in M[i] ) {
			if ( f.r.indexOf(j) !== -1 ) {
				M[i][j] *= f.f;
			}
		}
	}
	console.log(M)
}

function scale ( s, M ) {
	var scaled = false;
	for ( let i in M ) {
		var f = findScalingFactor ( s[i], M[i] );
		if ( f.f !== null ) {
			scaleRows ( M, f );
			scaled = true;
		}
	}
  console.log(scaled);
	return scaled;
}

function add ( s, M ) {
	for ( let i in M ) {
		for ( let j in M[i] ) {
			s[i] += M[i][j];
		}
	}
	return s;
}

while ( true ) {
	console.log(M);
	if ( !scale( s, M ) ){
		var r = add( s, M );
		console.log(r);
		break;
	}
}