<html> <head> <script type="text/javascript" src="http://code.jquery.com/jquery-3.2.1.min.js"></script> <style> .casilla{ width: 13px; height: 13px; font-size: 10px; border:1px solid green; } </style> </head> <body> Alogritmo A*<br> <label for="escenarios">Escenarios:</label> <select id="escenarios" onchange="TABLERO.cambiarEscenario(this)"> <option value="elegir">Elegir</option> <option value="escenario_1">Escenario 1</option> <option value="escenario_2">Escenario 2</option> <option value="escenario_3">Escenario 3</option> </select> <!-- <br> --> <!-- <input type="button" value="Eliminar Jugadas" id="eliminar_jugadas"> --> <br> <span>Posicion Inicial <span id="pos_inicial">(3,1)</span></span> <span>Posicion Final <span id="pos_final">(3,5)</span></span> <table style="width:150px;" id="tablero"> <tr> <td class="casilla" id="casilla_0_0">1</td> <td class="casilla" id="casilla_1_0">2</td> <td class="casilla" id="casilla_2_0">3</td> <td class="casilla" id="casilla_3_0">4</td> <td class="casilla" id="casilla_4_0">5</td> <td class="casilla" id="casilla_5_0">6</td> <td class="casilla" id="casilla_6_0">7</td> <td class="casilla" id="casilla_7_0">8</td> </tr> </table> <br> <input type="button" value="buscar solucion A Star" id="btn_2"> <br> <div id="mensaje"></div> <script> var NADA = 0; //los movimientos posibles var filas = [ 0, 0, 1, -1 ,1,1,-1,-1]; var columnas = [ 1, -1, 0, 0,1,-1,1,-1 ]; var puntoInicio = {i:3,j:1} var puntoFinal = {i:3,j:5} //8x8 var tablero =[ [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0], [0,0,0,1,0,0,0,0], [0,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0] ]; var ESCENARIOS = { //8 es inicio, 9 es el final escenario_1 : { ini: {i:3,j:1}, fin: {i:3,j:5}, tablero: [ [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0], [0,0,0,1,0,0,0,0], [0,0,0,1,0,0,0,0], [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0] ] }, escenario_2 : { ini: {i:1,j:2}, fin: {i:3,j:5}, tablero: [ [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0], [0,0,1,1,1,1,1,0], [0,0,0,0,0,0,1,0], [0,0,1,1,1,1,1,0], [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0] ] }, escenario_3 : { ini: {i:1,j:0}, fin: {i:2,j:4}, tablero: [ [0,0,0,0,0,0,0,0], [0,0,1,1,1,1,0,0], [0,0,1,0,0,1,1,0], [0,0,1,0,1,1,0,0], [0,0,1,0,1,1,0,0], [0,0,1,1,0,1,0,0], [0,0,0,0,1,0,1,0], [0,0,0,0,0,0,0,0] ] }, } var TABLERO = { cambiarEscenario: function(obj){ // console.log("escenario_1") if(obj.value == "escenario_1"){ tablero = ESCENARIOS.escenario_1.tablero; puntoInicio = ESCENARIOS.escenario_1.ini; puntoFinal = ESCENARIOS.escenario_1.fin; Sistema.dibujarTableroVisible(tablero) console.log("escenario_1") } if(obj.value == "escenario_2"){ tablero = ESCENARIOS.escenario_2.tablero; puntoInicio = ESCENARIOS.escenario_2.ini; puntoFinal = ESCENARIOS.escenario_2.fin; Sistema.dibujarTableroVisible(tablero) console.log("escenario_2") } if(obj.value == "escenario_3"){ tablero = ESCENARIOS.escenario_3.tablero; puntoInicio = ESCENARIOS.escenario_3.ini; puntoFinal = ESCENARIOS.escenario_3.fin; Sistema.dibujarTableroVisible(tablero) console.log("escenario_3") } $("#pos_inicial").html("(" + puntoInicio.i + "," + puntoInicio.j + ")") $("#pos_final").html("(" + puntoFinal.i + "," + puntoFinal.j + ")") } } function NodoSolucion(fila, columna, papi = null, fin = null) { this.f; this.c; this.F = 0; this.G = 0; this.H = 0; this.papa = null; //es recursivo this.camino = null; //PARA EVITAR APILAR Y DESAPILAR this.f = fila; this.c = columna; if( papi != null ) this.papa = papi; if( fin != null ){ this.H = (dif(this.f,fin.f) + dif(this.c,fin.c)) * 10; //distancia q queda } if( this.papa != null ){ this.G = dist(this.f, this.c, this.papa.f, this.papa.c) * 10; //costo x pasar x aca } if (this.G > 10) { this.G = 14; } //es un movimiento diaogonal q da 20 pero es 14 this.F = this.G + this.H; this.GetF_TotalHastaAca= function() { var acum = this.F; var ptr = this.papa; while (ptr != null) { acum += ptr.F; ptr = ptr.papa; } return acum; } this.GetG_TotalHastaAca= function() { var ptr; var acum = this.G; ptr = this.papa; while (ptr != null) { acum += ptr.G; ptr = ptr.papa; } return acum; } var este = this this.getArrSolucion = function(){ var ptr = este; var arrSolucion = [] while (ptr != null) { arrSolucion.push({i:ptr.f, j:ptr.c}) ptr = ptr.papa } return arrSolucion; } /*Metodos Privados*/ function cuadrado(x) { return x * x; } function dif(a, b) { if (a >= b)return a - b; return b - a; } function dist(xi, yi, xf, yf) { var a, b; a = cuadrado(dif(xf, xi)); b = cuadrado(dif(yf, yi)); return a + b; } } // var testNodos = [] // var nodo = new NodoSolucion(3,1) // testNodos.push(nodo) // testNodos.push(new NodoSolucion(3,2)) // testNodos.push(new NodoSolucion(3,3)) // console.log(testNodos) // testNodos.sort(CompararPorF); // console.log(testNodos) function buscar_solucion_astar(){ var res = AStar(tablero, puntoInicio.i, puntoInicio.j) if (res == 0){ console.log("AStar: No puedo!!! "); }else{ // console.log("solucion", res) res = res.reverse(); for(var pos=1; pos<res.length-1; pos++){ var element = res[pos] $("#casilla_" + element.i +'_'+ element.j ).html("" + pos) }; } } function AStar(T, yi, xi) { var f, c, yAct, xAct, pos; var yf = puntoFinal.i; var xf = puntoFinal.j; var caminosPorExplorar = [] var camino = [] var ini = new NodoSolucion(yi, xi); var fin = new NodoSolucion(yf, xf); caminosPorExplorar.push(ini); //lo agrego a la cola var ptr; while (caminosPorExplorar.length > 0 ) { ptr = caminosPorExplorar.shift(); yAct = ptr.f; xAct = ptr.c; //llegue entonces marcar el camino volviendo para atras if (yAct == yf && xAct == xf) { camino.push(ptr); var arrSol = ptr.getArrSolucion(); return arrSol; } // debugger; // #region AgregoAdyacentes for (var jug = 0; jug < 8; jug++) { f = yAct + filas[jug]; c = xAct + columnas[jug]; // estoy adentro del tablero ? y no esta jugadoo no es pared? if ((0 <= f) && (f < 8) && (0 <= c) && (c < 8) && (T[f] [c] == NADA)) { var nd = new NodoSolucion(f, c, ptr, fin); //(casilla actual o nueva ,ultima casilla o anterior o papa , casilla fin o destino) //papa usado para calculo de G y destino para calculo de H fil = f; colum = c; if ((pos = caminosPorExplorar.findIndex((element => (element.f == fil && element.c == colum) )) ) >= 0) // con array function -1 si no esta {//si esta //comparo sus G totales if (nd.GetG_TotalHastaAca() < caminosPorExplorar[pos].GetG_TotalHastaAca()) { caminosPorExplorar.splice(pos, 1); caminosPorExplorar.push(nd); }//else nd.Dispose(); } else {//si no esta en caminos x ezplorar ni tampoco en camino entonces lo agrego if (!camino.find((element => (element.f == fil && element.c == colum) )) ) { caminosPorExplorar.push(nd); }//else nd.Dispose(); } }else{ // console.error("jugada no valida", f,c) } } // #endregion camino.push(ptr); //los hijos de este padre ya estan ligados caminosPorExplorar.sort(CompararPorF); } return 0; } // ----------------------------------------------------------------------------------------------------------------- //predicado para el sort function CompararPorF( n1, n2) { if (n1.F < n2.F) return -1; if (n1.F == n2.F) return 0; return 1; } // ----------------------------------------------------------------------------------------------------------------- function resetTablero(){ for (var i = 0; i < 8; i++) { for (var j = 0; j < 8; j++) { tablero[i][j] = 0; } } } var Sistema ={ crearTableroVisible : function(){ var casilla = 1 var str = "" for (var i = 0; i < 8; i++) { str += "<tr>" for (var j = 0; j < 8; j++) { str += '<td class="casilla" id="casilla_'+ i +'_'+ j +'">' + casilla++ + '</td>' } str += "</tr>" } $("#tablero").html(str) }, resetTableroVisible : function(){ // var casilla = 1 var str = "" for (var i = 0; i < 8; i++) { str += "<tr>" for (var j = 0; j < 8; j++) { str += '<td class="casilla" id="casilla_'+ i +'_'+ j +'">' + 0 + '</td>' } str += "</tr>" } $("#tablero").html(str) }, dibujarTableroVisible : function(tablero){ // var casilla = 1 var str = "" for (var i = 0; i < 8; i++) { str += "<tr>" for (var j = 0; j < 8; j++) { if(tablero[i][j] == 0){ str += '<td class="casilla" id="casilla_'+ i +'_'+ j +'">' + ' ' + '</td>' } if(tablero[i][j] == 1){ str += '<td class="casilla" id="casilla_'+ i +'_'+ j +'">' + '█' + '</td>' } } str += "</tr>" } // puntoInicio // // $("#casilla_" + puntoInicio.i +'_'+ puntoInicio.j ).css('color', 'red') // (function(){ // $("#casilla_1_5").css("color","red") // })(); setTimeout(function(){ $("#casilla_" + puntoInicio.i +'_'+ puntoInicio.j ).html("i") $("#casilla_" + puntoInicio.i +'_'+ puntoInicio.j ).css("color","red") $("#casilla_" + puntoFinal.i +'_'+ puntoFinal.j ).html("f") $("#casilla_" + puntoFinal.i +'_'+ puntoFinal.j ).css("color","blue") // $("#casilla_1_5").css("color","red") }, 50); // console.log(puntoInicio) $("#tablero").html(str) } } $( document ).ready(function() { Sistema.crearTableroVisible() $(".casilla").click(function(){ console.log(this.id) }) $("#reset_tablero").click(function(){ Sistema.resetTableroVisible() $("#mensaje").text("") }) $("#btn_1").click(function(){ Sistema.resetTableroVisible() resetTablero() //el interno pasos_limite_caballo = parseInt( $("#pasos_limite_caballo").val() ) buscar_solucion() }) $("#btn_2").click(function(){ // Sistema.resetTableroVisible() // resetTablero() //el interno // pasos_limite_caballo = parseInt( $("#pasos_limite_caballo").val() ) console.log("iniciando..") buscar_solucion_astar() }) // Sistema.dibujarTableroVisible(tablero) }); </script> </body> </html>
miércoles, 15 de abril de 2020
algoritmo A * en javascript (A star)
sábado, 4 de abril de 2020
algoritmo A* (A Star)
AStar vs Backtracking - TODO
codigo en c#
(en dias de cuarentena encontre esta joyita del 2005 🙏 )
http://www.mediafire.com/file/r6vf452ft52sjpk/AStar_vs_Backtracking_-_TODO.zip/file
codigo en c#
(en dias de cuarentena encontre esta joyita del 2005 🙏 )
http://www.mediafire.com/file/r6vf452ft52sjpk/AStar_vs_Backtracking_-_TODO.zip/file
miércoles, 17 de julio de 2019
backtracking busca solucion caballo en javascript
//8x8 var tablero = [ [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0] ]; var pasos_limite_caballo = 10; var jugadasPosibles = [[1,2],[1,-2],[2,1],[2,-1],[-1,2],[-1,-2],[-2,-1],[-2,1]] //total 8 // jugadasPosibles.push() function moverCaballoA(i,j, saltosCaballo){ if(saltosCaballo > pasos_limite_caballo) return true; //fin //para todas las jugadas posibles for (var k = 0; k < jugadasPosibles.length; k++) { var jug = jugadasPosibles[k]; if(esJugadaValida(i,j,jug) && tablero[i+jug[0]][j+jug[1]] == 0){ console.log('jugada valida', i,j, jug, saltosCaballo) saltosCaballo++ tablero[i][j] = saltosCaballo; res = moverCaballoA(i + jug[0], j + jug[1], saltosCaballo) if(res){ return true; }else{ //camino no valido console.log('camino no valido', i,j, jug, saltosCaballo) return false } }else{ console.log('jugada no valida', i,j, jug, saltosCaballo) // return; } } return false; } function buscar_solucion(){ for (var i = 0; i < 8; i++) { for (var j = 0; j < 8; j++) { resetTablero() res = moverCaballoA(i, j, 0) if(res){ console.log("se encontro 1 solucion") Sistema.dibujarTableroVisible(tablero) $("#mensaje").text("se encontro 1 solucion") return true; }else{ console.log("NO se encontro solucion empezando en:", i,j) $("#mensaje").text("NO se encontro solucion ") // console.log(tablero.slice(0)) } } } }
viernes, 10 de agosto de 2018
MOBBING. El crimen perfecto
Porque decimos que el mobbing es un crimen perfecto tal como IÑAKI PINUEL lo define, sencillamente porque el mismo no deja huellas, hace creer a los demás que la victima es la falla de la organización, que no sirve, que es perjudicial para la empresa, que es inoperante. [1]
Esto lleva a la victima a una situación insostenible incapaz de poder defenderse no sólo frente al propio hostigador sino frente a los demás integrantes de la organización, ya que su desestabilización emocional provocada por el mobbing, la lleva a cometer errores tras errores en la que la victima se autoculpa de los mismos.
Acoso Laboral
Para la profesora Andrea Mac Donald, el acoso laboral puede definirse como "aquel proceso psicológico sistemático, integrado por la ejecución de una serie de estrategias empleadas por una o varias personas integrantes de una organización, dirigidas hacia otra u otras que son las víctimas del mobbing y cuyo objetivo esencial es la exclusión definitiva del mercado laboral".
https://www.argentina.gob.ar/denunciar-violencia-laboral
¿Cómo denunciar?
Según el Ministerio de Trabajo, “las posibles situaciones de acoso laboral sobre los trabajadores pueden ser puestas en conocimiento de dos instancias: ante la Inspección de Trabajo, que en su caso exigirá las correspondientes responsabilidades administrativas al empresario por conductas contrarias a la dignidad de sus trabajadores cometidas en su ámbito de organización y dirección. La segunda posibilidad es ante la Jurisdicción de lo Social, que reconocerá, en tal caso, el derecho del trabajador a las indemnizaciones correspondientes.”
Además estas son los cuatro elementos esenciales: hostigamiento, persecución o violencia psicológica contra una persona o conjunto de personas; carácter intenso de la violencia psicológica, prolongación en el tiempo; y que tenga como finalidad dañar psíquica o moralmente al trabajador, para marginarlo de su entorno laboral.
http://www.iprofesional.com/legales/130154-Denuncio-acoso-laboral-ante-el-Ministerio-de-Trabajo-lo-echaron-y-ahora-deberan-indemnizarlo-con-112000
http://www.diariojudicial.com/nota/11293
https://www.argentina.gob.ar/denunciar-violencia-laboral
¿Cómo denunciar?
Según el Ministerio de Trabajo, “las posibles situaciones de acoso laboral sobre los trabajadores pueden ser puestas en conocimiento de dos instancias: ante la Inspección de Trabajo, que en su caso exigirá las correspondientes responsabilidades administrativas al empresario por conductas contrarias a la dignidad de sus trabajadores cometidas en su ámbito de organización y dirección. La segunda posibilidad es ante la Jurisdicción de lo Social, que reconocerá, en tal caso, el derecho del trabajador a las indemnizaciones correspondientes.”
Además estas son los cuatro elementos esenciales: hostigamiento, persecución o violencia psicológica contra una persona o conjunto de personas; carácter intenso de la violencia psicológica, prolongación en el tiempo; y que tenga como finalidad dañar psíquica o moralmente al trabajador, para marginarlo de su entorno laboral.
http://www.iprofesional.com/legales/130154-Denuncio-acoso-laboral-ante-el-Ministerio-de-Trabajo-lo-echaron-y-ahora-deberan-indemnizarlo-con-112000
http://www.diariojudicial.com/nota/11293
viernes, 1 de junio de 2018
viernes, 17 de noviembre de 2017
PHPMailer y PHPExcel enviar sin escribir en disco
require 'PHPMailer-master/PHPMailerAutoload.php';
include("function_envia_mail_rck.php");
//https://github.com/PHPMailer/PHPMailer/wiki/Tutorial
/* ----------------------- */
require_once 'PHPExcel-1.8/Classes/PHPExcel.php';
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
$hoja_activa = 0;
$border_style= array('borders' => array('allborders' => array('style' => PHPExcel_Style_Border::BORDER_THIN) ));
$objPHPExcel->setActiveSheetIndex($hoja_activa)
->setCellValue('B1', 'CAR�TULA AUDITOR�A');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); //'Excel5');
ob_start();
$objWriter->save('php://output');
$arch = ob_get_contents();
// ob_end_clean();
mandarMail($para="mail@mail.gov.ar", $asunto="hola test 3", $mensaje="hola test 3", $adjunto=$arch);
aca es donde lo adjunta:
Suscribirse a:
Entradas (Atom)