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


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Temas
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 [14] 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ... 57
131  Programación / Programación General / De una cadena, quitar la subcadena especificada, tantas veces como se repita. en: 20 Diciembre 2024, 05:52 am
Por ejemplo de la cadena "121213121", quitar toda subcadena "121". No es un ejemplo cualquiera, intento mostrar que hay 2 interpretaciones:

A: Quitamos el 1er 121: 121213121
Siguiente: 213121
Resultado final: 213

B: Debemos quitar:
esto: 121213121
y esto: 121213121
O sea: 121213121
Resultado final: 3

Hice algo parecido a esto, sólo sirve si la subcadena tiene 1 solo caracter (y en tal caso no hay ambiguedad):
Código
  1. Cadena = "121213121";
  2. CaracteraQuitar = "1";
  3. // Cadena a la que se agregarán los caracteres que no deban quitarse:
  4. NuevaCadena = "";
  5. PunteroDeCaracteres = -1;
  6. do {
  7. PunteroDeCaracteres++;
  8. CaracterSeñalado = Cadena.charat(PunteroDeCaracteres);
  9. // Si el caracter señalado no es como CaracteraQuitar:
  10. if (CaracterSeñalado != CaracteraQuitar) {
  11. // Agregarlo a NuevaCadena:
  12. NuevaCadena = NuevaCadena+CaracterSeñalado;
  13. }
  14. } while (PunteroDeCaracteres<Cadena.length);
  15. trace(NuevaCadena);

Intenté que elimine subcadenas de cualquier extensión, usando un método que me enseñaron, pero me tranqué:
Código
  1. Cadena = "121213121";
  2. CaracteraQuitar = "121";
  3. // Ver si el CaracteraQuitar está en Cadena:
  4. // Esto es porque en este lenguaje...
  5. // no se puede quitar un caracter de modo simple:
  6. // De Cadena se quitará...
  7. // cada presencia del CaracteraQuitar:
  8. NuevaCadena = Cadena;
  9. do {
  10. SeQuitoCaracter = "No";
  11. SaveDeNuevaCadena = NuevaCadena;
  12. // Obtener la cadena anterior a la presencia...
  13. // del CaracteraQuitar, si es que él está presente
  14. // (queda un array, join("") es para que se...
  15. // transforme en un string sin separaciones):
  16. NuevaCadena = NuevaCadena.split(CaracteraQuitar).join("");
  17. // Obtener el resto de la cadena:

¿Se puede hacer A con este método o no? ¿y B?

Acabo de probarlo sin el do y al parecer sólo funciona si CaracteraQuitar es 1 caracter. El nombre debería ser SubcadenaaQuitar, pero es otro tema.

¿Debería intentarlo ajustando mi 1er código o hay una manera mejor?
132  Programación / Programación General / Correcta y rápida evitación de dibujos sin pintados en alguna fila y columna. en: 16 Diciembre 2024, 19:00 pm
Se quiere, entre otras cosas, que los dibujos generados en blanco y negro tengan algún cuadradito pintado (negro) en cada fila y columna.

El 1ero es así:
BBN
BNB
NBB

Va pintando y despintando, desde abajo a la izquierda.

En cierto punto, queda así:
BBN
BNN
BBB
Ese no debe mostrarse. El programa continuará pintando y despintando, hasta hallar un dibujo que cumpla las condiciones. Pero puede verse que, por el orden conque pinta, se generarán varios dibujos que no servirán.

Para evitar eso, puse en el código, que mire cada columna y fila, comenzando desde la izquierda y abajo, y, bueno, esto:
Código
  1. } else if (SinPintadosEn == "Columna") {
  2. // El puntero se pone en la columna indicada,
  3. // de la última fila:
  4. Puntero = CuadraditosPorFila*(CuadraditosPorFila-1)+Puntero2;
  5. } else if (SinPintadosEn == "Fila") {
  6. // El puntero se pone en la fila indicada,
  7. // de la última columna:
  8. Puntero = CuadraditosPorFila*Puntero2;
Si se detecta una columna sin pintados, enseguida el programa hace eso, pintará un cuadradito inferior, en la columna donde haga falta. El Puntero indica cual se pintará.
Si en cambio detecta una fila sin pintados, también enseguida pintará uno, a la derecha, en la fila donde haga falta.

Pensé que eso era bueno, pero hace que algunos dibujos correctos no se muestren, la versión antigua del programa está en la izquierda:
https://youtu.be/iZuwk7YcGaw

Quizá la solución sea, en vez de pintar enseguida al detectar una falla, terminar de revisar cada fila y columna, y si se detecta una falla en ambos casos entonces pintar el cuadradito que solucione ambas. Pero no estoy seguro de que funcione bien, a estas alturas. Además, cuando sólo falle en 1 aspecto, estará revisando medio en vano, quizá sea mejor producir los dibujos normalmente y no mostrarlos si no cumplen las condiciones. Lo que estoy intentando es evitar que se produzcan innecesarios, pero si requiere análisis "innecesarios", no sé si es mejor. ¿Sugerencias?

Código en cuestión:
Código
  1. // Para juzgar:
  2. // ¿El dibujo tiene cuadraditos pintados en toda columna y fila?
  3. Puntero2 = CuadraditosPorFila;
  4. // Esto puede que cambie:
  5. CuadraditoenCadaFyC = "Sí";
  6. do {
  7. // ¿La columna Puntero2 no tiene algún cuadradito pintado?
  8. if (eval("PintadosenC"+Puntero2)<1) {
  9. CuadraditoenCadaFyC = "No";
  10. // Para saber qué corregir:
  11. SinPintadosEn = "Columna";
  12. } else if (eval("PintadosenF"+Puntero2)<1) {
  13. // La fila Puntero2 no tiene algún cuadradito pintado:
  14. CuadraditoenCadaFyC = "No";
  15. SinPintadosEn = "Fila";
  16. } else {
  17. Puntero2--;
  18. }
  19. } while (CuadraditoenCadaFyC == "Sí" && Puntero2>0);
  20. // ¿El dibujo tiene cuadraditos pintados en toda columna y fila?
  21. if (CuadraditoenCadaFyC == "No") {
  22. // No, no mostrarlo y hacer otro:
  23. // trace ("    No ocupa cada F y C, salteándolo.");
  24. DibujosPequeños++;
  25. // Actualizar MinCuadraditoPintado si corresponde:
  26. if (Puntero<MinCuadraditoPintado) {
  27. // Esto no viene al caso.
  28. } else if (SinPintadosEn == "Columna") {
  29. // El puntero se pone en la columna indicada,
  30. // de la última fila:
  31. Puntero = CuadraditosPorFila*(CuadraditosPorFila-1)+Puntero2;
  32. } else if (SinPintadosEn == "Fila") {
  33. // Probablemente es innecesario poner la condición
  34. // El puntero se pone en la fila indicada,
  35. // de la última columna:
  36. Puntero = CuadraditosPorFila*Puntero2;
  37. } else {
  38. // Probablemente es innecesario poner este else y su contenido
  39. // El puntero se pone en el cuadradito inferior derecho:
  40. Puntero = MaxPosiciondePuntero;
  41. trace("Caso que no debería ocurrir");
  42. }
133  Programación / Programación General / ¿Se puede hacer un bat que abra john the rippley y le de un comando? en: 15 Diciembre 2024, 19:07 pm
Tendré que usarlo muchas veces creo, así que quisiera automatizar un poco la tarea:
- Abrir la carpeta run donde están los ejecutables de john.
- En la barra de direcciones, escribir CMD.
- Pasarle el comando john --wordlist=Mywords.txt rar.hashes.

Ese archivo lo cambiaré manualmente luego de que john termine.

¿Cómo lo hago?

baia baia, respuesta de God PT:
Citar
¡Claro que puedes hacerlo! Puedes crear un archivo batch (`.bat`) para automatizar este proceso y que ejecute directamente el comando sin necesidad de escribir manualmente en la barra de direcciones o abrir el símbolo del sistema por separado. Aquí tienes una guía paso a paso:

### 1. **Crea el archivo batch**

1. Abre un editor de texto como *Bloc de notas* o cualquier otro editor de texto simple.
2. Escribe el siguiente código (personalizando las rutas según tu configuración):

```batch
@echo off
:: Cambia a la carpeta donde está el ejecutable de John the Ripper
cd /d "C:\ruta\a\la\carpeta\run"

:: Ejecuta el comando con el archivo de wordlist y el archivo de hashes
john --wordlist=Mywords.txt rar.hashes

:: Pausa para que puedas ver el resultado
pause
```

3. Guarda el archivo con la extensión `.bat`. Por ejemplo, podrías llamarlo `ejecutar_john.bat`.

   - Asegúrate de que al guardar uses **Guardar como...** y selecciones "Todos los archivos" como tipo, para evitar que Windows lo guarde como `ejecutar_john.bat.txt`.

---

### 2. **Cómo usar el archivo batch**

1. Coloca el archivo batch (`.bat`) en cualquier lugar que te sea conveniente.
2. Haz doble clic en el archivo batch. Esto hará lo siguiente:
   - Cambiará al directorio `run` donde está el ejecutable de John the Ripper.
   - Ejecutará el comando `john --wordlist=Mywords.txt rar.hashes`.
   - Mantendrá abierta la ventana de la consola al final (gracias al comando `pause`) para que puedas leer los resultados.

---

### 3. **Personaliza el archivo batch**

Si más adelante necesitas cambiar los parámetros (como el archivo de wordlist o el archivo de hashes), simplemente edita el archivo batch con un editor de texto y ajusta las líneas correspondientes.

---

### 4. **Automatización adicional (opcional)**

Si siempre tendrás los archivos `rar.hashes` y `Mywords.txt` en la misma carpeta, podrías simplificar aún más las cosas:

- Coloca el archivo batch en el directorio donde están los archivos, y modifica el batch para que no tengas que cambiar de directorio:

```batch
@echo off
:: Ejecuta John the Ripper directamente en el directorio actual
"C:\ruta\a\la\carpeta\run\john.exe" --wordlist=Mywords.txt rar.hashes

:: Pausa para ver los resultados
pause
```

De este modo, el archivo batch puede ejecutarse desde cualquier lugar, pero necesitarás asegurarte de que `Mywords.txt` y `rar.hashes` estén en la misma carpeta que el batch.

---

### 5. **Cosas a tener en cuenta**

- Si utilizas rutas con espacios, asegúrate de que estén entre comillas, como en `"C:\Program Files\John the Ripper\run"`.
- Si necesitas cambiar el archivo `rar.hashes` manualmente, asegúrate de que esté en el directorio donde espera el batch.
- Si tienes varias tareas similares pero con diferentes archivos, podrías crear diferentes archivos batch para cada tarea con los nombres de archivo correspondientes.

¡Y listo! Con esto, puedes automatizar el proceso y ahorrarte tiempo.
134  Media / Juegos y Consolas / Mejorar estas ideas sobre los tipos de videojuegos. en: 10 Diciembre 2024, 20:55 pm
Está inconcluso y yo algo liado:
Citar
¿Cuales son las variables de los juegos y cual es el más sencillo?


Quiero hacer un juego de cada tipo, comenzando por los más sencillos. El programa tendría una pantalla inicial donde se podría modificar variables y basado en eso aparecería un juego u otro.


El juego más sencillo que se me ocurre es uno que se gane por hacer algo, no importa qué, mover el mouse por ejemplo. Pero eso debería representar algo, por ejemplo que un personaje en la pantalla se movió.
También puede ser ganar por hacer nada durante cierto tiempo. Ganar por actuar o no, me parece que no, no tendría gracia.


En cuanto a variables pienso en:

1- Dimensiones del universo: ¿?
Me dijeron que una aventura de texto, como fueron algunos 1eros juegos, podría tener 0d. No sé.
Un juego de 1d también es posible pero se vería como uno 2d, al menos según pensé. Puede que los personajes sólo se muevan hacia una dirección, pero van a tener cierto alto y ancho, son 2d. Incluso si sólo fuesen 1 pixel cada uno, el pixel tiene cierto alto y cierto ancho.
En el caso de juegos de cartas o algún otro, se podría decir que cada mano es una dimensión, así como la pila de descarte y alguna otra cosa, pero parece un poco forzado, no parece una dimensión normal. Si se tienen opciones, no es que la lista de opciones sea una dimensión. Las cartas en la mano son opciones... En fin, es un caso especial.
Yo creo que lo más simple para empezar es 2d. Las pantallas son 2d. Una aventura de texto, a estas alturas no tiene mucho sentido hacer. Incluso las novelas visuales tienen lugares y si hay más de 1 personaje, no aparecen ambos en el medio.

2- Posibles estados del personaje : ¿?
No su posición en las dimensiones. No es necesario que haya movimiento. El juego puede ser, por ejemplo, que el personaje deba ponerse del mismo color que otro.

3- Máximas caras visibles del personaje: 0~6
Considerado como un cubo, cuántas se pueden llegar a ven. Pueden ser 0, como en juegos de cartas, donde el personaje no se ve.
El máximo normal es 3. Puede ser cuando se muestra medio en diagonal, medio arriba de su cabeza, su perfil y espalda/frente. En vez de arriba de su cabeza podría ser desde abajo, pero es bastante atípico.
Es más de 3 cuando hay más de 2 cámaras mostrando diferentes partes del personaje. Tiene sentido por ejemplo si es una nave que puede ser atacada desde diversos lados.

4- Perfil del personaje es visible: N/S
Se refiere a si su perfil se ve en alguna ocasión o no. No daré relevancia a si se ve uno y no el otro. Por ejemplo del clásico Mario sólo se ve 1 perfil, pero considero que se ve de perfil y ya está.

5- El personaje es visible desde arriba: N/S
Si en algún punto se ve completamente desde arriba o no. Los clásicos de Zelda no se ven completamebte desde arriba, esto se da en juegos de naves scrolldown, por ejemplo.

6- Espalda del personaje es visible: N/S
Lo mismo respecto a su espalda. En este caso supongo que Zelda vale.

7- Frente del personaje es visible: N/S
Simple.

- El personaje es visible desde abajo: N/S
Extraño, pero posible si por ejemplo es una nave y cosas se acercan desde la pantalla. Se vería más o menos como vemos desde abajo a un avión, y desde ahí se le acercarían cosas. Como es tan raro, no lo tendré en cuenta.

8- Perfil, arriba y espalda del pers. es visible: N/S
Si en algún momento se verá todo eso a medias, a la vez.

9- Perfil, arriba y frente del pers. es visible: N/S
Parecido.

- Perfil, abajo y espalda del pers. es visible: N/S
El caso atípico que comenté, por ahora no lo tendré en cuenta.

- Perfil, abajo y frente del pers. es visible: N/S
Parecido.

10- Posibles objetos del personaje: 0~
Típico.

11- El personaje puede moverse hacia adelante: N/S
Típico.

12- El personaje puede moverse hacia atrás:
Aquí las opciones son:
A- No.
B- Sí pero queda mirando hacia allí.
C- Sí.
D- Sí, con opción de quedar mirando hacia allí.

13- El personaje puede moverse hacia los costados:
A- No.
B- Sí pero queda mirando hacia allí.
C- Sí.
D- Sí, con opción de quedar mirando hacia allí.
De nuevo, no consideraré que sólo se pueda mover hacia 1 costado. Es hacia ambos o nada.

14- El personaje puede moverse hacia arriba:
Aquí las opciones me parece complicado decidir cuales serían, se me ocurre:
A- No.
B- Saltando, volando, nadando o trepando, pero queda mirando hacia allí y cae.
C- Saltando, volando, nadando o trepando, pero cae.
D- Volando, nadando o trepando, pero queda mirando hacia allí.
E- Saltando, volando, nadando o trepando, con opción de quedar mirando hacia allí, pero cae.
F- Volando, nadando o trepando, con opción de quedar mirando hacia allí.
En Demon Crest se ve eso de que el personaje se mantiene flotando, no cae, y puede subir con cierto poder. Aunque también puede caer si quiere. En fin, sería para un juego donde no tenga sentido caer, y no subir sea mantenerse.

15- El personaje puede moverse hacia abajo:
Parecido supongo:
A- No.
B- Sí, pero queda mirando hacia allí y sube.
C- Sí, pero sube.
D- Sí, pero queda mirando hacia allí.
E- Sí, con opción de quedar mirando hacia allí, pero sube.
F- Sí, con opción de quedar mirando hacia allí.
Podría subir en el caso de que quiera hundirse y no sea suficientemente denso, o si en la parte de arriba de la pantalla hay un agujero negro u objeto con mucha gravedad, se me ocurre. Como que el motor genera un impulso pero se apaga, hay que reencenderlo, y así.



Veo unas 16 variables*3+2, o 16 cuyos valores pueden ser también letras, y 2. Ah, no, en un caso habría más de 30 posibilidades. Otra posibilidad es considerar sólo la máxima complejidad de cada una, no distinguir entre personajes o enemigos o aliados, pero hay diferencia...
Lo de letras es porque los juegos se llamarían por ejemplo 11111... etc, tantos caracteres como variables, y para reducir caracteres pensaba en que 10 fuese A, etc.
135  Foros Generales / Foro Libre / 2 juegos en el foro. en: 10 Diciembre 2024, 19:57 pm
El 1ero, típico, consistiría en:
- Todo usuario comienza teniendo 1 punto.
- Un usuario plantea un reto y un plazo.
- Los que quieran plantean soluciones.
- Terminado el plazo, cada usuario conocido (*) puede, durante 1 semana:
   - Decir que la solución de otro es correcta. O de otros.
   - Votar por una solución que no sea la suya.
- Cada usuario cuya solución haya sido catalogada como correcta, obtiene la mitad de puntos del catalogador que tenga más (éste no los pierde). Máximo 1 decimal.
- Cada usuario cuya solución haya sido votada, obtiene tantos puntos como tiene su votante (de nuevo, éste no los pierde).
- Si se vota por una se entiende que se la considera correcta y sólo tiene efecto el voto de favorita, no de correcta.
(*): Para evitar amiguismos o multicuentas.

Ejemplo:
- Hacer programa que genere cuentos en castellano de mínimo 20 palabras, antes del próximo mes.
- A postea una solución, B postea otra, C postea otra.
- Termina el plazo, empieza el plazo de votación, 1 semana.
- A dice que la solución de B es correcta y vota la de C.
- B tiene 1.5 puntos, C tiene 2.
- B vota la de A.
- A tiene 2.
- C vota la de A y dice que la de B es correcta.
- A 3, B 2, C 2.
- D dice que todas fueron correctas y vota la de C.
- A 3.5, B 2.5, C 3.
- D sigue con 1 porque no dió solución ni fue votado, etc.

Si se les ocurre cómo hacerlo mejor, díganme, yo intenté que sea justo y no muy complicado.

---------------------------------------------------------------------------------------------------------

El 2ndo sería:
- Todo usuario comienza teniendo 1 punto.
- Cada semana, los que quieran postean una conversación que se haya tenido con un chatbox sobre Informática. Que no se haya posteado antes.
- Durante la semana siguiente, cada usuario conocido puede:
   - Decir que conversación o conversaciones le gustaron. Que no sea la suya.
   - Votar por una conversación que no sea la suya.
- Cada usuario cuya conversación haya sido gustada, obtiene la mitad de puntos del catalogador que tenga más (éste no los pierde). Máximo 1 decimal.
- Cada usuario cuya conversación haya sido votada, obtiene tantos puntos como tiene su votante.

¿Hacen algo similar los dueños de los chatbots?
136  Programación / Programación General / Ayuda con las funciones de string de AS 1.0. en: 5 Diciembre 2024, 07:34 am
Intenté hacer una simulación de un sorteo pero ni con ayuda de GPT pude >__<

Se tiene una urna con 2 bolas blancas y una negra. 3 personas van sacando por turnos hasta que saquen la negra. Esa persona pierde. Yo quería ver si sacar 1ero da ventaja, desventaja, o si está favorecido el 2ndo, etc.

Código
  1. BaseUrna = "WWB";
  2. AlexPerdidas = 0;
  3. BartPerdidas = 0;
  4. CamiloPerdidas = 0;
  5. function Sortear () {
  6. // Preparar urna:
  7. Urna = BaseUrna;
  8. // Elección de la 1er persona, Alex:
  9. BolaDeAlexNro = random(3);
  10. if (BolaDeAlexNro == 2) {
  11. AlexPerdidas++;
  12. } else {
  13. BolaDeAlex = Urna.charat(BolaDeAlexNro);
  14. Parte1 = substring(Urna, 0, BolaDeAlexNro);
  15. trace(Parte1);
  16. Parte2 = substring(Urna, BolaDeAlexNro+1, Urna.length);
  17. trace(Parte2);
  18. Urna = Parte1+Parte2;
  19. // trace(Urna);
  20. // Elección de la 2nda persona, Bart:
  21. BolaDeBartNro = random(2);
  22. if (BolaDeBartNro == 1) {
  23. BartPerdidas++;
  24. } else {
  25. CamiloPerdidas++;
  26. }
  27. }
  28. }
La función se repite y los resultados se muestran en pantalla. Lo de Parte1 y Parte2 se lo copié a GPT pero no funciona bien.

Quiero que de Urna se remueva la bola que fue elegida. Es claro que en ese punto será una W, así que siempre quedaría WB, pero quiero aprender a hacerlo de este modo.

Es que no entiendo los métodos string, la ayuda de Flash carece de ejemplos en eso.

Además no vi algo que sirva para remover un caracter.

Citar
myString.concat(valor1,...valorN);
Argumentos

valor1,...valorN
Cero o más valores que se van a concatenar.

Descripción

Método; combina los valores especificados y devuelve una nueva cadena. Si es necesario, cada argumento valor se convierte en una cadena y se anexa, en orden, al final de la cadena.
No se entiende bien lo de ",...", imagino que es cualquier cantidad de valores, y los concatena, pero es más fácil hacer esto:
Concatenado = ""+Valor1+Valor2;
o:
Concatenado = String(Valor1)+Valor2;

Quizá la diferencia es que .concat modifica el valor. No:
Código:
BaseUrna = "ABC";
BaseUrna.concat("D");
trace(BaseUrna);
eso me da ABC.

No entiendo qué hace exactamente o qué ventaja tiene comparado con lo que dije.

Siguiente:
Citar
myString.slice(inicio, fin);
Argumentos

inicio: Un número que especifica el índice del punto de inicio del sector. Si inicio es un número negativo, el punto inicial se especifica desde el final de la matriz, donde -1 es el último elemento.

fin: Un número que especifica el índice del punto final del sector. Si no se especifica fin, el sector incluye todos los caracteres desde el inicio al final de la cadena. Si fin es un número negativo, el punto final se determina desde el final de la cadena, donde -1 es el último carácter.

Descripción
Método; extrae un sector o una subcadena del objeto String especificado, después la devuelve como una nueva cadena sin modificar el objeto String original. La cadena devuelta incluye el carácter inicio y todos los caracteres hasta (pero sin incluir) el carácter fin.

Código: Resultado
BaseUrna.slice(0, 0):
BaseUrna.slice(0, 1): A
BaseUrna.slice(0, 2): AB
BaseUrna.slice(0, 3): ABC
BaseUrna.slice(1, 1):
BaseUrna.slice(1, 2): B
BaseUrna.slice(2, 3): C
BaseUrna.slice(3, 3):
El final se nombra como si fuese +1 a lo que se quiere, no tiene mucho sentido. Si quiero del 0 al 2, debo decir del 0 al 3.

La cosa es que esto de cortar tiene poco, sólo es obtener parte de una cadena.

Citar
myString.split(delimitador);
Argumentos

delimitador: El carácter utilizado para delimitar la cadena.

Descripción

Método. divide un objeto String rompiendo la cadena cuando se produce el argumento delimitador especificado y devuelve las subcadenas en una matriz. Si no se especifica delimitador, la matriz devuelta contiene solamente un elemento: la propia cadena. Si el delimitador es una cadena vacía, cada carácter del objeto String se convierte en un elemento de la matriz.
No lo entiendo, lo pruebo.
BaseUrna.split(0): ABC
BaseUrna.split(1): ABC
BaseUrna.split(2): ABC
BaseUrna.split(3): ABC
No sé, no veo división, ni siquiera cambio. ¿Hay que especificar el caracter, no es un número?

Citar
myString.substr(inicio, longitud);
Argumentos

inicio: Un número entero que indica la posición del primer carácter de la subcadena que se está creando. Si inicio es un número negativo, el punto inicial se determina desde el final de la matriz, donde -1 es el último carácter.

longitud: El número de caracteres en la subcadena que se está creando. Si no se especifica longitud, la subcadena incluye todos los caracteres desde el inicio al final de la cadena.

Descripción

Método; devuelve los caracteres de una cadena desde el índice especificado en el argumento inicio, hasta el número de caracteres especificados en el argumento longitud.

Este lo he usado y lo entiendo, creo. Además es lo que me conviene usar, creo. Pero cómo.
Si la bola elegida es la 0, no necesito 2 partes, hago:
Urna = Urna.substr(1, Urna.length);

Si fuera la última, más o menos lo mismo:
Urna = Urna.substr(0, (Urna.length)-1);
pero eso no funciona:
Urna.substr(0, (Urna.length)-1):
Urna.substr(0, Urna.length: ABC
Urna.substr(1, (Urna.length)-1):
Urna.substr(1, Urna.length: BC

Sin los paréntesis tampoco. Ah, tenía mal escrito length a la derecha de los :, suelo escribir mal esa palabra, ahora sí:
Urna.substr(0, (Urna.length)-1): AB
Urna.substr(0, Urna.length: ABC
Urna.substr(1, (Urna.length)-1): BC
Urna.substr(1, Urna.length: BC

¿pero por qué el 3ero da BC en vez de B?
trace("Urna.substr(1, (Urna.length)-1): "+Urna.substr(1, (Urna.length)-1));
Ah, porque lo 2ndo es la cantidad de caracteres a obtener, no hasta cual. En este caso serán 2. Bien.

Y bueno, si se quiere remover un caracter intermedio, sí, en partes:
Parte1 = Urna.substr(0, X);
Parte2 = Urna.substr(BolaDeAlexNro+1, Y);

¿Está bien? Debo calcular X e Y.

En este caso, el número elegido es el 1. Entonces se quiere captar, en la Parte1, sólo el caracter 0. Entonces va 1. ¿Pero cual es la fórmula?
Si hubieran más elementos: ABCDE
Si se elige el 1, B, queremos obtener sólo A.
Si se elige 2, C, queremos AB.
Entonces la cantidad de números que queremos obtener es igual al número elegido:
Parte1 = Urna.substr(0, BolaDeAlexNro);

Ahora Y. Bueno, siempre se va a querer hasta el caracter final, así que es:
Parte2 = Urna.substr(BolaDeAlexNro+1, Urna.lenght);
lo escribí mal de nuevo >___< th, th, th, th, th, th...
Parte2 = Urna.substr(BolaDeAlexNro+1, Urna.length);

Así parece ok:
Código
  1. BaseUrna = "ABCD";
  2. AlexPerdidas = 0;
  3. BartPerdidas = 0;
  4. CamiloPerdidas = 0;
  5. function Sortear () {
  6. // Preparar urna:
  7. Urna = BaseUrna;
  8. // Elección de la 1er persona, Alex:
  9. BolaDeAlexNro = random(4);
  10. if (BolaDeAlexNro == 3) {
  11. AlexPerdidas++;
  12. } else {
  13. BolaDeAlex = Urna.charat(BolaDeAlexNro);
  14. Parte1 = Urna.substr(0, BolaDeAlexNro);
  15. // trace(Parte1);
  16. Parte2 = Urna.substr(BolaDeAlexNro+1, Urna.length);
  17. // trace(Parte2);
  18. Urna = Parte1+Parte2;
  19. trace(Urna);
  20. }
  21. }

Remueve A, B o C sin problema. No es necesario un if cuando sólo se quiere remover la parte 0.

Listo.

Citar
myString.substring(desde, hasta);
Argumentos

desde: Un número entero que indica la posición del primer carácter de la subcadena que se está creando. Los valores válidos para desde van de 0 a string.length - 1.

hasta: Un número entero que es 1 + el índice del último carácter de la subcadena que se está creando. Los valores válidos para hasta van de 1a string.length. Si no se especifica el argumento hasta, el final de la subcadena es el final de la cadena. Si desde es igual a hasta, el método devuelve una cadena vacía. Si desde es mayor que hasta, los argumentos se intercambian automáticamente antes de que se ejecute la función.

Descripción

Método; devuelve una cadena que consiste en los caracteres entre los puntos especificados por los argumentos desde y hasta.
Por ahora me cansé. Esa es la que me dijo GPT.

Citar
substring(cadena, índice, recuento);
Argumentos

cadena La cadena de la que extraer la nueva cadena.

índice El número del primer carácter que se va a extraer.

recuento El número de caracteres que se van a incluir en la cadena extraída, sin incluir el carácter de índice.

Descripción

Función de cadena; extrae parte de una cadena.
Esta es probablemente la que necesitaba. Como es distinta (no empieza con "variable."), no pensé que fuese la que buscaba. Que me sirva de lección xP

En fin, lamento el entrevero.
137  Programación / Python / Python falla en usar la ñ. en: 2 Diciembre 2024, 04:44 am
cuando le pongo ñ a charset no funciona:
Código
  1. charset = "abcdefghijklmnñopqrstuvwxyz"
  2. with open("passwords.txt", "w", encoding="utf-8") as txt :
  3.  for a in charset :
  4.    for b in charset :
  5.      for c in charset :
  6.        for d in charset :
  7.          txt.write(a + b + c + d + "\n")
¿qué hago para que funcione con ñ?

Citar
El problema puede deberse a cómo Python maneja la codificación al escribir en un archivo. Aunque estás especificando `encoding="utf-8"` al abrir el archivo, puede haber conflictos si el sistema en el que estás ejecutando el script no interpreta correctamente los caracteres extendidos, como la `ñ`.

Aquí tienes una solución que debería funcionar correctamente:

### Solución:

1. **Asegúrate de que tu archivo fuente esté guardado en UTF-8**. Si tu editor de texto no guarda el archivo fuente en UTF-8, la `ñ` podría no ser interpretada correctamente. En editores como VS Code, puedes configurar la codificación en UTF-8.

2. **Verifica que la consola/terminal interprete UTF-8**. Si estás ejecutando el código en una terminal que no maneja UTF-8, podría haber problemas al visualizar o procesar caracteres como la `ñ`.

3. **Código corregido:**

```python
# Definir el charset con la letra ñ
charset = "abcdefghijklmnñopqrstuvwxyz"

# Abrir el archivo en modo escritura, asegurando la codificación UTF-8
with open("passwords.txt", "w", encoding="utf-8") as txt:
    # Generar todas las combinaciones de 4 caracteres
    for a in charset:
        for b in charset:
            for c in charset:
                for d in charset:
                    # Escribir cada combinación en una nueva línea
                    txt.write(a + b + c + d + "\n")
```

4. **Verifica el archivo generado**. Tras ejecutar el código, abre el archivo `passwords.txt` con un editor que soporte UTF-8 para confirmar que las combinaciones con la `ñ` se generan correctamente.

### Qué hacer si sigue sin funcionar:

Si el problema persiste, puede ser útil probar estas opciones:

- **Forzar la codificación UTF-8 en tu entorno Python**. Asegúrate de que Python esté utilizando UTF-8 por defecto. Puedes agregar esta línea al inicio de tu script:

  ```python
  import sys
  sys.stdout.reconfigure(encoding='utf-8')
  ```

- **Revisar el entorno de ejecución**. Si estás en Windows, puedes configurar la consola para que use UTF-8 ejecutando este comando en la terminal antes de correr el script:

  ```cmd
  chcp 65001
  ```

### Explicación del problema:

La `ñ` es un carácter que no está en el conjunto básico ASCII. Si hay un desajuste en la codificación entre tu archivo fuente, el entorno Python o el archivo de salida, podría causar que la `ñ` no se procese correctamente. Al usar `encoding="utf-8"` y asegurarte de que todo tu entorno soporte UTF-8, deberías poder manejar la `ñ` sin problemas.
¿Se supone que en eso está la solución?

Lo que me sucede es que el archivo py se cierra enseguida y no se genera el archivo que quiero.
138  Programación / Programación General / Simulación de empuje. en: 1 Diciembre 2024, 10:29 am
En el siguiente video hay 2 pruebas.

En la 1era, cuando el personaje camina tiene 2 estados, y en uno es más ancho que en el otro, estira los pies hacia adelante. Eso hace que el barril sea empujado muchas veces en un mismo contacto, lo cual le da demasiada velocidad, está mal. El error ocurre porque en este caso el contacto se produjo cuando el personaje era menos ancho, luego se ensancha y entonces el programa sigue detectando que está tocando el barril, hasta que por fin se aleja suficiente.

En la 2nda prueba, el personaje no cambia al caminar, siempre tiene el mismo ancho, el movimiento del barril está bien, pero el personaje debería cambiar al caminar.

https://youtu.be/eWPQZnodI1U

¿Cómo logro que quede bien?

Puedo poner un ancho único. Que, sin importar el ancho del personaje, el contacto se produzca siempre a la misma distancia. Pero no me gusta eso.

Puedo poner que al ocurrir el hecho una variable cambie durante un tiempo, en el cual el barril no podrá ser empujado de nuevo. Tampoco me parece buena idea.

Busco una solución digamos lógica o realista. Si alguien va caminando, cuando adelanta la pierna tiene más ancho, entonces empuja algo que está más lejos. Si justo lo empuja cuando tiene las 2 piernas juntas, es como si lo empujara varias veces, pero ¿con menos fuerza? No sé, e intentando encontrar fallas cambié varias cosas así que algunas puede que hayan quedado mal.

El código en resumen es:
1- Cuando el personaje camina, se calcula su distancia con respecto al barril:
DistanciaPlayerBarril = ValorAbsoluto(PlayerX-BarrilX);
Las coordenadas que se consideran son los centros de los objetos, o sea, distancia entre el centro del personaje y el centro del barril.

2- Se calcula esto:
MinDistanciaSinChoque = PlayerAncho/2+14+0.2;
O sea, el ancho del personaje/2 + el ancho del barril/2 (da 14) y 0.2 que es lo que el personaje se moverá.
Es la mínima distancia a la que están sin chocar. Como el personaje se moverá 0.2, se agrega eso.

3- Se compara la distancia con eso, para detectar si el personaje tocará el barril o no:
if (DistanciaPlayerBarril<MinDistanciaSinChoque) {

4- Supongamos que habrá contacto, ya que es lo relevante aquí. En tal caso tengo esto:
// Determinar movimientos:
// MinDistanciaSinChoque -> mov 0.2, empuje 0.
// 0 -> mov 0, empuje 0.2.
MovimientoDelPers = DistanciaPlayerBarril*0.2/MinDistanciaSinChoque;
...la idea es que normalmente el personaje se mueva 0.2, pero si va a tocar el barril se mueva menos, y lo que reste se aplique a la velocidad del barril, en el siguiente paso del programa.
Entre más cerca estén, menos se moverá el personaje.

5- Aquí puse que el barril aumente siempre la misma velocidad independientemente de cuánto sea MovimientoDelPers, porque eso me daba problemas. Deberá mejorarse:
BarrilSpeed = BarrilSpeed+0.3;
...antes creo que tenía esto:
BarrilSpeed = BarrilSpeed+0.2-MovimientoDelPers;
Como el barril se detiene si su velocidad es muy poca, eso me daba problemas, creo que era así.

Creo que eso es todo. Luego se reduce la velocidad del barril debido a rozamiento, pero eso creo que ya está bien, ya pregunté aquí.


En Mario Bros, cuando Mario toca un caparazón de tortuga o similar, ésta adquiere más velocidad que la que él puede tener y además no tiene rozamiento, por eso en ese juego no ocurren estos problemas xP
139  Media / Multimedia / Ver video lentamente. en: 1 Diciembre 2024, 05:17 am
Uso el Windows Media Classic y si bien tiene esa función, no funciona en los videos que lo preciso, quizá debido al formato (asf, y cambiarle la extensión manualmente no lo soluciona).

Lo puedo subir a YT y tal vez ahí podría verlo lento, pero debe haber algo mejor.

Para Windows 7, ligero, y gratis.
140  Foros Generales / Sugerencias y dudas sobre el Foro / Advertencia (o casualidad) sobre el tema de Hason. en: 28 Noviembre 2024, 19:17 pm
Recién había encendido la PC, entré en el tema de Hason:

(no recomiendo entrar)

https://foro.elhacker.net/ingenieria_inversa/unpack_exe_enigma_protector_v5x-t522760.0.html;topicseen

y me apareció que la conexión era privada y YT dejó de funcionar, decía que no tenía Internet, pero el cartelito de Windows sí. Tuve que reinicia el PC y menos mal que sólo fue eso.

Tal vez entré demasiado pronto al foro, pero en fin, es sospechoso.


EDIT: Es más raro de lo que pensé, porque ese link dice algo de un exe, pero luego miré el link y es:
https://foro.elhacker.net/analisis_y_diseno_de_malware/virus_en_pagina_online_peliculas-t522758.0.html

El link ese que puse al inicio me apareció acá:
https://foro.elhacker.net/unread.html;all

¿Copié mal el link? ¿qué copié?

Ah, es otro tema de la misma sección, no sé por qué se copió ese.
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 [14] 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ... 57
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines