Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Serapis

#1771
Está escrito al vuelo, así que hay que 'cocinarlo' un poquito... pero es un punto de partida adecuado si uno está en blanco...

...por ejemplo al comienzo falta un parámetro de 'ocupación' que determinaría cuanto debe rellenarse el tablero al comienzo. Aquí la función New, un poquito más desarrollada:

int Filas, Columnas, MundoMuere

funcion New(int F, int C, int MM, ocupacion)
   int i, j, k, max

   filas = f
   columnas = C
   Si (MM < 0) luego MM=0)
   MundoMuere = MM

   si ocupacion < minocupacion  // por ejemplo 10 (en referencia al 10%)
ocupacion = minocupacion
   osi ocupacion > maxocupacion  // por ejemplo 40 (en referencia al 40%)
       ocupacion = maxocupacion
   fin si
   max = (((Filas * Columnas) / 100) * ocupacion)
   
   dimensionar Mapa(filas, columnas)

   bucle para i desde 1 hasta max
       j = aleatorio entre 0 y Filas-1
       k = aleatorio entre 0 y Columnas-1
       Mapa(j, k).Estado = ESTADO_VIVA
   siguiente
   
   DibujarMapa
fin funcion


...para la enumeración, es preferible que CELULA_VIVA sea 9 y la muerta, sea 0, porque al crear el array, por defecto (según el lenguaje usado, claro), es 0 para todo el array, así basta luego marcar las vivas...

...o por ejemplo la partida acaba no solo cuando queden menos células de las indicadas sino también si se diera el caso (mucho menos probable por supuesto), que el mundo estuviera repleto. (... O Si vidas = (filas * columnas) - maxSeres luego Finpartida) //maxSeres sería al igual que minSeres, un punto de inflexión determinado, por defecto debiera ser filas * columnas.

...o en la función ContarMisVecinos, detrás del bucle (al final) olvidé descontar a sí mismo como vecino:

// ya fue contada en el bucle, ahora se descuenta así misma.
Si (mapa(fila,columna).estado = ESTADO_VIVA ) luego  vecinos -=1

...o alguna discrepancia/inconsistencia menor: e alguna parte declaro NumVecinos, pero luego uso Vecinos...

En fin, cosas de escribir al vuelo... pero fáciles de darse cuenta y corregir al pasarlo a código.

Y por supuesto, el ejemplo no sigue al pie de la letra las reglas del enunciado de quien pregunta, requiere adaptarlo a las reglas que uno desee... Lo cual es trivial cuando uno lo entiende bien.

p.d.:
...por cierto, la función de contar los vecinos, cuenta los 24 vecinos, no los 8...  :silbar: :silbar: :silbar:  :laugh: :laugh: :laugh:
#1772
Puedes hacerlo de modo procedimental o con clases, a tu gusto...

Si lo haces con clases, por ejemplo crearía una clase 'tablero', en el constructor se recibe las filas y columnas (o cantidad) si ambos valores serán iguales.
También un parámetro para indicar cuandos e considera el mundo muerto, es decir si hay 25x25 casillas (625 células, podría consdierarse muerto (por ejemplo), si quedna menos de 50), un valor de cero o menor, podría indicar que vive mientras queden células vivas...
Acto seguido se crea un array bidimensional de  NxM casillas...

int Filas, Columnas, MundoMuere

funcion New(int F, int C, int MM)
   filas = f
   columnas = C
   Si (MM < 0) luego MM=0)
   MundoMuere = MM

   dimensionar Mapa(filas, columnas)
fin funcion

ó:
funcion New(int Casillas)



Una enumeración de 2-3 estados. Celula viva = '*' , célula muerta = ' ', celula 'enferma' = '-' (caso de que quisieras complicarlo y que una célula necesitara x estados (por ejemplo 1, y al siguiente muere) seguidos de transición por debajo del umbral de vida). es decir si no tiene los vecinos esperados y está viva, enferma, pero si está enferma muere.
enumeración EstadoCelula
  ESTADO_VIVA = 0
  ESTADO_ENFERMA = 1  ' de 1 a 8, podría alojar 8 transiciones antes de morir, o pasar directamente del 1 al 9, o del 0 al 9
  ESTADO_MUERTA = 9
FIN ENUMERACION


Un array con los valores a dibujar (char/string)

char  representa(0 a 9)
// con estos valores
   representa(0) = "*"  // viva
   representa(1) = "-"  //enferma
   // representa(2) = "-"
   //...  si se prefieriese dibujar estados de enfermedad diferentes o todos con '1'
   representa(9) = " " //muerta
 // tambén se puede hacer otro array con colores, para dibujar de diferente color vivas de 'enfermas'.

Otra enumeración de los valores de transicion:
(Tu pon los valores que quieras, de hecho es bueno modificarlos, para ver como se comporta).
enumeracion Transicion
   TR_MUERE_INANICION = 1 // con 3 o menos células muere.
   // TR_VIVE = 2,3,4,5,6  / se entiende que viven con el rango dentro de ambos extremos.
   TR_MUERE_SOBREPOBLACION = 7
fin enumeracion


Una estructura retiene el estadO (de esos valores enumerados) y el recuento de vecinos.

Estructura DatosDeCelula
   EstadoCelula Estado
   Transicion NumVecinos
fin estructura

Array de DatosDeCelula Mapa()



Una función se encarga de contar los vecinos, para cada célula:
Funcion ContarVecinos()
   int i, j, k, n

   bucle para j desde 0  a filas-1
       bucle para k desde 0 a Columnas -1
           Mapa(j,k).Vecinos = ContarMisVecinos(j,k)
       siguiente
   siguiente
fin funcion

// contar los vecinos para esta célula...
Transicion = funcion ContarMisVecinos(int fila, int Columna)  
   int x, y, w, h
   int j, k
   Transicion vecinos

   Si (fila <2)    // tiene 1 o 0 vecinos a la izquierda
        x = 0
        w = fila + 2
   Si (fila > filas-3)  // tiene 1 ó 0 vecinos a la derecha
        x= fila - 2
        w = filas -1
   sino
        x= fila - 2
        w = fila + 2
   fin si

   Si (columna <2)    // tiene 1 o 0 vecinos arriba
        y = 0
        h = columna + 2
   Si (columna > Columnas-3)  // tiene 1 ó 0 vecinos abajo
        y = columna - 2
        h = columnas -1
   sino
        y = columna - 2
        h = columna + 2
   fin si

   bucle para j desde y hasta h
       bucle para k desde x hasta w
           Si (mapa(j,k).estado = ESTADO_VIVA ) luego  vecinos +=1
       siguiente
   siguiente

   devolver vecinos
fin funcion


Luego otra función que actualice el estado en base a sus vecinos:

funcion UpdateMapa
   int j, k, vivas

   bucle para j desde 0 a filas -1
       bucle para k desde 0 hasta columnas -1
           si (Mapa(j,k).vecinos <= TR_MUERE_INANICION)
           o si (Mapa(j,k).vecinos <= TR_MUERE_SOBREPOBLACION)  // es una sola línea con la anterior, queda cortada en 2 por ser larga...
               mapa(j,k).estado = ESTADO_MUERTA
           si no  // hay que señalarla viva, porque antes podría estar muerta
               mapa(j,k).estado = ESTADO_VIVA
               vivas +=1
           fin si

           // char que representa el estado, fila, columna, color
           Dibujar(representa(mapa(j,k).estado ) ,j, k , color)
       siguiente
   siguiente

   Si (vivas <= MundoMuere) luego
       finpartida // no quedan células suficientes...
   fin si
fin funcion


Y una función dibujar para dibujar cada casilla (si no es muy complejo lo que deba hacer, puede subsumirse en la función anterior... (en 'dibujar...').

Básicamente eso es lo principal, generar las células al azar al comienzo de la partida, y algún otro detalle resulta ya nimio...

p.d.: Se me olvidada... al contar los vecinos, debe descontarse 1, si la célula en cuestión esta 'viva' (ella no debe contarse como su vecina). Es más fácil el doble bucle sin considerarla y luego descontarla que filtrarlo en el propio bucle (pués sucede 1 de las hasta 9 veces por cada casilla).
#1773
Puedes partir creaando la gramática de dicho lenguaje, ya que solo está explicado en prosa... (pondré en negrita las producciones para dicha gramática).
Al decir 'cadenas en base 3', podemos suponer muchas cosas, pero dado el ejemplo del enunciado, se entiende que puede acotarse el lenguaje al uso de solo 3 símbolos para dicho alfabeto: '0', '1' y '2'. Hubiera sido más practico elegir 'A', 'B', 'C', para que quede clara y patente la diferencia entre símbolos y estados., así que quedará un poco lioso...

Estas son todas las reglas de producción para dicho lenguaje
0 - Luego los terminales son (los símbolos que admite el lenguaje):
   char := "0"|"1"|"2"
1 - Los no terminales:
   ini := "00"|"11"
   medio := "021"
   fin := "11"
2 - Luego tu gramática para dicho lenguaje sería:
   S := ini char* medio+ char* fin

Que puede leerse: Es una cadena válida de esta gramática si empieza por 'inicial', contiene cualesquiera 'caracter' (0, 1 o más), tiene al menos un 'medio' y detrás podría tener más 'caracter' (0 1 ó más) y acaba en 'final'.

Doy por hecho que deberías conocer el metalenguaje BNF (EBNF), si no fuera el caso... te explico los metasímbolos:
'|'  expresa un valor elegible libremente entre varias opciones (una alternativa)
'[  ]' expresa que es opcional, puede o no aparecer.
'*'  expresa repetición 0, 1 o más apariciones, es equivalente a '[ ]'
'+' expresa repetición, al menos 1 vez debe aparecer.
A partir de aquí se podría describir fácilmente una tabla de transición de estados entre tokens,
La tabla de transición resumida al estados de aceptación de cada estado sería:
Nota que aquí se ha tomado como estado cada token del lenguaje (resulta más sencillo).
Aunque no está completo (exige describir el estado de transición para cada token)
|-----------------|
| e |  Lista      |
|-----------------|
| 0 | 1, 2        |   ini
| 1 | 1, 2        |   char
| 2 | 2, 3, (4)   |   medio
| 3 | 3, (4)      |   char
| 4 | -           |   fin
|-----------------|


La tabla de transicion para detectar el token 'ini'

----------------|
est| símbolos  |
e |'0'|'1'|'2'|
---------------|
0 | 1 | 2 | - |
1 |(3)| - | - |
2 | - |(3)| - |
(3)| es el estado de aceptación: ini

Si aparece un '0', pasa el estado 1, desde el estado 1 solo puede evolucionar al estado 3 (apareciendo otro '0').
Si aparece un '1' pasa al estado 2, desde el estado 2 solo puede evolucionar al estado 3 (apareciendo otro '1').
El estado 3 es el estado de aceptación... cualquier otro estado se considera error.
El AFN para 'ini', sería (dado lo mal que se puede dibujar con caracteres):

simb ---> '0'---> '0'---> (3)
estd ---> 0 --->  1  ---> (3) (de un símbolo '0' se pasa al

simb ---> '1'---> '1'---> (3)
estd ---> 0 --->  2  ---> (3)


Del mismo modo se puede proceder para detectar el resto de tokens.

Integrarlo todo en una sola tabla de transición, no es más complejo... Es decir si primero defines la tabla de transición para cada token, y en cada token consideras el estado 0, como el punto inicial, trasladarlo a una sola tabla, es mover los estados de un estado relativo a uno absoluto. Y por ejemplo del estado 3, se puede evolucionar al estado 4, desde el 4 se puede evolucionar al 4 o al 5 (solo si '0', si evoluciona a 5), nótese que siguiendo el token 'medio' debe evolucionar al estado 6, sino evoluciona de nuevo al estado 4 ('char')...
Tras el estado medio, igualmente puede evolucionar hacia tokens 'char' ó a 'fin'...

Aquí la tabla de transición AFD canónica de estados para dicha gramática (nota que falta insertar la parte del token 'ini):

|------------------------|
|est|      símbolos      |
| e | '0'  |  '1' | '2'  |
|------------------------|
|insertar aquí la tabla del token 'ini'
| 3 |  5   |  4   |  4   |  
| 4 |  5   |  4   |  4   |
| 5 |  4   |  4   |  6   |
| 6 |  4   |  7   |  4   |
| 7 |  8   |  9   |  8   |
| 8 |  8   |  9   |  8   |
| 9 |  8   | (10) |  8   |
|------------------------|

El estado 10, es el estado de aceptación de la cadena de entrada para la gramática de dicho lenguaje.
Nota que el estado 4 y 8 son los estados de 'char'.... solo desde el estado '0' para 'char' se puede avanzar al estado del token 'medio', o regresar al estado 4 del token 'char', de modo similar para ir del estado 8 al 9 del token 'fin'. es decir un intento de evolucionar desde 4, a los estados 5, 6 y 7, puede devenir de nuevo al estado 4...

El automata finito determinista, es un caso especial (optimizado) del AFN, cambia respecto del AFN, en que no contempla el conjunto vacío y en que de cada nodo solo puede salir un nodo...

...y hasta aquí te puedo decir, porque si no, ya te hago la tarea completa... Creo que tienes suficiente desarrollo para terminar de completarlo. El asunto es si entiendes del tema o no... porque no has puesto una mísera línea de lo que tengas hecho hasta ahora.
Si tienes alguna duda, plantea la pregunta específica... si no asumiré que no tiene ni idea de por donde tomarlo y solo quieres que te hagan la tarea...

p.d.: Sería interesante aclarar algunos puntos, pero si no hay feedback, no vale la pena perder el tiempo.
#1774
Así es el "Made in RPC"... chapuza tras chapuza y eso que Huawei es de las empresas chinas más adelantadas.
#1775
El cierre fronterizo de Internet, es una utopía...

Aunque los proveedores bloqueen basado en listas, siempre podrá haber conexión satélite y lo mismo conexión a través de sistemas wifi, sobre las fronteras con los países vecinos, pués hay teconologías cuyo alcance (inalámbrico) supera varios kilómetros.

Creo que un país deberá considerar suficiente con tener un control más o menos evidente, pero que jamás será el soñado 100%.
#1776
Facebook, pinta cada vez más como una red de politiqueo que como una red social...

Es harto difícil administrar esas cosas, porque es muy difícil definir donde está limite, en las cosas donde hay muchos pareceres diversos. Además se le sumarán las críticas del tipo: "y por a mi me prohibís esto... y a ése otro puede publicar lo que le da la gana?"
#1777
El problema no es tanto 'publicar en redes sociales' como lo es la configuración de con quién se comparte dicho contenido.

Mostrar una foto del billete avión, no es más que mostrtarlo a unos amigos que vienen a casa... el problema es que en la red social, por pereza (o complejidad proporcionada por la propia red), creen estar mostrando a sus amigos íntimos el billete de avión igual que si estuvieran en una fiesta de cumpleaños, y en realidad es mas como exhibirlo en una discoteca, donde están tus amigos íntimos y 800 más...

Para mí, el problema real, está en la inadecuada gestión de la privacidad de las redes sociales. Debería existir perfiles predefinidos, donde quede todo excesimanete claro, de modo que uno pudiera con un solo click seleccionar el perfil de privacidad que mejor se ajuste a la cuenta que tienes en esa red social y por defecto al crear la cuenta debería estar activo el perfil más restrictivo.

...pero no... las redes scoailes consiguena adueñarse d ela privacidad por algunas propiedades, fabricadas al efecto:
1 - Laberíntico: Primero el usuario dbeerá ser capaz de acceder a punto donde connfigurar la privacidad. Tendrá que atravesar 20 ventanitas, y en cada una de ellas, leer bastante buscando el punto desde el cual seguir, a la siguiente, vamos que parece más que estás jugando a Mario Bros, tratando de ir de un nivel a otro.

2 - Dispersión: Aunque logres encontrar finalmente la configuración de seguridad, tanquilo, que siempre habrá una nota que señale que tales otras cuestiones se modifican en tal otra parte. (Mario Bros parte II).

3 - Ininteligible: Da igual que todo el mundo entienda perfectamente el término compartir, se le tratará de dar la vuelta y vincular a otros actos, para que 'compartir' semánticamente sea cualquier otra cosa que a la red social le vaya bien para que el usuario con urgencia, pulse en 'compartir bla bla bla', solo porque suena como la intención semántica original separado de todos los usos inapropiadamente vinculados a su real significado. En vez de "Acepto compartir", debería poner "Acepto la violación de mi intimidad", porque es la consecuencia final de ese 'acepto' camuflado.

4 - Laborioso y tedioso: Si tienes prisa, abandonarás antes de llegar. Si eres de los que lo quieren ya, ídem. Si quieres resolverlo en 3 clicks, ídem... así la privacidad es proporcional al tiempo que tiempo que inviertes pierdes, configurando y leyendo.

5 - Inabarcable: Tranquilo, aunque hayas logrado configurar todo, todavía tendrás 25 enlaces a la politica de privacidad donde se ¿aclaran? ¿todos? los términos. Para ello cada enlace lleva a un tocho de 25 páginas pero que aparece como una sola página, con letra pequeña y 99 enlaces adicionales en cada página, por supuesto tiene estructura arbórea de modo que sin una visión global de dicho árbol, una vez te adentres por una rama, será casi imposible volver a un punto previo o derivar por otra rama si consigues regresar satisfactoriamente a un punto anterior.
Con esto se consigue que incluso quien haya perdido su tiempo, se pierda ahora en la terminología de abogados. Para salir bien parado, pués además necesitas ser abogado, si no, no puedes estar seguro que todo lo que has leído tiene el sentido que crees haber entendido (aunque haya 3 ó 4 términos de jerga que te sean desconocidos).

6 - Connivencia: Todo esto tiene cabida, porque la ley es laxa, se lo permiten. En los gobiernos, una buena parte de ellos, son simples interesados en hacer leyes que favorezcan sus negocios a costa del común de los ciudadanos. Nunca entra en el gobierno un partido que modifique o supervise estos aspectos, porque en todos los partidos los hay...


Si yo fuera el legislador, de obligado cumplimiento la privacidad estaría contenido en una docena de perfiles predefinidos, aplicado siempre el más estricto por defecto al crearse y que al clicar en personalizar dicho perfil muestre todo el contenido en una única ventana. Las parrafadas legales, serían inválidas, o están redactados de modo que lo entienda cualquier persona 'normal' o un juez estaría obligado a dar la razón a la parte acusadora, por negligencia de la empresa al interponer dificultades para entender y con ello evitar que el usuario pueda aplicar libre y conscientemente la politica tal como aparece redactado el texto, conforme a sus deseos y no a intereses ocultados en la parrafada legal.
Respecto de la letra pequeña, obligaría a los jueces, que en un texto la importancia del mismo viene proporcionada por su tamaño, cuando más pequeña sea la letra, menor importancia tiene, luego las excepciones de una cláusula detalladas en letra miniatura, respecto de una generalidad, quedan sin efecto, prevelece la generalidad sobre las excepciones, las excepciones solo serían válidas como tales si tiene letra de tamaño igual o mayor que la generalidad.
Y por último, limitaría la cantidad de páginas en las que debe declararse todo el legajo, si sobrepasan 25 páginas, el excedente sería considerado como propaganda, así la redacción obligaría a que fuera clara y concisa, no 3 párrafos para enrevesar aquello que con la palabra apropiada basta y sobra.
#1778
Citar...lo que realmente mato a los indigenas no fue la espada ni la cruz, sino la inmundicia que trajeron los Españoles ya que nunca se bañaban y traian pulgas, piojos, garrapatas, germenes y enfermedades desde España que le contagiaron a los indigenas que a diferencia de los españoles eran extremadamente limpios y se bañaban 3 veces al dia y vivian completamente aislados e indefensos ante la suciedad y los virus (esto esta demostrado por la ciencia...
...mmm, eso son más tus palabras que lo que cuenta la Historia.

La historia señala que muchos murieron por la gripe común (gripe como pudo ser alguna otra enfermedad vírica, no hay clara constancia porque la Ciencia de entonces podría catalogar como tal o cual enfermedad solo por el parecido sintomático), que como sabrás es por contagio aéreo. A su vez algunos europeos que iban y venían (caso típico de los marineros) se trajeron de América la sífilis, que como supongo que también sabrás es por contagio sexual. Ni la gripe existía en América, ni la sífilis en Europa.

Pero, el asunto no versa sobre de qué murieron los nativos americanos (que hoy por mucho que la ciencia quiera pronunciarse, es jugar a adivinar), el asunto versa sobre el supuesto daño que fue inflingido por quien A a quien B, y no quien C y que Quien D reclama el perdón es o no A, B o C... No son C (españoles nunca fueron allí, sus descendientes nada tienen que ver), no son A (nativos americanos puros, quedan creo muy pocos y todavía hoy, se los sigue persiguiendo por B). Finalmente son B (descendientes de españoles y nativos), los que se quejan (D) de lo que hicieron sus propios ancestros a sus otros propios ancestros.

Si los españoles hubieran ido a américa, hubieran hecho todas esas tropelías y luego se hubieran vuelto a casa, al menos la queja sería acertada (inútil, pero acertada al menos), pero resulta ridícula, porque se quedaron allí, vivieron allí, procrearon allí y murieron allí... los culpables de los hechos de tales quejas son los ancestros de quienes se quejan. Los nativos, tampoco tenían vidas idílicas, era cotidiano las guerrillas contra entre tribus y las había que eran una auténtica plaga exterminadora.

La evangelización trajo paz, en algunos casos a costa de dolor. Se destruyeron todos los ídolos de muerte y también los que no... pero ahí están los actuales pobladores de América, tienen su fé más o menos ferviente, desde hace esos 500 años, creo que nadie les fustiga, libres son si quieren abandonar la fé o seguir abrazándola.

El tipo éste de Méjico, ha landado una bomba incendiaria, porque promesas falsas para su pueblo puede dar lo menos 6, que sí son problemas auténticos del páis, pero es mejor prometer cosas que si no se cumplen nadie pueda culparle de nada, y que a la vez inflame el ego de hechar la culpa a otros de sus problemas actuales.

Que yo sepa, Méjico ha venido liderando el ranking mundial de país con más muertes al año (por habitante), superando a veces incluso a países con conflictos armados (que ya tiene tela que esto sea así), y sólo recientemente ha sido superado por Venezuela (gracias a Chávez y Maduro)... Vamos que hay mucha ***** que barrer en casa, como para hablar de lo guarro que es tu vecino...
#1779
Hace 500 años, había dos clases de españoles:
Los que nunca fuerona América a nada.
Los que fueron a América... de ellos algunos (quien sabe cuantos), harían barabaridades... esos se quedaron allí y tuvieron hijos allí, y los habitantes de América de hoy día son sus descendientes.

Tiene enjundia el asunto, que los descendientes de los que hicieron aquellas barbaridades exijan  a los descendientes de los que nunca pisaron América que pidan perdón... y ya resulta hilarante que se reclame sobre hechos acaecidos hace 500 años...

Si nos ponemos tiquis miquis, España entonces tendría que exigir a Francia lo mismo, Napoleón invadió la península hace la mitad de tiempo del asunto del descubrimiento de América...
Y si nos ponemos más tiqueis miquis aún, los propios nativos americanos (los pocos que queden con sangre sin mezcla, si es quedare alguno), deberíanpedir también perdón, por lo que hicieron sus ancestros. Los cronistas españoles, narraron las matanzas que inhumanas que hacían muchas de las tribus de la época. De algún modo, la llegada de los españoles, terminó con toda aquella barbarie incluso aunque fuera con otra barbarie. Desde entonces ya no ha habido más sacrificios humanos...

En cuanto al político de turno, es tan simple como propaganda electoral, lo mismo que Chávez y Maduro han tirado siempre de lo mismo, recurrir al falso patriotismo, con palabras como: imperialismo, nuestra sangre, y blablabla... es charlatanería de quienes no saben como ganarse al electorado con ausntos reales en vez de recurrir a utopías que saben que jamás van a suceder, pero claro... de cara al patriotismo, satisfacen el ego de muchos, en general de analfabetos, que son los que pueden ser convencidos por utopías.

Debería preocuparse ese señor, por solucionar problemas de la vida real, como son: el narcotráfico, la pobreza, la delincuencia.... son problemas graves y esos si que están en sus manos poder hacer algo, en vez de lanzar piedras al tejado de un vecino que queda algo lejano, sobre todo en el tiempo....
#1780
Lo que menos me gusta del Captcha3 de google, es que es 100% dependiente de google. No se trata de que ellos controlen el código fuente (a find e cuentas es su diseño), si no más bien de que son ellos quienes tienen el control de los datos de los usuarios... y esto ni es suyo ni de nadie.

El problema de la dependencia es que disponer de un único sistema/modelo el reto es vencer a un solo y único modelo, lo que en la práctica implica concentrar los esfuerzos en ello. si hubiera 200 sistemans diferentes, incluso aunque uno fuera el más usado de todos ellos reduciría la posibilidad de éxito, apenas se pudieran usar de forma transparente, uno que el usuario elija como primario y otro al azar detrás, básicamente reduciría (en teoría) casi a 0 las probabilidades de éxito.