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

 

 


Tema destacado:


  Mostrar Mensajes
Páginas: [1] 2
1  Programación / Programación General / Re: GC overhead limit excedeed (java heap space excedida) [ECLIPSE] en: 29 Abril 2018, 22:13 pm
Solo  he mirado el código por encima, y...
...en cuanto he visto que tratas de crear permutaciones y que el tamaño de palabra le dejas hastas 26 caracteres... me basta.

Ahora te pregunto: serías capaz de decirme cuantas permutaciones totales resultan para un alfabeto de 26 letras + 10 cifras (un alfabeto de 36 caracteres), para palabras de 26 caracteres de largo?. Y una vez calculado el número de permutaciones, multiplícalo por 26, para saber los bytes que ocupará en memoria/disco...

Cuando me digas el resultado, y me cuentes que pretendes que quepa en la memoria de tu equipo, confío que tú mismo entiendas la raíz del problema...

Pásate por este hilo, para responder a tus preguntas y hacer algo eficaz.
https://foro.elhacker.net/abril_negro/abril_negro_spok_simple_production_of_keys-t468239.10.html



Justo venía a decir que el problema era que no me había parado a pensar en el número de combinaciones posibles. Ya lo solucioné así que se puede cerrar. Gracias!
2  Programación / Programación General / GC overhead limit excedeed (java heap space excedida)[SOLUCIONADO] en: 29 Abril 2018, 14:15 pm
Buenas, estoy trabajando en un problema el cual ya tengo resulto y funcionando con instancias pequeñas, pero al cual cuando le paso un fichero más grande no termina de ejecutarse, acaba saltando un error de "GC overhead limit excedeed" y por más que le aumento la memoria a eclipse sigue fallando, además de que me he puesto la barrita esta en la que ves el heap space que tienes y nunca llega ni a la mitad, y me está molestando un poquito ya porque me estoy quedando atascado aquí cuando lo difícil era resolver el problema. Pongo aquí el código y el error que me dió a ver si alguien puede ayudarme, ¿quizá el problema está en los objetos que creo en la función listPermutations?

He puesto en negrita las líneas que saltan error y donde creo que debe estar el problema

Error:

Código:
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.util.Arrays.copyOf(Unknown Source)
at java.util.ArrayList.toArray(Unknown Source)
at java.util.ArrayList.<init>(Unknown Source)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:117)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.calculatePossibilities(HiddenNumbers.java:59)
at SegundoReto.HiddenNumbers.calculateNumbers(HiddenNumbers.java:45)
at SegundoReto.HiddenNumbers.<init>(HiddenNumbers.java:29)
at SegundoReto.HiddenNumbers.main(HiddenNumbers.java:130)

Y aquí el código:

Código:
package SegundoReto;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class HiddenNumbers {
private String inputFile;
private Scanner reader;
private FileReader fileReader;
private List<Integer> numeros = new ArrayList<Integer>();
private ArrayList<Integer> resultados;
private BufferedWriter writer;

public HiddenNumbers(String fileName) throws IOException {
this.inputFile = fileName;
try {
fileReader = new FileReader(inputFile);
reader = new Scanner(new File(inputFile));
writer = new BufferedWriter(new FileWriter("src/output.txt"));
calculateNumbers();

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public void calculateNumbers() throws IOException {
int limit = Integer.parseInt(reader.nextLine());
for (int i = 1; i <= limit; i++) {
resultados = new ArrayList<Integer>();
int k = 1;
String currentWord =  reader.nextLine();
if (currentWord.length() > 26 | currentWord.length() < 2) System.out.println("Error.La palabra solo puede tener una longitud entre 2 y 26");
else {
writer.write("Case #" + i + ": " + calculatePossibilities(currentWord, k));
writer.newLine();
 }
}
System.out.println("Programa finalizando..");
writer.close();
reader.close();
}

public int calculatePossibilities(String palabra, int k) {
int valor = 0;
for (int i=0; i<palabra.length();i++) {
numeros.add(i);
}
List<List<Integer>> myLists = listPermutations(numeros);

   for (List<Integer> al : myLists) {
    if (al.get(0) == 0) {
           continue;
       }
   
    resultados.add(calculateValue(al));
    /**
       String appender = "";
       for (Integer i : al) {
           System.out.print(appender + i);
           appender = "";
       }
       System.out.println();
       **/
   }
   valor = calculateMinMax(resultados);
   return valor;
}

public int calculateMinMax(ArrayList<Integer> results) {
int max = Collections.max(results);
int min = Collections.min(results);
//System.out.println("El máximo es: " + max + " y el mínimo es " + min);
return (max-min);
}

public int calculateValue(List<Integer> lista) {
System.out.println("La lista es: " + lista + " y tiene un tamaño de " + lista.size());
int exponente= lista.size()-1;
int base = lista.size();
int valor = 0;
//System.out.println("La base es :" + base + " y el exponente es " + exponente);
for (int i = 0;i<lista.size();i++) {
//System.out.println("Vamos a multiplicar " + lista.get(i) + " por " + base + " elevado a " + exponente);
valor += lista.get(i) * (int) Math.pow(base, exponente);
exponente--;
}
System.out.println("Uno de los posibles valores para " + lista + " es " + valor);
return valor;
}

public static List<List<Integer>> listPermutations(List<Integer> list) {

   if (list.size() == 0) {
       List<List<Integer>> result = new ArrayList<List<Integer>>();
       result.add(new ArrayList<Integer>());
       return result;
   }

   List<List<Integer>> returnMe = new ArrayList<List<Integer>>();

   Integer firstElement = list.remove(0);

  [b] List<List<Integer>> recursiveReturn = listPermutations(list);[/b]
   for (List<Integer> li : recursiveReturn) {
       for (int index = 0; index <= li.size(); index++) {
           [b]List<Integer> temp = new ArrayList<Integer>(li);[/b]
           temp.add(index, firstElement);
           returnMe.add(temp);
       }

   }
   return returnMe;
}



public static void main(String[] args) throws IOException {

HiddenNumbers hiddenNumbers = new HiddenNumbers("src/testInput2.txt");
}

}

Y por si alguno lo puede probar en su equipo, aquí les dejo al fichero que le estoy pasando al programa para que trabaje con el:

Citar
100
cojhn
qkflsczuantb
qswagdzcpxe
dxwupsqhknfciozgbrtjma
wjxgnyzvbakimqfdt
qmyf
ma
mvongxtqdypsbfjzlhruc
bfujhpnxdgyilowcrqkm
mpuzgkwe
vd
bxdpcirwkvanzmefogsyj
alejmqt
urmnskcjhl
ogqmnte
mqoldkhwfryjutpv
nupolktzdmsv
kvxoecmgnrzuayptjidbwl
cyafdkgivrxpeujhozbm
htfdxycnkserjiz
kxypedsbvhzgfuoqi
htlfusmrvadckgenxiwbzqj
qcjktbhywnoxslrfauzdepmvg
obewgiahkctxmlpsjfnv
fickmtolqndzwvpasreuxb
hxptymkzgbwanvcjedfqoiursl
kogxc
sgomyxhda
lkspxtcweziybaqovhurjfgd
xiokcnydbmjqvu
yxkdanuzwmlerihjcvqpfstb
yneltcsbvwqukdagfjmzx
ofnhgquxiyvwck
ywxzmuvalbscdk
sdp
kozubhaepcw
nbiqztdj
saonctfgjdbkqu
yqomxjedrztbwislvuanphcf
lchrn
hmovs
dfpxhelagvcmoyzbukr
bwmfn
uv
ukbvzfgsnlhxe
rpfhaxoisblezqwydgcuk
cmnjgh
sjx
ivn
kxqwvrlsthfjbngcd
fdx
qkaublyrvpdx
qzcmy
gpjkilhxnou
lxocdniryftqea
fsro
zmajgdihurkoblscnwpqfvxye
ewimuqoxrtcbgf
hqcvrbkmgeindyfszjupaolt
rjstoynlmuvhgebqcpfx
ghymxufkzrdnolitvwep
psvwmuxthdoejcbgkqif
fduvzonmhiglrbcqpetjkx
bnxlckrjhvowmzid
eqy
uwg
ghitqjnslvcpuzwrxbyod
irkwajhnfpmezdgsvutlcoq
ql
vclwinjbteuszfmydokraxpqh
swocbamnhvkuxltrip
dgjyup
ewudxyjlrbs
xmkiawcrfjvhg
rewfybacgpdhvkmqiun
nizrgevt
edxqvj
rzgbp
kxehpdfya
iasdkolztwfgm
lgijk
gyoxqfrhs
agjdluecbohtwqkmxrfpiv
zjgtlyuiwnvkbefrpax
dc
hckpivxoarlsbujfeywgmqtd
bwun
xsiyt
vwygmtho
kjidpnqsmxahglocbztfeuwyr
ialwcbtexghnqmkrdz
qihwso
mnsebatdxzol
xifhogvmbndztueqpalsyj
ry
emvdqkflowijgytcxzaubsr
jhbysenmzoqvluxfpcdw
lipdnmqecousxfrjv
xdzerwgqf
ctubdnxerwiplqgfovahzjyksm

Mil gracias si alguien puede ayudarme, de verdad!!! un saludo
3  Programación / Programación General / Actualizar JFrame en: 16 Abril 2018, 13:09 pm
Buenas, estoy haciendo un programilla del random walk, es decir una linea que se va moviendo por una cuadrícula de manera aleatoria. Bien, estoy haciendo todo el tema de la GUI y tengo un problema. Yo tengo varios botones: Empezar, finalizar, cambiar color y un jtextfield con un botón de convertir al lado.

Empezar comienza la simulación, finalizar la termina, cambia de color cambia la linea de color y lo de convertir cambia la cuadrícula por el número de cuadrados especificados en el text field.

Mi problema es que puedo iniciar el programa con el botón Empezar, pero si después intento cambiar el número de cuadrados que hay no se porque el programa no se actualiza. Se que el problema esta en que estoy haciendo lo mismo cuando le doy al boton empezar y cuando le doy al boton convertir pero no se como hacerlo, empecé hace bien poquito y aún sigo pescando con algunas cosas. Aquí os dejo el código:

Código:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;


public class FPrincipal extends javax.swing.JFrame {
 private JPanel PContenedorDibujo;


 public static void main(String[] args) {
  SwingUtilities.invokeLater(new Runnable() {
   public void run() {
    FPrincipal inst = new FPrincipal();
    inst.setLocationRelativeTo(null);
    inst.setVisible(true);
   }
  });
 }
 
 public FPrincipal() {
  super();
  initGUI();
 }
 
 private void initGUI() {
  try {
   setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
   BorderLayout thisLayout = new BorderLayout();
   getContentPane().setLayout(thisLayout);
   this.setTitle("Random Walk");
  
   JPanel btnPanel = new JPanel(new FlowLayout());
JButton btnEmpezar = new JButton("Empezar");
btnPanel.add(btnEmpezar);
btnEmpezar.addActionListener(new ActionListener() {
        private PDibujo pDibujo;

@Override
        public void actionPerformed(ActionEvent evt) {
            PContenedorDibujo = new JPanel();
            BorderLayout PContenedorDibujoLayout = new BorderLayout();
            PContenedorDibujo.setLayout(PContenedorDibujoLayout);
            getContentPane().add(PContenedorDibujo, BorderLayout.CENTER);
            this.pDibujo = new PDibujo(10);
            PContenedorDibujo.add(this.pDibujo);
            pack();
            setSize(600, 600);
        }
    });

JPanel btnPanel2 = new JPanel(new FlowLayout());
JButton btnFinalizar = new JButton("Finalizar");
btnPanel.add(btnFinalizar);
btnFinalizar.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent evt) {
         try {
System.out.println("Terminando el programa en 4 segundos...");
         Thread.sleep(4000);
System.exit(0);
} catch (InterruptedException e) {
e.printStackTrace();
}
        }
    });

JPanel btnPanel3 = new JPanel(new FlowLayout());
JButton btnLeft3 = new JButton("Cambiar Color");
btnPanel.add(btnLeft3);

JPanel btnPanel4 = new JPanel(new FlowLayout());
JTextField btnText = new JTextField(10);
JButton btnEnter = new JButton("Convertir");
btnPanel.add(btnText);
btnPanel.add(btnEnter);
btnEnter.addActionListener(new ActionListener() {
        private PDibujo pDibujo;

@Override
        public void actionPerformed(ActionEvent evt) {
dispose();
         String texto = btnText.getText();
         int num = Integer.parseInt(texto);
         PContenedorDibujo = new JPanel();
            BorderLayout PContenedorDibujoLayout = new BorderLayout();
            PContenedorDibujo.setLayout(PContenedorDibujoLayout);
            getContentPane().add(PContenedorDibujo, BorderLayout.CENTER);
            this.pDibujo = new PDibujo(num);
            PContenedorDibujo.add(this.pDibujo);
            repaint();
            pack();
            setSize(600, 600);
            setVisible(true);
            
        }
    });

Container cp = getContentPane();
    cp.setLayout(new BorderLayout());
    cp.add(btnPanel, BorderLayout.SOUTH);
    setSize(600, 600);
    
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

La clase de Pdibujo creo que no me hace falta ponerla para que se vea el problema, pero si no la pongo si veo que tal, muchísimas gracias a quien pueda ayudarme! Y no os echéis a llorar si veis fallos muy básicos en el programa.

PD: queda bastante mal todo el código ahi pegado de una pero es bastante sencillo,  lo importante esta en los actionEvent de los botones Empezar y Convertir, en los que basicamente tengo el mismo código para inicializar la GUI (cosa que estoy seguro que no debería hacer)
4  Programación / Programación C/C++ / Re: Problema de las 8 reinas en: 12 Marzo 2018, 15:05 pm
Pero además de eso, quiero que no estén alineadas. Con alineadas no me refiero a que no estén en la misma fila, columna o diagonal. Si no a que no se pueda trazar una linea recta que las corte, como las de la imagen. No se amenazan entre ellas, pero están "alineadas", se puede trazar una linea sobre ellas.

Igual no tiene solución pero me extraña porque es una práctica de la universidad y la verdad que estamos todos comiéndonos el coco.
5  Programación / Programación C/C++ / Problema de las 8 reinas en: 12 Marzo 2018, 14:30 pm
Buenas.

Estoy trabajando en el problema de las 8 reinas y el problema clásico ya lo tengo resuelto. Basicamente consiste en colocar 8 reinas en un tablero sin que se amenacen, esto es que no esten ni en la misma diagonal ni en la misma columna y fila. Hasta ahí todo bien, ahora, quiero añadir una condición más y es que las reinas no estén alineadas. Es decir,



Esas reinas no se amenazan pero están alineadas, se puede trazar una línea recta sobre ellas. Sinceramente es que le he dado vueltas y no se me ocurre como aproximarlo sin hacer un código que compruebe mil posiciones, y además no tengo muy claro en que posiciones las reinas pueden estar alineadas. Solo quiero la idea porque al final en el código solo tengo que meter una condición más. Muchas gracias de antemano.
6  Programación / Scripting / Re: Imprimir salida comando con PRINTF (BASH) en: 27 Noviembre 2017, 14:56 pm
Acabo de modificar el título, estoy con bash-script, y de lo que has puesto no entiendo nada  :laugh:
7  Programación / Scripting / Imprimir salida comando con PRINTF (BASH) en: 27 Noviembre 2017, 14:39 pm
Hola,

tengo este código

Citar
get_atributo()
{
printf  "%s" "$(ps axo cmd= --sort=-%cpu)"

}

get_usuario()
{
printf "%s" "$(ps axo user= --sort=-%cpu)"
}


tabla()
{
  STRING='ps axo user= --sort=-%cpu'
  printf "%10s %25s %10s %30s %10s %10s %20s %50s\n" "Nombre del Proceso" "Propietario" "Tiempo de CPU" "Prioridad del proceso" "Memoria Residente/Memory Swap"

  printf "%10s\n %25s\n %10s %30s %10s %10s %20s %50s\n" "$(get_atributo)" "$(get_usuario)"

pero el resultado me lo coloca todo en la misma columna. Deduzco que el resultado del comando no es un string y por eso no lo detecta, pero es que no se como guardar el resultado del comando en un string, porque esto no parece servir:

Citar
STRING='ps axo user= --sort=-%cpu)'

 y después llamar a string en la tabla.

¿Alguna idea? Mil gracias.
8  Programación / Scripting / Duda con PS en BASH-SCRIPT en: 25 Noviembre 2017, 14:22 pm
Buenas, quiero mostrar una lista de procesos en el sistema que incluya una serie de atributos entre ellos el calculo entre la memoria residente y la necesidad de memoria de intercambio necesaria para almacenar el proceso en caso de suspenderlo.

El atributo de la memoria residente imagino que es size, pero no me queda claro cual sería el segundo atributo, vsize quizá?

Mi duda es, si yo estoy haciendo esto para mostrar la lista:

ps axo cmd,user,ppid,pcpu,priority,size,vsize,user

¿Como podría hacer en esa misma línea para hacer la resta entre size y vsize y que ese resultado se mostrase en esa misma tabla? Gracias de antemano.

edit: aver no es necesario que sea en la misma línea, pero solo quiero encontrar la manera de mostrar esa misma lista pero size y vsize serían un solo atributo producto de su resta.
9  Programación / Programación C/C++ / Re: Undefined reference to (C++) en: 30 Octubre 2017, 13:47 pm
Nada, ya está arreglado, ese era el problema se me olvidó compilar uno de los ficheros, pensaba que cuando compilaba menu.cpp se compilaban el resto. Gracias :)
10  Programación / Programación C/C++ / Re: Undefined reference to (C++) en: 30 Octubre 2017, 12:58 pm
Hola, seguro que no se están linkando bien las fuentes, qué ide estás usando  ?? , has probado en incluir el cpp en lugar del hpp ??

Saludos

Hola, nada, eso no funciona, como imaginaba, ya que no accede a los .hpp y pierde variables y tal. He probado a compilarlo por línea de comandos y me sale el mismo error, undefined reference to, así que no creo que sea problema del IDE.
Páginas: [1] 2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines