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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Distribuir cosas en una tabla ¿división básica?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Distribuir cosas en una tabla ¿división básica?  (Leído 759 veces)
Tachikomaia


Conectado Conectado

Mensajes: 1.308


Hackentifiko!


Ver Perfil
Distribuir cosas en una tabla ¿división básica?
« en: 11 Junio 2024, 01:02 am »

Si tengo una tablero de XxX casilleros y quiero distribuir Y colores ¿cómo defino de qué color es cada casillero?
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):
Código
  1. DibujosPorFila = 5;
  2. MaxCuadro = DibujosPorFila*DibujosPorFila;
  3. CuadraditosPorFila = 4;
  4. MaxCuadradito = CuadraditosPorFila*CuadraditosPorFila;
  5. DistintasMutaciones = Math.floor(MaxCuadro/CuadraditosPorFila);
  6. Resto = MaxCuadro%CuadraditosPorFila;
  7. on (release) {
  8. // Los dibujos serán como el de encima de este botón
  9. // y mutarán:
  10. Dibujo = 0;
  11. // Repetir para el dibujo 1, 2, etc:
  12. do {
  13. Dibujo++;
  14. // El dibujo a copiar no necesita ser modificado:
  15. if (Dibujo != _parent.ID) {
  16. Cuadradito = 0;
  17. // Repetir hasta que todo cuadradito se haya copiado,
  18. // por ahora no hay mutación:
  19. do {
  20. Cuadradito++;
  21. ColoraCopiar = new Color("_parent.Cuadradito"+Cuadradito);
  22. ColoraSustituirse = new Color("_level0.Dibujo"+Dibujo+".Cuadradito"+Cuadradito);
  23. ColoraSustituirse.setRGB(ColoraCopiar.getRGB());
  24. } while (Cuadradito<_level0.MaxCuadradito);
  25. // De cada dibujo copia, variar cuadraditos al azar,
  26. // de 1 hasta CuadraditosPorFila,
  27. // aumentando por dibujo hacia derecha y abajo:
  28. // Repetir hasta que se haya variado esa cantidad...
  29. // de cuadraditos:
  30. CuadraditosModificados = 0;
  31. if (Dibujo <= _level0.Resto*(_level0.DistintasMutaciones+1)) {
  32. ModificacionesRequeridas = Math.floor((Dibujo-1)/(_level0.DistintasMutaciones+1))+1;
  33. } else {
  34. ModificacionesRequeridas = _level0.Resto+1+Math.floor((Dibujo-_level0.Resto(_level0.DistintasMutaciones+1)-1)/_level0.DistintasMutaciones);
  35. }
  36. trace(Dibujo+": "+ModificacionesRequeridas);
  37. // Cosas que no vienen al caso.
  38. }
  39. } while (Dibujo<_level0.MaxCuadro);
  40. }

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


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