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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Ayuda con las funciones de string de AS 1.0.
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con las funciones de string de AS 1.0.  (Leído 1,272 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.451


Hackentifiko!


Ver Perfil
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.


« Última modificación: 5 Diciembre 2024, 07:36 am por Tachikomaia » En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.524


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Ayuda con las funciones de string de AS 1.0.
« Respuesta #1 en: 5 Diciembre 2024, 13:25 pm »

Hola!

En Wikipedia, se muestra el link a la referencia de AS2 (muchas cosas de AS2 son identicas a AS1). El mismo ya está archivado en archiver.org por ser una tecnología obsoleta: https://web.archive.org/web/20130131044759/http://help.adobe.com/en_US/AS2LCR/Flash_10.0/help.html?content=Part2_AS2_LangRef_1.html

Saludos!

PD: En Google también puedes hallar referencias a la documentacion de AS en pdf. Por ej.: http://103.203.175.90:81/fdScript/RootOfEBooks/E%20Book%20collection%20-%202024%20-%20G/CSE%20%20IT%20AIDS%20ML/Macromedia.Flash.MX.2004.ActionScript.Reference.Guide.pdf


En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.174



Ver Perfil
Re: Ayuda con las funciones de string de AS 1.0.
« Respuesta #2 en: 5 Diciembre 2024, 15:35 pm »

Citar
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.

Por probabilidad no debería haber diferencia, pero por estadística puede variar algo dependiendo, por ejemplo hay personas que prefieren o inconscientemente eligen la bola de al fondo, centro, derecho, izquierdo, etc pero eso ya es otra otra cosa

Citar
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.

No funciona bien porque el viejo substring trabaja con el número de caracter (el primer caracter tendrá el número 1), no con el índice el caracter (el primer caracter tendrá el índice 0)

Lo correcto sería:

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, 1, BolaDeAlexNro);
  15. trace(Parte1);
  16. Parte2 = substring(Urna, BolaDeAlexNro+2, 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. }

También podrías utilizar String.subtring (o mejor String.substr que es más parecido) que es muy similar pero trabaja con índices, subtring es para Flash4 y la documentación de Flash5 dice que está desestimada, que mejor es usar String.subtring.

(Por el mensaje de MCKys Argentina) Yo tengo entendido de que tienes el manual de ActionScript que acompaña a Flash5, al menos yo he visto que haces referencia a ese manual en varios de tus mensajes, si no es así aquí lo tienes:

Guía de Consulta de ActionScript 1.0 (Flash5 Español):
https://mega.nz/file/Z9YnTZZC#YESSiH8Y_gJRwYfqOgwsIqCvr6JGGphV0AmgjiEWT0Q

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

Como en muchos lenguajes clásicos los String son inmutables (no puedes modificar sus caracteres individual y directamente), lo que puedes hacer es convertirlos o crear directamente un Array, o como muestra tu ejemplo anterior tomar partes y reasignar toda la String

Entre los métodos que tienes para modificar directamente un Array con una instrucción está Array.splice:

Código
  1. BaseUrna = ["W", "W", "B"];
  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. urna.splice(BolaDeAlexNro, 1);
  15. // trace(Urna);
  16. // Elección de la 2nda persona, Bart:
  17. BolaDeBartNro = random(2);
  18. if (BolaDeBartNro == 1) {
  19. BartPerdidas++;
  20. } else {
  21. CamiloPerdidas++;
  22. }
  23. }
  24. }

Nota: Quería poner al inicio:

Código
  1. BaseUrna = "WWB";
  2. BaseUrna = BaseUrna.split(""):
  3.  

Para obtener el Array desde el String de forma sencilla pero veo que Flash5 no soporta poner una String vacia "" como separador aunque la documentación diga que si se puede, con Flash6 y superiores no hay problema.

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.

",..." Si, eso implica que ese método soporta más argumentos, Si quiero formar la palabra "pepe grillo" puedo hacer: "pep".concat("e", " ", "gril", "lo"). Como todo hay varias formas de lograr algo en programación, cual utilizar dependerá de cada quien o el grado de legibilidad que queira obtener, por ejemplo puede ser mejor usar concat si estás trabajando con números pero quieres concatenarlos, usar + puede llegar ser más confuso o puede que termines sumando si no te fijas bien. Y no, no modifica un String (son inmutables) solo devuelve un nuevo String con el cambio realizado.

Citar
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?

Si, tienes que ser un String el delimitador, también ya comenté que hay un problema con Flash5 y no puedes convertir un String en un Array si el delimitador es un String vacío ( String.split("") )

---
Todo lo demás me parece que ya lo has resuelto, sino solo comenta

En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 1.451


Hackentifiko!


Ver Perfil
Re: Ayuda con las funciones de string de AS 1.0.
« Respuesta #3 en: Hoy a las 03:56 »

Intenté, ahora, usar la que se supone que remueve el caracter especificado (no el de la posición especificada):
Nota: Fija iba a ser un número pero como no funciona, probando lo cambié a un string:
Código
  1. Fija = "12345";
  2. // El que será probado 1ero:
  3. Candidato = 1;
  4. // Mensaje que se mostrará en pantalla:
  5. Respuesta = "A "+Fija+" se le quita el caracter o grupo C. Asignar un valor a C para que luego del proceso, "+Fija+" < C. Se recomienda... ";
  6. // Se repite en F2:
  7. function ProbarCandidato () {
  8. trace ("Probando el Candidato "+Candidato);
  9. // Ojo que si Candidato tiene largo 2 se haría otra cosa:
  10. NuevaFija = Fija.split(Candidato);
  11. trace ("NuevaFija: "+NuevaFija);

Eso es parte del código, que me da esto:
Probando el Candidato 1
NuevaFija: ,2345
No se logró el objetivo.
Candidato fue modificado, es 2
Probando el Candidato 2
NuevaFija: 1,345
No se logró el objetivo.
Candidato fue modificado, es 3
Probando el Candidato 3
NuevaFija: 12,45

Según veo, es un array, de hecho la descripción dice que genera uno, ok. ¿Y lo puedo convertir en una cadena usando .join? Veo que no, por lo que dijo EdePC. ¿Entonces en este caso deberé usar un while?
« Última modificación: Hoy a las 03:58 por Tachikomaia » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines