function mensajeMatriz(mensaje){
var n = Math.ceil(Math.sqrt(mensaje.length));
function llenarMatriz(mensaje){
var matriz = nuevaMatriz(n);
var c = 0;
for(var i=0; i<n; i++){
for(var j=0; j<n; j++){
if(mensaje[c]) matriz[i][j] = mensaje[c];
else matriz[i][j] = " ";
c++;
}
}
return matriz;
}
var matriz = llenarMatriz(mensaje);
return matriz;
}
function toAscii(caracter){
var numero = caracter.charCodeAt(0)-31;
return numero;
}
function fromAscii(numero){
var caracter = String.fromCharCode(numero+31);
return caracter;
}
function toAsciiMatriz(msjMatriz){
var asciiMatriz = nuevaMatriz(msjMatriz.length);
for(var i=0; i<msjMatriz.length; i++){
for(var j=0; j<msjMatriz[0].length; j++){
asciiMatriz[i][j] = toAscii(msjMatriz[i][j]);
}
}
return asciiMatriz;
}
function fromAsciiMatriz(asciiMatriz){
var msjMatriz = nuevaMatriz(asciiMatriz.length);
for(var i=0; i<asciiMatriz.length; i++){
for(var j=0; j<asciiMatriz[0].length; j++){
msjMatriz[i][j] = fromAscii(asciiMatriz[i][j]);
}
}
return msjMatriz;
}
function nuevaMatriz(n){
var matriz = new Array(n);
for(var a=0; a<n; a++) matriz[a] = new Array(n);
return matriz;
}
//Matriz
function matrizTranspuesta(matriz){
var nuevam = nuevaMatriz(matriz.length);
for(var i=0; i<matriz.length; i++){
for(var j=0; j<matriz.length; j++){
nuevam[i][j]=matriz[j][i];
}
}
return nuevam;
}
//En estas tres funciones se encuentra el error
function matrizAdjunta(matriz){
return matrizTranspuesta(matrizCofactores(matriz));
}
function matrizCofactores(matriz){
var nm = nuevaMatriz(matriz.length);
for(var i=0; i<matriz.length; i++){
for(var j=0; j<matriz.length; j++){
var det = nuevaMatriz(matriz.length);
var detValor;
for(var k=0; k<matriz.length;k++){
if(k!=i){
for(var l=0; l<matriz.length;l++){
if(l!=j){
var index1 = k<i ? k : k-1;
var index2 = l<j ? l : l-1;
det[index1][index2]=matriz[k][l];
}
}
}
}
detValor = determinante(det);
nm[i][j] = detValor * Math.pow(-1, i+j+2);
}
}
return nm;
}
function determinante(matriz){
var det = 0, aux = 0;
var c;
if(matriz.length==2){
det=(matriz[0][0]*matriz[1][1])-(matriz[1][0]*matriz[0][1]);
return det;
}else{
for(var j=0; j<matriz.length; j++){
var menor = nuevaMatriz(matriz.length-1);
for(var h=0; h<(matriz.length-1);h++){
menor[h] = nuevaMatriz(matriz.length-1);
}
for(var k=1; k<matriz.length; k++){
c=0;
for(var l=0; l<matriz.length; l++){
if(l!=j){
menor[k-1][c] = matriz[k][l];
c++;
}
}
}
aux = Math.pow(-1,2+j)*matriz[0][j]*determinante(menor);
det += aux;
}
return det;
}
}
function matrizInversa(matriz){
var det =1/determinante(matriz);
var nmatriz=matrizAdjunta(matriz);
multiplicarMatriz(det,nmatriz);
return matriz;
}
function multiplicarMatriz(n, matriz){
for(var i=0;i<matriz.length;j++){
for (var j=0; j<matriz.length; j++) {
matriz[i][j]*=n;
}
}
}
(function(undefined){
var matrizi = [[],[]];
var matriz = mensajeMatriz(prompt("Ingrese mensaje secreto"));
var matriz2 = toAsciiMatriz(matriz);
var matriz3 = fromAsciiMatriz(matriz2);
var matrizTras = matrizTranspuesta(matriz2);
var matrizAdj = matrizAdjunta(matrizTras);
var string = string2 = string3 = stringTras = stringAdj = " ";
//Mensaje a matriz
for(var i =0; i<matriz.length; i++) string+=matriz[i]+"<br>";
//Matriz cifrada en Ascii
for(var i =0; i<matriz2.length; i++) string2+=matriz2[i]+"<br>";
//Traspuesta de la Matriz cifrada en Ascii
for(var i =0; i<matrizTras.length; i++) stringTras+=matrizTras[i]+"<br>";
//Adjunta de la Matriz cifrada en Ascii
for(var i =0; i<matrizAdj.length; i++) stringAdj+=matrizAdj[i]+"<br>";
//Matriz descifrada
for(var i =0; i<matriz3.length; i++) string3+=matriz3[i]+"<br>";
//Matriz a mensaje
var mensaje = "";
for(var i = 0; i<matriz3.length; i++)
for(var j = 0; j<matriz3[0].length; j++)
mensaje += matriz3[i][j];
alert(determinante(matriz2));
document.getElementById("matriz").innerHTML = "<div><h4>Mensaje matrizado</h4>"+string+"</div><br>";
document.getElementById("matriz").innerHTML += "<div><h4>Matriz cifrada</h4>"+string2+"</div><br>";
document.getElementById("matriz").innerHTML += "<div><h4>Traspuesta de la Matriz cifrada</h4>"+stringTras+"</div><br>";
document.getElementById("matriz").innerHTML += "<div><h4>Adjunta de la Matriz cifrada</h4>"+stringAdj+"</div><br>";
document.getElementById('matriz').innerHTML += "<div><h4>Matriz descifrada</h4>"+string3+"</div><br>";
document.getElementById("matriz").innerHTML += "<br><div>Mensaje desencriptado: '"+mensaje+"'</div><br>"
})();