elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Mensajes
Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ... 235
51  Programación / Programación General / Re: ¿Qué método es recomendado para ordenar al azar un array? en: 7 Enero 2025, 15:02 pm
El FOR ya deberías de dominarlo porque te lo expliqué varias veces y convertirlo a WHILE es inmediato, son completamente equivalentes para estas cosas sencillas donde hay inicialización de variable, condición y actualización de variable.

Quizá renombrando variables y adaptándolo más las instrucciones de ActionScript que sueles utilizar se te haga más legible:

Código
  1. colores = ["Azul", "Rojo", "Verde", "Blanco", "Negro"]
  2.  
  3. posicion1aReubicarse = colores.length - 1
  4. while (posicion1aReubicarse > 0) {
  5.  posicion2aReubicarse = random(posicion1aReubicarse)
  6.  saveDeElemento1 = colores[posicion1aReubicarse]
  7.  colores[posicion1aReubicarse] = colores[posicion2aReubicarse]
  8.  colores[posicion2aReubicarse ] = SaveDeElemento1
  9.  posicion1aReubicarse--
  10. }
  11.  
  12. trace(Colores)

Resumen: Se toma el último elemento (el de la derecha), luego aleatoriamente se elige otro elemento (alguno situado a la izquierda del elemento elegido anteriormente), entonces se intercambian ambos elementos. Se continúa haciendo lo mismo con el penúltimo elemento, luego con el antepenúltimo y así sucesivamente.

1. Crea el Array de elementos a desordenar
3. Se inicializa posicion1aReubicarse al número de elementos del Array -1, para obtener el último índice válido para el Array, este indicará el primer elemento a reubicar
4. El WHILE, la condición para continuar es que posicion1aReubicarse sea mayor que 0 porque si fuera 0 ya no habría con quien hacer el intercambio
5. Generamos un número aleatorio entre 0 y el índice actual (no incluye a este último) para determinar el índice del segundo elemento a reubicar, para la primera iteración puede ser: 0, 1, 2, o 3
6. Guardamos el primer elemento a reubicar para no perderlo
7 y 8. Hacemos el intercambio, ponemos el segundo elemento a reubicar en lugar del primero, luego ponemos el primer elemento a reubicar (que se ha guardado porque lo perdimos en la línea 7) en lugar del segundo
9. Decrementamos posicion1aReubicarse para ir a por el penúltimo elemento, luego por el antepenúltimo y así sucesivamente

La razón de avanzar de atrás hacia adelante (del último al primero) es para simplificar la generación del número aleatorio y que sea más legible, pero el funcionamiento es completamente igual. Si avanzaras desde el primero al último tendría que ser:

Código
  1. colores = ["Azul", "Rojo", "Verde", "Blanco", "Negro"]
  2.  
  3. posicion1aReubicarse = 0
  4. while (posicion1aReubicarse < colores.length - 1) {
  5.  posicion2aReubicarse = random( colores.length - (posicion1aReubicarse + 1) ) + posicion1aReubicarse + 1
  6.  saveDeElemento1 = colores[posicion1aReubicarse]
  7.  colores[posicion1aReubicarse] = colores[posicion2aReubicarse]
  8.  colores[posicion2aReubicarse ] = SaveDeElemento1
  9.  posicion1aReubicarse++
  10. }
  11.  
  12. trace(Colores)
52  Programación / Python / Re: Buscador de combinaciones inexistentes no funciona. en: 5 Enero 2025, 17:55 pm
Eso es porque no entiendes el código que te manda ChatGPT, y eso agravado en que Python puede llegar a sonar a chino por sus "instrucciones complejamente simplificadas" porque difieren mucho a los de lenguajes de programación más clásicos, debes tener el manual de python a la mano y tratar de entender que hace cada cosa o decirle a ChatGPT que te lo explique, olvida cualquier otro lenguaje de programación clásico como ActionScript o solo formarás contradicciones en tu cabeza. También le puedes decir a ChatGPT que use un lenguaje más clásico y estándar en python para que sea más legible.

De todas maneras el script a mi si me funciona, tengo la versión 3.8.10 de Python e incluso un doble click me sirve:



Lo mejor siempre es abrir una línea de comandos y ejecutar el script ahí, en mi caso presiono Shift + Click derecho en un espacio vacío y me aparece en el menú contextual la opción de: Abrir ventana de comandos aquí, luego arrastro el script ahí o tipeo el nombre, al final un Enter para ejecutarlo
53  Sistemas Operativos / Windows / Re: problemas con nuevo ordenador con win 11 en: 4 Enero 2025, 14:13 pm
Una vez le di a un técnico una PC que tenía contraseña al iniciar Windows, habiéndome olvidado de decirle, y cuando me la dió o hablamos el tipo me dijo que tenía contraseña, luego levantó la seja, pero llegué a la conclusión de que para él fue como una piedrita en el camino xD

Aunque Songoku afirme que son unos pocos segundos y aunque casi siempre es así, puede llegar a complicarse, por ejemplo si Tachikomaia me trae su Celeron de 2GB de Ram y HDD antiguo, pues va a tardar mucho más en levantar el Sistema Live y eso si soporta arranque por USB, en el peor de los casos habrá que arrancar por CD y puede que ni CD ni Lectora de CD tenga XD

En una PC moderna es mucho más rápido pero también hay que considerar el Cifrado, ya me ha tocado ver que aparte de contraseña tienen cifrado como BitLocker, muchos portátiles ya vienen con BitLocker activado por defecto, y pues ahí si pierdes la contraseña o la forma de recuperarla pierdes todo lo cifrado, intentar romper BitLocker es muy costoso, tengo entendido de que también está EFS para cifrar a nivel usuario aunque nunca lo vi en detalle
54  Programación / Python / Re: Buscador de combinaciones inexistentes no funciona. en: 3 Enero 2025, 13:54 pm
Citar
El programa se cierra enseguida sin que yo pueda ver qué pasa. ¿Cual es la falla, cómo lo arreglo?

O_o? Es un aplicación/script de consola o línea de comando (como john the ripper), usa una consola (CMD, Símbolo del Sistema, PowerShell, etc), también puedes poner una "pausa" antes de que se cierre pero si hay errores no los mostrará a no ser que lo ejecutes en una consola que es como debe de ser.

Para poner la pausa puedes agregar un input al final o donde quieras la pausa:

Código
  1. input("Presione Enter para continuar ...")
55  Foros Generales / Dudas Generales / Re: Convertir espacios seguidos en saltos de línea. en: 3 Enero 2025, 00:24 am
Usa algún editor de texto plano potente como Notepad3, Notepad++ o SublimeText, todos ellos tienes opciones para hacer búsquedas, reemplazos avanzados.

Notepad3 con expresiones regulares:

[  +] => Reemplazar dos o más espacios
[\n] => Por un salto de línea




En Notepad++ y SublimeText es igual que en Notepad3 usando expresiones regulares

En SublimeText puedes usar la multiedición con atajos de teclado que siempre es más rápido y cómodo para estas cosas tan sencillas:



1. Con doble click seleccionas palabras, yo seleccioné los espacios
2. Con Ctrl + F3 seleccionas todas las ocurrencias iguales a lo que hayas tenido seleccionado
3. Enter para reemplazar lo seleccionado con un Salto de Línea
4. Ctrl + A para seleccionar todo
5. Shift + Tab para quitar los espacios delante de las líneas
56  Informática / Hardware / Re: sirve una tarjeta pci express 3,0 x16 a una tarjeta madre pci express 2.0 x8? en: 31 Diciembre 2024, 22:55 pm
Por lo que he estado leyendo al parecer si es posible usar una gráfica PCI-E 3.0 x16 a un puerto PCI-E 2.0 x8, supongo que si es posible. Solo ten en cuenta también que necesitas una Fuente de poder con la alimentación correspondiente para la gráfica (conector de 8 pines extra), también revisa si tienes el espacio porque esa gráfica es gordita
57  Informática / Hardware / Re: sirve una tarjeta pci express 3,0 x16 a una tarjeta madre pci express 2.0 x8? en: 31 Diciembre 2024, 14:57 pm
PCI-E 2.0 x8?

Es raro encontrar una placa así, estoy buscando sus características pero parece que es muy antigua y la tarjeta de video aparenta ser demasiado para esa pobre placa, ni en la web del fabricante encuentro su ficha técnica y eso no es buena señal.

Estás seguro de que tiene una PCI-E 2.0 x8? revisaste su BIOS o tienes la ficha técnica o miraste el puerto PCI-E y viste que es x8? No soy experto pero dudo que la gráfica x16 funcione en una x8, la x8 tiene menos conectores

Tarjeta de video x8, fíjate en la parte donde se conecta, solo tiene la mitad de conectores:





Siempre puedes revisar los Benchmarks para conocer un poco las opciones que otros usuarios han probado, por ejemplo: https://www.userbenchmark.com/System/ECS-H61H2-CM/9951
58  Programación / Programación General / Re: Evitar o corregir entrada de valores inaplicables. en: 29 Diciembre 2024, 00:51 am
Supongo que una manera sencilla de hacer lo que pides es "limpiar" los caracteres, uno a uno los vas comprobando y solo dejas pasar los que admitas, el detalle es cuando vas a hacer esta limpieza, si lo desea lo puedes poner muy genérico y sencillo haciéndolo antes de tomar el valor del textbox, también lo puedes poner en el evento keyUp como el ejemplo que dejo a continuación:

Código
  1. onClipEvent(keyUp) {
  2.  if (Selection.getFocus() == "_level0.myClip.txt1") {
  3.    txt = _level0.myClip.txt1
  4.    tmp = ""
  5.    for (i = 0; i < txt.length; i++) {
  6.      c = txt.charCodeAt(i)
  7.      // 48 = 0, 57 = 9; 64 = A, 70 = F; 97 = a, 102 = F
  8.      if ( (c >= 48 && c <= 57) || (c >= 65 && c <= 70) || (c >= 97 && c <= 102) ) {
  9.        tmp += txt.charAt(i)
  10.      }
  11.    }
  12.    _level0.myClip.txt1 = tmp.toUpperCase()
  13.  }
  14. }

Selection.getFocus() devuelve la ruta completa del TextBox donde estoy escribiendo, de ahí puedes distinguir entre los textbox que tengas. Luego simplemente compruebo uno a uno los caracteres del textbox y creo un nuevo texto temporal donde únicamente dejo los caracteres de mi lista blanca: 0-9 A-F a-f y al final se la pongo al TextBox

Otra cosa a considerar es por ejemplo el tamaño, debería ser 6, si no es así puedes rellenar con ceros aunque esto lo tendrías que validar al tomar el valor del textbox y ya no en el keyup
59  Informática / Software / Re: Programa para ordenar archivos, Windows 7 "cierra" el buscador al abrir la carpeta contenedora. en: 28 Diciembre 2024, 13:42 pm
Citar
Quisiera algo más eficiente. Algo que abra la carpeta en otra ventana, de modo que pueda regresar a la búsqueda sin problema

Si buscas eficiencia tienes a Everything https://www.voidtools.com/downloads/ con él puedes  búsquedas avanzadas, y obviamente abrir la carpeta contenedora de un archivo o carpeta con click derecho > abrir carpeta contenedora, o presionar Ctrl + Enter para hacer lo mismo. Para hacer búsquedas en sistemas de archivos NTFS (típicos en Windows) es lo mejor que hay.

Para el Explorador de Windows puedes probar:

En caso de carpetas tienes dos opciones:
- Click derecho > Abrir en nueva ventana
- Ctrl + Enter

En caso de archivos:
- Click derecho, mantener presionado Ctrl y dar click en Abrir la ubicación del archivo
60  Programación / Programación General / Re: De una cadena, quitar la subcadena especificada, tantas veces como se repita. en: 22 Diciembre 2024, 15:51 pm
En ambos casos no puedes usar split() porque este solo funciona con un caracter, debes crear tu propia función, por ejemplo para A lo tienes solucionado con:

Código
  1. Cadena = "121213121"
  2. CaracteraQuitar = "121"
  3.  
  4. trace(quitarOcurrencias(Cadena, CaracteraQuitar))
  5.  
  6. function quitarOcurrencias(cadena, quitar) {
  7.  for (i = cadena.indexOf(quitar); i >= 0; i = cadena.indexOf(quitar)) {
  8.    cadena = cadena.substring(0, i) + cadena.substring(i + quitar.length)
  9.  }
  10.  return cadena
  11. }
  12.  
  13. // Devuelve: 213

- He utilizado un FOR porque las instrucciones son sencillas (un FOR es un "WHILE sencillo"), recuerda la estructura de un FOR:

for (inicialización de variables; condición para continuar; actualización de variables) {
  código
}


- Su equivalente en WHILE sería:

inicialización de variables
while (condición para continuar) {
  código
  actualización de variables
}


- El objetivo del FOR sería ahorrarse una par de líneas sencillas, aunque pueden ser más pero ya complicarían más la legibilidad del FOR

- Pero si lo quieres en WHILE completamente equivalente, porque he leído que no te gustan los FOR sería:

Código
  1. Cadena = "121213121"
  2. CaracteraQuitar = "121"
  3.  
  4. trace(quitarOcurrencias(Cadena, CaracteraQuitar))
  5.  
  6. function quitarOcurrencias(cadena, quitar) {
  7.  i = cadena.indexOf(quitar)
  8.  while (i >= 0) {
  9.    cadena = cadena.substring(0, i) + cadena.substring(i + quitar.length)
  10.    i = cadena.indexOf(quitar)
  11.  }
  12.  return cadena
  13. }
  14.  
  15. // Devuelve: 213

- indexOf busca una subcadena en una cadena, si la encuentra devuelve el índice de donde empieza la subcadena, devuelve -1 si no encuentra nada, hace la búsqueda de izquierda a derecha y solo hace una vez, por eso lo pongo en un bucle

En caso de B no puedes quitar mientras buscas, para ese caso debes marcar los caracteres a quitar y al final quitarlos

Código
  1. Cadena = "121213121";
  2. CaracteraQuitar = "121";
  3.  
  4. trace(quitarOcurrencias2(Cadena, CaracteraQuitar))
  5.  
  6. function quitarOcurrencias2(cadena, quitar) {
  7.  
  8.  i = 0
  9.  idx = cadena.indexOf(quitar, i)
  10.  if (idx < 0) return cadena //Si no hay ocurrencias salgo de inmediato
  11.  
  12.  for (marcas = []; idx >= 0; i = idx + 1, idx = cadena.indexOf(quitar, i)) {
  13.    for (j = 0; j < quitar.length; j++) {
  14.      marcas[idx + j] = true
  15.    }
  16.  }
  17.  
  18.  nuevaCadena = ""
  19.  for (i = 0; i < cadena.length; i++) {
  20.    if (marcas[i] != true) {
  21.      nuevaCadena += cadena.charAt(i)
  22.    }
  23.  }
  24.  
  25.  return nuevaCadena
  26. }
  27.  
  28. // Devuelve: 3

Para este caso igualmente utilizo indexOf pero le doy un parámetro extra que es el índice de caracter donde debe empezar a buscar la subcadena en la cadena, tengo un array para guardar las marcas de acuerdo a la posición de los caracteres, marco con true los caracteres que coinciden. Al final reviso los caracteres marcados y solo conservo los que no tienen marca

He usado FOR y como vez se complica un poquitín más y podría no ser muy legible XD, acá te dejo el equivalente con WHILE

Código
  1. Cadena = "121213121";
  2. CaracteraQuitar = "121";
  3.  
  4. trace(quitarOcurrencias2(Cadena, CaracteraQuitar))
  5.  
  6. function quitarOcurrencias2(cadena, quitar) {
  7.  
  8.  i = 0
  9.  idx = cadena.indexOf(quitar, i)
  10.  if (idx < 0) return cadena //Si no hay ocurrencias salgo de inmediato
  11.  
  12.  marcas = []
  13.  while (idx >=0) {
  14.    for (j = 0; j < quitar.length; j++) {
  15.      marcas[idx + j] = true
  16.    }
  17.    i = idx + 1
  18.    idx = cadena.indexOf(quitar, i)
  19.  }
  20.  
  21.  nuevaCadena = ""
  22.  for (i = 0; i < cadena.length; i++) {
  23.    if (marcas[i] != true) {
  24.      nuevaCadena += cadena.charAt(i)
  25.    }
  26.  }
  27.  
  28.  return nuevaCadena
  29. }
  30.  
  31. // Devuelve: 3
Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ... 235
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines