Secciones de la página

simulator. js


Javascript


Árbol de ficheros

Tol

Artículos del sitio

Presentación de Tol

Todos los programas

Simuladores visuales

Sitios que me gustan

Por categorías

Algoritmia

Búsqueda y ordenación

Computación fisiológica

Editorial y edición

Gráficos de datos

Herramientas y utilidades

Hipertexto

Informática forense

Lectura óptica de datos

Metaprogramación

No determinista

Ofimática

Recursión e iteración

Reglas y restricciones

Series y estadística









simulator.js de ChRules.Iterative

Reglas de reescritura de caracteres. Contiene todas las funciones para visualizar paso a paso la resolucion por Tol de uno o de varios casos de problemas. En general se entiende que hay a) una tabla indice de casos resueltos SimCasArr[pasos, nombre del caso], b) donde el caso en curso de simulacion es SimCasAct y su array de pasos que hay que visualizar es SimCasArr[SimCasAct][0] c) que cada caso consta de una serie de pasos, step, de resolucion donde la posicion del paso en curso es SimStpAct y d) que el area de visualizacion de pasos es SimStpDiv e) que se encuentra dentro de un panel de control de la simulacion, SimBox, f) con botones de inicio, SimBotExe, de parada, SimBotSto, stop, y de continuacion, SimBotCon.

Javascript

//////////////////////////////////////////////////////////////////////////////
// FILE    : simulator.js
// AUTHOR  : http://www.asolver.com
// PURPOSE : Reglas de reescritura de caracteres.
// Contiene todas las funciones para visualizar paso a paso la resolucion por
// Tol de uno o de varios casos de problemas.
// En general se entiende que hay
// a) una tabla indice de casos resueltos SimCasArr[pasos, nombre del caso],
// b) donde el caso en curso de simulacion es SimCasAct y su array de pasos
//    que hay que visualizar es SimCasArr[SimCasAct][0]
// c) que cada caso consta de una serie de pasos, step, de resolucion donde
//    la posicion del paso en curso es SimStpAct y
// d) que el area de visualizacion de pasos es SimStpDiv
// e) que se encuentra dentro de un panel de control de la simulacion, SimBox,
// f) con botones de inicio, SimBotExe, de parada, SimBotSto, stop, y de
//    continuacion, SimBotCon.
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
// CONSTANTS, los busca SimGetElements()
//////////////////////////////////////////////////////////////////////////////

var SimStpDiv; // Area de pasos de simulacion

var SimBotExe; // Boton de ejecucion
var SimBotSto; // Boton de parada, stop
var SimBotCon; // Boton de continuar

var SimCasFrm; // Campo selector del caso, dentro del form
var SimStpFrm; // Campo de visualizacion de pasos, step, dentro del form
var SimSpdFrm; // Campo selector de velocidad de simulacion, dentro del form


//////////////////////////////////////////////////////////////////////////////
// CONTROLS
//////////////////////////////////////////////////////////////////////////////

var SimCasAct = 0; // Numero del caso en curso, es una posicion en SimCasArr
var SimStpAct = 0; // Numero del paso en curso del caso en curso
var SimStpLst = 0; // Numero del ultimo paso (solo para visualizacion)

var SimAlt = 1;      // Si true se para
var SimTim = 100;    // Milisegundos de espera


//////////////////////////////////////////////////////////////////////////////
// FUNCTIONS
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
   function SimExp(stpCod) // Paso de solucion codificado a expandir

// PURPOSE: Expande un paso codificado de simulacion, stpCod, donde cada
// caracter o conjunto de caracteres ha de ser expandido por el codigo Html
// adecuado para visualizar adecuadamente la simulacion.
// Es una funcion muy dependiente de cada caso concreto de simulacion.
// Ha de tenerse cuidado con el ; que esta en  , por ejemplo.
//////////////////////////////////////////////////////////////////////////////
{
  var rep_nl = stpCod.replace(/~/g, "<br />"); // Cambia ; x new line antes

  var rep_sp = rep_nl.replace(/·/g, "&nbsp;"); // Cambia punto x blanco fijo

  return("<span class='ca'>" + rep_sp + "</span>");
}


//////////////////////////////////////////////////////////////////////////////
   function SimCasFrmWrite()

// PURPOSE: Escribe un selector de formularios para todos los casos que estan
// disponibles. El texto de las etiquetas puede ser dependiente del problema.
//////////////////////////////////////////////////////////////////////////////
{
  var selIni = "<select onchange ='SimCase()' id='SimCasFrm'>";
  var selEnd = "</select>";
  var selAll = "";

  for(var arrPos=0; arrPos < SimCasArr.length; arrPos++) // Para los casos
  {
    var casArr = SimCasArr[arrPos][0]; // Array de pasos del caso
    var casNam = SimCasArr[arrPos][1]; // Nombre del caso
    var stpNum = casArr.length-1;      // Pasos del caso

    var lblPos = arrPos + 1; // Del 1 en adelante, no del 0 en adelante
    var selLbl = casNam + ": " + stpNum + " pasos";

    var selChk = " ";                        // En principio no seleccionado,
    if(arrPos==0) { selChk = " selected "; } // salvo que sea el primero

    var optTxt = "<option" + selChk + "value=" + arrPos + ">" +
                                                 selLbl + "</option>";
    selAll = selAll + optTxt;
  }
  document.write(selIni + selAll + selEnd);
}


//////////////////////////////////////////////////////////////////////////////
  function SimUpdate()

// PURPOSE: Cambia el contenido del area de simulacion para que se visualice
// el codigo del paso actual del caso actual.
//////////////////////////////////////////////////////////////////////////////
{ 
  var casArr = SimCasArr[SimCasAct][0]; // Array de pasos del caso actual

  SimStpDiv.innerHTML = SimExp(casArr[SimStpAct]); // Expande
}


//////////////////////////////////////////////////////////////////////////////
   function SimGetElements()

// PURPOSE: Busca todos los elementos (areas, botones, etc.) necesarios para
// realizar la simulacion, todos tienen nombres fijos.
//////////////////////////////////////////////////////////////////////////////
{
  SimStpDiv = document.getElementById("SimStpDiv"); // Area de simulacion

  SimBotExe = document.getElementById("SimBotExe"); // Boton de inicio
  SimBotSto = document.getElementById("SimBotSto"); // Boton de parada
  SimBotCon = document.getElementById("SimBotCon"); // Boton de continuar

  SimCasFrm = document.getElementById("SimCasFrm"); // Selector casos
  SimStpFrm = document.getElementById("SimStpFrm"); // Visualizador pasos
  SimSpdFrm = document.getElementById("SimSpdFrm"); // Selector de velocidad
  
  SimUpdate(); // Visualizar el primer paso del primer caso para rellenar
}


//////////////////////////////////////////////////////////////////////////////
function SimStpFrmWrite()

// PURPOSE: Actualiza el campo del frame que indica el paso actual y el total
// de pasos del caso en curso.
//////////////////////////////////////////////////////////////////////////////
{ SimStpFrm.value = SimStpAct + " | " + SimStpLst; }


//////////////////////////////////////////////////////////////////////////////
function SimTimeoutCicle()

// PURPOSE: Ciclo de visualizacion de la solucion mientras no se llegue al
// final de la simulacion o no se pare el ciclo SimAlt = true.
//////////////////////////////////////////////////////////////////////////////
{ 
       if(SimAlt==1) { SimAlt = 1; }                   // Para el ciclo
  else if(SimStpAct >= SimCasArr[SimCasAct][0].length) // Final
  {
    SimAlt = 1;
    SimAct = 0;
  } 
  else // Ejecucion normal
  { 
    SimStpFrmWrite();                       // Visualiza el contador de pasos
    SimUpdate();                            // Actualizar el paso
    SimStpAct++;                            // Incrementa el contador
    setTimeout("SimTimeoutCicle()",SimTim); // Autoprograma el siguiente paso
  }
}


//////////////////////////////////////////////////////////////////////////////
function SimSpeed()

// PURPOSE: Cambia la velocidad segun la indicacion del selector de velocidad.
//////////////////////////////////////////////////////////////////////////////
{ SimTim = SimSpdFrm.value; }


//////////////////////////////////////////////////////////////////////////////
function SimCase()

// PURPOSE: Cambia el caso segun la indicacion del selector de casos.
//////////////////////////////////////////////////////////////////////////////
{
  SimCasAct = SimCasFrm.value; // Selecciona un nuevo caso
  SimStpAct = 0;               // Estado de salida y no cambia a parado
  SimStpLst = SimCasArr[SimCasAct][0].length - 1; // Ultimo paso
  SimUpdate();                 // Visualizar este primer estado
  SimStpFrmWrite();            // Visualiza el contador de pasos
}


//////////////////////////////////////////////////////////////////////////////
function SimExecute()

// PURPOSE: Inicia el ciclo desde el principio si estaba parado.
//  Se activa mediante el boton de ejecutar.
//////////////////////////////////////////////////////////////////////////////
{
  if(SimAlt) // Si estaba parado lo pone en marca con el contador a cero
  {
    SimAlt = 0;                                     // No se para el ciclo
    SimStpAct = 0;                                  // Vuelve al primer paso
    SimStpLst = SimCasArr[SimCasAct][0].length - 1; // Ultimo paso
    SimTimeoutCicle();                              // Comienza el ciclo
  }
}


//////////////////////////////////////////////////////////////////////////////
function SimStop()

// PURPOSE: Para el ciclo de visualizacion.
// Se activa mediante el boton de parar.
//////////////////////////////////////////////////////////////////////////////
{
  SimAlt = 1; // Para el ciclo
}


//////////////////////////////////////////////////////////////////////////////
function SimContinue()

// PURPOSE: Sigue el ciclo de visualizacion por donde fuera si estaba parado.
// Se activa mediante el boton de continuar.
//////////////////////////////////////////////////////////////////////////////
{
  if(SimAlt) // Si estaba parado lo pone en marca con el contador que llevaba
  {
    SimAlt = 0;               // No se para el ciclo
    SimTimeoutCicle();        // Comienza el ciclo
  }
}

Árbol de ficheros

ChRules.Iterative programa de aplicacion iterativa de reglas de areas de caracteres

  • make.tol aplica unas bases de reglas de reescritura a varios escenarios
  • make.bat mandato de ejecucion del programa de aplicacion de reglas
  • tol directorios que contienen fichero de codigo fuente Tol
    • cmm funciones comunes
    • app directorio funciones y datos de areas, reglas y motor de reglas
      • are.tol funciones de areas sobre las que se aplican las reglas
      • rul.tol funciones de reglas que transforman de areas de caracteres
      • eng.tol funciones del motor iterativo de aplicacion de reglas
      • bub.tol para realizar un orden parcial con metodo de burbuja
      • cel.tol automata celular con reglas de reproduccion y muerte
      • lab.tol base de reglas para que un robot salga de un laberinto
      • fll.tol base de reglas para rellenar, fill, superficies cerradas
      • pon.tol base de reglas de un pingpong electronico, pong
    • inc.tol para la inclusion de funciones, areas y bases de reglas
  • simulator directorio del simulador en Javascript del motor iterativo de reglas
    • css directorio para css, Cascading Style Sheets, del simulador
      • simulator.css css para simular areas de aplicacion de las reglas
    • src directorio de codigo fuente Javascript del simulador de reglas
      • simulator.js simula el funcionamiento del motor de aplicacion de reglas
      • simulatorarray.js array con ejemplos de evolucion para cada base de reglas
  • automata_celular_al_azar.html automata celular de reglas al azar de reproduccion y muerte
  • automata_celular_determinista.html automata celular determinista de reglas de reproduccion y muerte
  • burbuja_y_sedimentos.html orden parcial con metodo de burbuja simulando una sedimentacion
  • laberinto_2_cabezones.html laberinto con 2 robots que se autobloquean y no pueden salir
  • laberinto_2_negociadores.html laberinto con 2 robots y reglas para resolver su mutuo bloqueo
  • laberinto_mas_grande.html robot que sale del laberinto aplicando reglas de la mano derecha
  • laberinto_mano_izquierda_html robot que busca la salida aplicando reglas de la mano izquierda
  • laberinto_mini_1_robot.html pequeño laberinto con un robot y reglas de la mano derecha
  • partida_de_pong_al_15.html partida de pong donde el 15% de las veces las reglas son al azar
  • partida_de_pong_al_20.html partida de pong donde el 20% de las veces las reglas son al azar
  • partida_de_pong_azarosa.html partida de pingpong electronico, pong, con reglas aleatorias
  • partida_de_pong_eterna.html ciclo eterno de una partida de pong, con reglas deterministas
  • rellena_caja_al_azar.html reglas para llenar superficies aplicadas a una caja con lineas
  • rellena_k_al_azar.html rellenado de superficies aplicado al interior de una letra K
  • simulator.html simulador del motor iterativo de reglas de areas de caracteres
  • chrules_iterative.pdf funciones del motor de aplicacion de reglas de caracteres

2015 asolver.com | Aviso legal | XHTML | Δ Θ Ξ | Creative Commons | Mapa y funciones del sitio

Tol