Autor
|
Tema: Como implementar una función que haga esto? (Leído 11,078 veces)
|
@XSStringManolo
Hacker/Programador
Colaborador
Desconectado
Mensajes: 2.399
Turn off the red ligth
|
Quiero reorganizar un texto en base a la posición alfabética de cada caracter de otro texto programáticamente.
Tengo un array que contiene caracteres random: array1 = ["H", "o", "l", "a", " "];
Y otro array que contiene el mismo número de caracteres: array2 = ["a", "d", "m", "i", "n"];
En base al array2 quiero ordenar el array1 de la siguiente forma:
array2 = ["1", "4", "13", "9", "14"]
a = primeraPosicion d = segundaPosicion m = cuartaPosicion i = terceraPosicion m = quintaPosicion
ResultadoQueQuiero = ["H", "o", "a", "l", " "];
No consigo implementarlo.
|
|
|
En línea
|
Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖
|
|
|
Tachikomaia
Desconectado
Mensajes: 1.412
Hackentifiko!
|
Me entreveré mucho, sorry, creo que es así: Una vez obtenido esto array2 = ["1", "4", "13", "9", "14"] hacemos: Si array2[0] > array2[1] intercambiar array1[0] y array1[1] findelsi Si array2[1] > array2[2] intercambiar array1[1] y array1[2] findelsi Si array2[2] > array2[3] intercambiar array1[2] y array1[3] findelsi Si array2[3] > array2[4] intercambiar array1[3] y array1[4] findelsi Repites eso 4 o 5 veces, aunque cada vez se requieren menos ifs. Hacerlo prolijo y usando sólo 1 repetición o 2, te lo dejo a ti xD
|
|
« Última modificación: 26 Noviembre 2019, 03:56 am por Tachikomaia »
|
En línea
|
|
|
|
engel lex
|
primero reduce los numeros a su minima expresion organizativa... es decir de ["1", "4", "13", "9", "14"] a [0,1,3,2,4] la forma mas simple de hacer eso es organizar el array de manor a mayor y luego ver en que posicion estan ubicados en el original... luego simplemente ubicar en relacion al segundo array (la letra en - va en
- , la letra en [1] a [1], la letra en [2] va a [3]... etc)
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
@XSStringManolo
Hacker/Programador
Colaborador
Desconectado
Mensajes: 2.399
Turn off the red ligth
|
Me entreveré mucho, sorry, creo que es así: Una vez obtenido esto array2 = ["1", "4", "13", "9", "14"] hacemos: Si array2[0] > array2[1] intercambiar array1[0] y array1[1] findelsi Si array2[1] > array2[2] intercambiar array1[1] y array1[2] findelsi Si array2[2] > array2[3] intercambiar array1[2] y array1[3] findelsi Si array2[3] > array2[4] intercambiar array1[3] y array1[4] findelsi Repites eso 4 o 5 veces, aunque cada vez se requieren menos ifs. Hacerlo prolijo y usando sólo 1 repetición o 2, te lo dejo a ti xD Muchas gracias, lo implementé de esta forma que me pareció sencilla. Lo implementé en js de forma un poco cutre jaja. Ya lo mejoraré: function SMOA(TextCif, Contrasenha) { var temp = ""; var temp2 = 0; var ct = Contrasenha.length; for(var j = 0; j < TextCif.length; ++j) { for(var i = 0; i < TextCif.length-1; ++i) { temp2 = i; ++temp2; if ( temp2 < ct || temp2 == ct) { if (Contrasenha[i] > Contrasenha[temp2]) { temp += TextCif[temp2]; TextCif[temp2]=TextCif[i]; TextCif[i]=temp[0]; temp = ""; } } } } return TextCif; }
Estaba intentando implementarlo como dices engel lex antes de crear el tema en el foro pero me quedaba mucho código y un batiburrillo. Es parte de una librería sencilla en javascript que estoy creando con un cifrado que quiero que sea irrompible basándome en el principio de que todas las posibilidades son igual de frecuentes estadísticamente. Por ejemplo "hola que tal" 12 caracteres dara un resultado que al intentar romperlo dará todas las combinaciones posibles de caracteres de 12 caracteres. Es decir, el texto original podría ser: "aaaaaaaaaaaa" o "qbfkwusbwp1;$" o "adios amigos", etc. Ahora estoy mirando de que forma fixear el tamaño a un tamaño concreto sin limitar la cantidad de entrada sin rompear la equidad estadística. Los cifrados actuales basan su seguridad en capacidad de cómputo, y no me convence ya que teóricamente todos puede romperse dada X capacidad de cómputo e Y tiempo.
|
|
|
En línea
|
Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖
|
|
|
engel lex
|
de haber dicho en js es corto... var original = ["H", "o", "l", "a", " "]; var orden = ["a", "d", "m", "i", "n"]; var copia = orden.slice(); copia.sort(); var salida = []; copia.forEach(function(item){ salida.push(original[orden.indexOf(item)] ) })
|
|
« Última modificación: 26 Noviembre 2019, 17:01 pm por engel lex »
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
Serapis
|
St..Man... Eso es implementar una tabla indexado por otra. Sea el ASCII. que como sabes va de 0 a 255 (que se supone es el punto de partida), donde (por ejemplo) la 'A' ocupa la posiciópn 65, pero en tu caso ocuparía la posición 0... MiTabla(0) = ASCII(65) igual para el resto... Si van contíguos, podría usarse un bucle, por ejemplo supuesto el caso de una tabla con las 26 mayúsculas: bucle para k desde 65 hastas 65 + 26 MiTabla(n) = ASCII(k) n +=1 siguiente Ahora 'Mitabla(7)' tendrá la 8ª letra, osea la 'H', el valor 72. Posteriormente puede usarse en la forma: ASCII(Mitabla(7))
|
|
|
En línea
|
|
|
|
@XSStringManolo
Hacker/Programador
Colaborador
Desconectado
Mensajes: 2.399
Turn off the red ligth
|
de haber dicho en js es corto... var original = ["H", "o", "l", "a", " "]; var orden = ["a", "d", "m", "i", "n"]; var copia = orden.slice(); copia.sort(); var salida = []; copia.forEach(function(item){ salida.push(original[orden.indexOf(item)] ) })
Tengo que probar este código, el que implementé yo no me sirvetras hacer unos cambios. St..Man... Eso es implementar una tabla indexado por otra. Sea el ASCII. que como sabes va de 0 a 255 (que se supone es el punto de partida), donde (por ejemplo) la 'A' ocupa la posiciópn 65, pero en tu caso ocuparía la posición 0... MiTabla(0) = ASCII(65) igual para el resto... Si van contíguos, podría usarse un bucle, por ejemplo supuesto el caso de una tabla con las 26 mayúsculas: bucle para k desde 65 hastas 65 + 26 MiTabla(n) = ASCII(k) n +=1 siguiente Ahora 'Mitabla(7)' tendrá la 8ª letra, osea la 'H', el valor 72. Posteriormente puede usarse en la forma: ASCII(Mitabla(7)) Esto es una tabla de equivalencias. Yo lo que quiero es desordernar en base al contenido de un array. No tiene nada que ver.
|
|
|
En línea
|
Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖
|
|
|
Serapis
|
Tiene todo que ver... si cada valor en el array tiene siempre la misma equivalencia en el otro (perdona pero la explicación dada al comienzo es demasiado parca, como para terminar de entender su propósito).
Y si es siempre cambiante, o debe serlo, entonces usa el algoritmo de Fisher-Yates que es esa precisamente su funcionalidad.
|
|
|
En línea
|
|
|
|
@XSStringManolo
Hacker/Programador
Colaborador
Desconectado
Mensajes: 2.399
Turn off the red ligth
|
Ese algoritmo de barajado utiliza un algoritmo aleatorio asique no puedo reversarlo. En caso de ser un algoritmo pseudoaleatorio no es un CSRNG y podría reversarse y romperse el cifrado. Yo necesito desordenar en base a la contraseña para reducir los resultados estadísticos de análisis de frecuencia. Se da por hecho que el atacante no conoce la contraseña. Quiero desordenar antes de pasarle vector de inicialización. También tengo que fixear el tamaño a tamaño fijo. Mejorar la implementación, quitar código inútil, ampliar el diccionario de input y cambiar los caracteres de output para que no necesite base64. Cifrado LiveSi se os ocurre algo mejor comentarlo.
|
|
« Última modificación: 27 Noviembre 2019, 21:57 pm por @?0!,5^34 »
|
En línea
|
Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖
|
|
|
engel lex
|
Ese algoritmo de barajado utiliza un algoritmo aleatorio asique no puedo reversarlo. En caso de ser un algoritmo pseudoaleatorio no es un CSRNG y podría reversarse y romperse el cifrado. Yo necesito desordenar en base a la contraseña para reducir los resultados estadísticos de análisis de frecuencia. Se da por hecho que el atacante no conoce la contraseña. Quiero desordenar antes de pasarle vector de inicialización. También tengo que fixear el tamaño a tamaño fijo. Mejorar la implementación, quitar código inútil, ampliar el diccionario de input y cambiar los caracteres de output para que no necesite base64. Cifrado Live[url] Si se os ocurre algo mejor comentarlo.
te recomiendo leer sobre como funcinoa rijandel (la base de aes) para no tener que depender de aleatorios... especialmente de aleatorios de "alto nivel"
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
¿Como me aconsejais que haga esto en PHP?
PHP
|
vicmarcal
|
6
|
3,086
|
19 Julio 2007, 20:48 pm
por vicmarcal
|
|
|
Como creo un botón que haga la función de imprimir?
Programación General
|
1adria1
|
1
|
2,117
|
11 Febrero 2013, 16:30 pm
por 1adria1
|
|
|
Como creo un botón que haga la función de imprimir?
Java
|
1adria1
|
4
|
5,907
|
11 Febrero 2013, 22:30 pm
por sapito169
|
|
|
Como implementar función Ajax - Autocomplete
PHP
|
Jarcx9
|
9
|
3,639
|
30 Septiembre 2014, 17:04 pm
por Jarcx9
|
|
|
duda acerca de como implementar un función en este codigo.
Programación C/C++
|
tayzuke
|
1
|
1,901
|
5 Julio 2016, 16:48 pm
por AlbertoBSD
|
|