Tengo datos sobre 7 escaleras:
- Por dónde el personaje tocó 1ero cada una.
- Cuántas veces tocó cada una desde la izquierda.
- Desde la derecha.
- Desde arriba.
- Por dónde tocó cada una por última vez.
No hay desde abajo.
Entonces las variables de la escalera 1 pueden ser:
Escalera1First = "Izq";
Escalera1Izq = 3;
Escalera1Der = 0;
Escalera1Arr = 1;
Escalera1Last = "Arr";
Las otras 6 escaleras tienen 5 variables así también. Pregunté en un foro cómo hacerlo con arrays pero no me respondieron y me sale mejor así. Igual ese no es el problema.
Bueno, ahora tengan en cuenta que:
- L1 y L2 son lados (izq, der, arr) y pueden ser iguales o no.
- X e Y son cantidades (0, 1, >0, >1, que corresponden con nunca, sólo 1 vez, alguna vez, más de 1 vez) y pueden ser iguales o no.
- SC es un símbolo comparador (==, <, >, <=, >=, !=).
A partir de los datos mencionados, quiero que el programa me diga:
- Cuántas escaleras fueron contactadas 1ero desde L1.
- Cuántas escaleras fueron contactadas X veces.
- Cuántas escaleras fueron contactadas sólo desde L1 (L2==0 y L3==0).
- Cuántas escaleras fueron contactadas X veces desde L1.
- Cuántas escaleras fueron contactadas por última vez desde L1.
- La cantidad de escaleras contactadas cuyo 1st == last.
- La cantidad de escaleras contactadas cuyo 1st != last.
- La cantidad de escaleras que por L1 fueron contactadas SC que por L2 (en este caso L1 y L2 son distintos, o sea si L1 es izq L2 no).
L1, X y SC deben sustituirse por todos los valores posibles, entonces sería:
- Cuántas escaleras fueron contactadas 1ero desde la izq.
- Cuántas escaleras fueron contactadas 1ero desde la der.
- Cuántas escaleras fueron contactadas 1ero desde arr.
- Cuántas escaleras fueron contactadas sólo 1 vez.
- Cuántas escaleras fueron contactadas más de 1 vez.
etc.
Lo de "nunca" y "alguna vez" no lo puse porque todas las escaleras fueron contactadas alguna vez, sino ni les pondría sus datos, pero esas cantidades son válidas en casos como:
- Cuántas escaleras nunca fueron contactadas desde la izq (contactadas 0 veces desde izq).
- Cuántas escaleras fueron contactadas alguna vez desde la der.
Pero también quiero que cuente mezclas de 2 cosas y otras que incluyan la palabra no, estas:
- La cantidad que fueron contactadas 1ero desde no L1.
- La cantidad que fueron contactadas 1ero desde L1 o L2.
- La cantidad que fueron contactadas 1ero desde L1 o fueron contactadas X veces.
- La cantidad que fueron contactadas 1ero desde L1 y fueron contactadas X veces.
- La cantidad que fueron contactadas 1ero desde L1 o sólo fueron contactadas desde L2.
- La cantidad que fueron contactadas 1ero desde L1 o fueron contactadas X veces desde L2.
- La cantidad que fueron contactadas 1ero desde L1 y fueron contactadas X veces desde L2.
- La cantidad que fueron contactadas 1ero desde L1 o por última vez desde L2.
- La cantidad que fueron contactadas 1ero desde L1 y por última vez desde L2.
- La cantidad que fueron contactadas 1ero desde L1 o cuyo 1st == last.
- La cantidad que fueron contactadas 1ero desde L1 o cuyo 1st != last.
- La cantidad que fueron contactadas 1ero desde L1 y cuyo 1st == last.
- La cantidad que fueron contactadas 1ero desde L1 y cuyo 1st != last.
- La cantidad que fueron contactadas 1ero desde L1, y que por L2 fueron contactadas SC que por L3 (L2 y L3 son distintos).
- Cuántas escaleras fueron contactadas no X veces.
- Cuántas escaleras fueron contactadas X o Y veces.
- Cuántas escaleras fueron contactadas X veces o sólo desde L1.
- Cuántas escaleras fueron contactadas X veces y sólo desde L1.
- Cuántas escaleras fueron contactadas X veces, o desde L1 Y veces.
- Cuántas escaleras fueron contactadas X veces, y desde L1 Y veces.
- Cuántas escaleras fueron contactadas X veces, o por última vez desde L1.
- Cuántas escaleras fueron contactadas X veces, y por última vez desde L1.
- Cuántas escaleras fueron contactadas X veces, o cuyo 1st == last.
- Cuántas escaleras fueron contactadas X veces, y cuyo 1st == last.
- Cuántas escaleras fueron contactadas X veces, o cuyo 1st != last.
- Cuántas escaleras fueron contactadas X veces, y cuyo 1st != last.
- Cuántas escaleras fueron contactadas X veces, y que por L1 fueron contactadas SC que por L2 (L1 y L2 son distintos).
Y siguen las combinaciones, se habrán dado una idea de que son muchas cosas, sería mucho código, que no quiero escribir, pero aprender a que programas generen los códigos que quiero me interesa.
¿Cómo lo hago?
Lo que tenía hecho de estos conteos, programando yo uno por uno es:
// Programa para contar cosas...
// relativas a contactos con escaleras.
// 1 condición:
function ContarPriIzq () {
PriIzq++;
PriIzqoDer++;
PriIzqoArr++;
}
function ContarPriDer () {
PriDer++;
PriIzqoDer++;
PriDeroArr++;
}
function ContarPriArr () {
PriArr++;
PriIzqoArr++;
PriDeroArr++;
}
// Escalera 1:
Escalera1First = "Izq";
Escalera1Izq = 3;
Escalera1Der = 0;
Escalera1Arr = 0;
Escalera1Last = "Izq";
// 2:
Escalera2First = "Der";
Escalera2Izq = 0;
Escalera2Der = 2;
Escalera2Arr = 0;
Escalera2Last = "Der";
// 3:
Escalera3First = "Izq";
Escalera3Izq = 1;
Escalera3Der = 0;
Escalera3Arr = 0;
Escalera3Last = "Izq";
// 4:
Escalera4First = "Der";
Escalera4Izq = 2;
Escalera4Der = 1;
Escalera4Arr = 1;
Escalera4Last = "Izq";
// 5:
Escalera5First = "Arr";
Escalera5Izq = 1;
Escalera5Der = 0;
Escalera5Arr = 1;
Escalera5Last = "Izq";
// 6:
Escalera6First = "Der";
Escalera6Izq = 0;
Escalera6Der = 1;
Escalera6Arr = 0;
Escalera6Last = "Der";
// 7:
Escalera7First = "Izq";
Escalera7Izq = 1;
Escalera7Der = 0;
Escalera7Arr = 0;
Escalera7Last = "Izq";
//
Escalera = 0;
do {
Escalera++;
// Resumen:
Res = "Escalera"+Escalera;
// Contar escaleras contactadas 1ero por (lado):
eval("ContarPri"+eval(Res+"First"))();
Contactos = eval(Res+"Izq")+eval(Res+"Der")+eval(Res+"Arr");
if (Contactos == 1) {
// Contar escaleras contactadas sólo 1 vez:
OneTime++;
} else {
// Más de 1 vez:
VariousTimes++;
}
// Contar escaleras que por un lado no fueron contactadas,
// o sólo 1 vez, o más de 1 vez:
Res2 = eval(Res+"Izq");
if (Res2 == 0) {
// nunca contactadas por la izq:
Izq0++;
} else if (Res2 == 1) {
// que por la izq sólo fueron contactadas 1 vez:
Izq1++;
} else {
// q por la izq fueron contactadas más de 1 vez:
IzqX++;
}
Res2 = eval(Res+"Der");
if (Res2 == 0) {
// nunca contactadas por la Der:
Der0++;
} else if (Res2 == 1) {
// que por la Der sólo fueron contactadas 1 vez:
Der1++;
} else {
// q por la Der fueron contactadas más de 1 vez:
DerX++;
}
Res2 = eval(Res+"Arr");
if (Res2 == 0) {
// nunca contactadas por Arr:
Arr0++;
} else if (Res2 == 1) {
// que por Arr sólo fueron contactadas 1 vez:
Arr1++;
} else {
// q por Arr fueron contactadas más de 1 vez:
ArrX++;
}
} while (Escalera<7);