Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: unit3ro en Diciembre 15, 2015, 08:08:04 PM

Título: Generar todas las combinaciones posibles
Publicado por: unit3ro en Diciembre 15, 2015, 08:08:04 PM
Hola comunidadMe he visto en la necesidad de solicitar la ayuda de ustedes, pues me encuentro atascado en un script que necesito.Adjunto dejo el codigo, no esta probado y seguro tiene algunas palabras mal escritas, pero es la idea que tengo. en los comentarios describo el problema plateado esta en la funcion "generarLibros", no doy con los bucles esos para repetir cada revision de datos. No se si trabajar con string es la mejor manera, cualquier consejo me vendria muy bien.Una ayudita por favor.
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

public class generadordelibros : MonoBehaviour {
/*las letras seria lo encerrado en comas (cada letra seguida de numero)y las hojas serian cada
    parte del string separado por slash (/), mas adelante se crearan arrays de strings a parir
    de este usando string.split
    */
private string strData = "a1,a2,c1,z2/d6,f6,s4/s5,r2,k6"

public struct libro {      
   public hoja[] hojas;
   public libro(hoja[] hojas) {  
      this.hojas = hojas;
   }
}
public class hoja {      
   public string[] letras;
}

void Start () {
   
   hojas = procesarHojas(strData);
   libros = generarLibros(hojas);
}
private hoja[] procesarHojas(string strData)  {

   hoja[] hojasTemp = new hoja[strData.Length];
        //separar cada hoja por (/)
   strData = strData.Split(new char[] {'/'});
   
   for(int s=0; s<strData.Length; s++) {
      
      hoja nuevaHoja = new hoja();
            //separar cada letra por (,)
      nuevaHoja.letras = strData.Split(new char[] {','});
      hojasTemp = nuevaHoja;
   }
   return hojasTemp;
}
public libro[] generarLibros(string[] hojas) {
   
   List<libro> libros = new List<libro>();
      
   for (int k; k<hojas.Length; k++){
      /*por cada hoja comparar las letras dentro de ella con
      las de dentro de cada hoja en cada libro, si existe almenos
      una crear otro libro y añadirle las hojas, si no existen en el
      actual libro (ni siguiera una) añadirlas al libro. la idea es queue
      se generen todas las combinaciones posibles de libros para que cada
      grupo de hojas esten en libros diferentes sin repetirse en el mismo
      libro.
      */         
   }
   return libros.ToArray();
}
}
 
Título: Generar todas las combinaciones posibles
Publicado por: unit3ro en Diciembre 18, 2015, 05:18:35 PM
Nadie?
Título: Generar todas las combinaciones posibles
Publicado por: Braltor en Diciembre 18, 2015, 05:30:18 PM
no se entiende bien lo que quieres hacer, parece que estas haciendo un parser, que tienes los grupos de páginas en una cadena y cada grupo forma un libro. es eso?
Título: Generar todas las combinaciones posibles
Publicado por: unit3ro en Diciembre 18, 2015, 05:50:45 PM
He hecho el script nuevamente y lo probe, este lee a partir de un archivo y crea las hojas/items, pero no puede crear los libros y almacenarles las hojas.
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

//=================================//
public class BooksGenerator3: MonoBehaviour {

public TextAsset TextData = null;
private string[] strData; // = "book1+102+M7,M8,M9,I15,I16,I17,I18,J8,J9,J10/book2+103+I14,I15,I16,I17,V14,V15,V16,V17,V18/";

[System.Serializable]
public class ITEM {      
   public string[] itemData = new string[2];
   public string[] words;
}
[System.Serializable]
public class BOOK {      
   public ITEM[] items;
}   
public BOOK[] inventory;
public ITEM[] items;

//=================================//
void Start () {
   
   strData = TextData.text.Split(new char[] {'/'});
   items = processItems(strData);
   inventory = generateBooks(items);
   
   for(int x=0; x<inventory.Length; x++) {
      
      print("curBook: " + inventory
  • .ITEM.itemData);
   }      
}
//=================================//
public ITEM[] processItems(string[] strData)  {
   
   ITEM[] tempItems = new ITEM[strData.Length];      
   
   for(int s=0; s<strData.Length; s++) {
      string[] curData = strData.Split(new char[] {'+'});
   
      ITEM newItem = new ITEM();
      newItem.itemData[0] = curData[0];
      newItem.itemData[1] = curData[1];
      newItem.words = curData[2].Split(new char[] {','});
      tempItems = newItem;
      
   }
   return tempItems;
}
//=================================//
public BOOK[] generateBooks(ITEM[] Items) {

   ArrayList firstBooks = new ArrayList();

   for(int i=0; i<Items.Length; i++) {         
      BOOK tempBook = new BOOK();
      tempBook.items = Items;
      firstBooks.Add(tempBook);
   }
   return firstBooks.ToArray(typeof(BOOK)) as BOOK[];   
}
}
Título: Generar todas las combinaciones posibles
Publicado por: Braltor en Diciembre 18, 2015, 06:01:34 PM
Debug.Log a la lata!
Título: Generar todas las combinaciones posibles
Publicado por: unit3ro en Diciembre 18, 2015, 06:57:59 PM
Lo se pero tengo tres dias en eso, y no logro dar con la solucion.El problema esta aqui cuando quiero almacenar el item a un librolibro temporal creado para despues guardarlo en el arraylist de libros 
BOOK tempBook = new BOOK();
tempBook.items[i] = Items[i];
Título: Generar todas las combinaciones posibles
Publicado por: francoe1 en Diciembre 18, 2015, 07:42:40 PM
El Problema es que nunca le dijiste al arreglo ÍTEMS que tamaño tenia, no lo inicializamos...Posible Solución...  
public BOOK[] generateBooks(ITEM[] Items) 
{
ArrayList firstBooks = new ArrayList();
    int ItemsLength = Items.Length;
   
for(int i=0; i<Items.Length; i++)
{   
    BOOK tempBook = new BOOK();
    if(i == 0)
    {
        //Inicializamos ítems.
        tempBook.items = new ITEM[ItemsLength];
    }
   tempBook.items = Items;
   firstBooks.Add(tempBook);
}

return firstBooks.ToArray(typeof(BOOK)) as BOOK[];   
}
Saludos..
Título: Generar todas las combinaciones posibles
Publicado por: Jorge Alejandro en Diciembre 19, 2015, 02:19:17 PM
Aqui esta un codigo que esta en C++ pero espero que guiandote por ahi te valla bien pues es para generar convinaciones desde un string leido:#include <cstdio>
#include <string>#define RANG 30
#define p (1 << lW)
using namespace std;int lWz;
string S;
char W[RANG];main() {
    freopen ("AC.in", "r", stdin);
    freopen ("AC.ou", "w", stdout);    scanf ("%s\n", W);    lW = strlen (W);
    printf ("%d\n", p - 1);
    for (int i = 1; i < p; i++) {
        S = "";
        for (int j = 0; j < lW; j++)
            if (i & 1 << j)
                S += W[j];
        printf ("%s\n", S.c_str());
    }
}
Título: Generar todas las combinaciones posibles
Publicado por: Braltor en Diciembre 19, 2015, 08:00:10 PM
en c++? jajajajajaj