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
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.
BaseUrna = "WWB"; AlexPerdidas = 0; BartPerdidas = 0; CamiloPerdidas = 0; function Sortear () { // Preparar urna: Urna = BaseUrna; // Elección de la 1er persona, Alex: BolaDeAlexNro = random(3); if (BolaDeAlexNro == 2) { AlexPerdidas++; } else { BolaDeAlex = Urna.charat(BolaDeAlexNro); Parte1 = substring(Urna, 0, BolaDeAlexNro); trace(Parte1); Parte2 = substring(Urna, BolaDeAlexNro+1, Urna.length); trace(Parte2); Urna = Parte1+Parte2; // trace(Urna); // Elección de la 2nda persona, Bart: BolaDeBartNro = random(2); if (BolaDeBartNro == 1) { BartPerdidas++; } else { CamiloPerdidas++; } } }
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: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.
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);
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.
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.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.
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.
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
BaseUrna = "ABCD"; AlexPerdidas = 0; BartPerdidas = 0; CamiloPerdidas = 0; function Sortear () { // Preparar urna: Urna = BaseUrna; // Elección de la 1er persona, Alex: BolaDeAlexNro = random(4); if (BolaDeAlexNro == 3) { AlexPerdidas++; } else { BolaDeAlex = Urna.charat(BolaDeAlexNro); Parte1 = Urna.substr(0, BolaDeAlexNro); // trace(Parte1); Parte2 = Urna.substr(BolaDeAlexNro+1, Urna.length); // trace(Parte2); Urna = Parte1+Parte2; trace(Urna); } }
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.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.
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 xPArgumentos
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.
En fin, lamento el entrevero.