Por ejemplo si X es 3 e Y es 6 quiero esto:
112
233
456
Es decir, se reparte 9 entre 6 y lo que sobre se da a los 1eros colores.
El casillero 1 debe ser de color 1.
El 2 de color 1.
El 3, 2.
4, 2.
5, 3.
6, 3.
7, 4.
8, 5.
9, 6.
¿Cómo logro eso? X e Y pueden variar, claro.
Me dieron una supuesta solución en otro lado pero no pude hacerlo funcionar:
Citar
Para un tablero L×L y c colores llama:
N=L^2
a=floor(N/c) (parte entera de N/c)
r=mod(N,c) (resto de dividir N entre c)
Entonces el número de color que tienes que poner en la fija i, columna j, es:
- Si p<=r*(a+1), floor((p-1)/(a+1)+1
- Si p>r*(a+1), r+1+floor((p-r(a+1)-1)/a)
donde p=(i-1)*L+j
Mi código (no es sobre asignar colores sino "ModificacionesRequeridas", pero la idea es la misma):N=L^2
a=floor(N/c) (parte entera de N/c)
r=mod(N,c) (resto de dividir N entre c)
Entonces el número de color que tienes que poner en la fija i, columna j, es:
- Si p<=r*(a+1), floor((p-1)/(a+1)+1
- Si p>r*(a+1), r+1+floor((p-r(a+1)-1)/a)
donde p=(i-1)*L+j
Código
DibujosPorFila = 5; MaxCuadro = DibujosPorFila*DibujosPorFila; CuadraditosPorFila = 4; MaxCuadradito = CuadraditosPorFila*CuadraditosPorFila; DistintasMutaciones = Math.floor(MaxCuadro/CuadraditosPorFila); Resto = MaxCuadro%CuadraditosPorFila; on (release) { // Los dibujos serán como el de encima de este botón // y mutarán: Dibujo = 0; // Repetir para el dibujo 1, 2, etc: do { Dibujo++; // El dibujo a copiar no necesita ser modificado: if (Dibujo != _parent.ID) { Cuadradito = 0; // Repetir hasta que todo cuadradito se haya copiado, // por ahora no hay mutación: do { Cuadradito++; ColoraCopiar = new Color("_parent.Cuadradito"+Cuadradito); ColoraSustituirse = new Color("_level0.Dibujo"+Dibujo+".Cuadradito"+Cuadradito); ColoraSustituirse.setRGB(ColoraCopiar.getRGB()); } while (Cuadradito<_level0.MaxCuadradito); // De cada dibujo copia, variar cuadraditos al azar, // de 1 hasta CuadraditosPorFila, // aumentando por dibujo hacia derecha y abajo: // Repetir hasta que se haya variado esa cantidad... // de cuadraditos: CuadraditosModificados = 0; if (Dibujo <= _level0.Resto*(_level0.DistintasMutaciones+1)) { ModificacionesRequeridas = Math.floor((Dibujo-1)/(_level0.DistintasMutaciones+1))+1; } else { ModificacionesRequeridas = _level0.Resto+1+Math.floor((Dibujo-_level0.Resto(_level0.DistintasMutaciones+1)-1)/_level0.DistintasMutaciones); } trace(Dibujo+": "+ModificacionesRequeridas); // Cosas que no vienen al caso. } } while (Dibujo<_level0.MaxCuadro); }
Resultado:
(Nro de casillero, número asignado (que puede entenderse como color)):
2: 1
3: 1
4: 1
5: 1
6: 1
7: 1
8: 3
9: 3
10: 3
11: 3
12: 3
13: 4
14: 4
15: 4
16: 4
17: 4
18: 4
19: 5
20: 5
21: 5
22: 5
23: 5
24: 5
25: 6
Necesito que sea:
Del 1 al 7: Son de 1.
De 8 a 13: De 2.
De 14 a 19: De 3.
De 20 a 25: De 4.
11111
11222
22233
33334
44444