Java - "time limit exceeded" pero porque?

 
Vista:

"time limit exceeded" pero porque?

Publicado por sarkella (5 intervenciones) el 21/02/2021 04:10:36
Hola buenas, estoy empezando con esto de la programacion y estaba haciendo un ejercicio de una pagina.
El ejercicio me pide que le imprima una linia con todos los numeros que hay entre a y b con una coma entre cada numero. por ejemplo :
si los numeros son 12 y 16, la salida tiene que ser 12,13,14,15,16 en una linea.
añadir que :
si el primer numero (a) es mas grande que (b) entonces imprimir un salto de linea. Porque (a) tiene que ser el numero donde empieza el rango, (a) tiene que ser mas pequeño que (b).

si a y b son iguales basta con imprimir uno de los dos numeros en una linea
Enfin..
En principio lo que tengo escrito funciona pero cuando el rango de numeros a imprimir es superior a 6621. el programa se bloquea no hace nada pero tampoco lanza ningun error (almenos en eclipse).

en mi codigo si a n1 pongo 0 y a n2 mas de 6621 no imprime nada.

el codigo dentro del else if hay un comentario con un codigo. ese codigo hace lo mismo que la parte que no esta comentada dentro del else if. Estava probrando. La qüestion es que a ambos codigos les ocurre el mismo error.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.util.Scanner;
public class Loops3 {
 
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		int n1= input.nextInt();
		int n2= input.nextInt();
		input.close();
 
		if(n1==n2) {
			System.out.println(n1);
		}else if(n1<n2) {
			/*for(int i = n1 ; i<=n2 ;i++ ) {
				System.out.print(i);
				if(i<n2) {
					System.out.print(",");
				}
			}
			System.out.println();
			*/
			String resultado="";
			for(int i = n1 ; i<=n2 ;i++ ) {
				resultado = resultado+String.valueOf(i)+",";
			}
			System.out.println(resultado.substring(0, resultado.length()-1));
 
		}else {
			System.out.println();
		}
 
 
	}
 
}

A todo esto "time limit exceeded" me lo dice la pagina del ejercicio donde subo el codigo para que haga sus testeos con diferentes valores, en uno de esos tests me lanza ese veredicto.

Mi pregunta no es como solucionarlo, sino porque ocurre esto. Si algun entendido en el tema me lo pudiera explicar le estaria muy agradecido. Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

"time limit exceeded" pero porque?

Publicado por Rodrigo (623 intervenciones) el 21/02/2021 04:54:09
Sugiero usar la version con print, no la que crea un string, porque el string se esta creando en cada vuelta del ciclo y sospecho que esto es lo que hace que el test haga que se acabe el tiempo, cuando el valor que se ingresa es grande.

Tambien sugiero que en vez de hacer que el ciclo vaya de n1 a n2, con ambos incluidos y ademas hacer un if dentro del ciclo, hagas un ciclo de n1 a n2-1 (o de modo equivalente usar "< n2" en la condicion del for) y escribir siempre el numero i y una coma despues, nada de ifs. Una vez terminado el for, agregas 1 print mas con n2, sin coma despues.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

"time limit exceeded" pero porque?

Publicado por sarkella (5 intervenciones) el 21/02/2021 22:38:36
gracias por las sugerencias incluso he probado hacer un for como decias (creo... porque no se a que te refieres con la version print que no crea un string)
1
2
3
4
5
for(int i = n1 ; i<n2 ;i++ ) {
    System.out.print(i);
    System.out.print(',');
}
System.out.print(n2);
pero lo que me dice la pagina "time limit exceeded", es algo que solucionar despues.

El primer problema es que mi programa termina sin imprimir nada en consola si la diferencia entre n1 y n2 es de mas de 6621 numeros.
Eso es lo que me interesa averiguar primero. No se porque ocurre esto.

igualmente gracias por contestar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

"time limit exceeded" pero porque?

Publicado por Tom (1831 intervenciones) el 21/02/2021 09:49:08
Pero y ¿ por qué no le preguntas al admin de la página a la que subes el ejercicio ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

"time limit exceeded" pero porque?

Publicado por sarkella (5 intervenciones) el 21/02/2021 22:40:19
Porque primero quiero averiguar porque mi codigo esta fallando. quiza el titulo del post no es el mas acertado.
Gracias por contestar igualmente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

"time limit exceeded" pero porque?

Publicado por Kabuto (1381 intervenciones) el 21/02/2021 23:05:52
Hola.
Creo que simplemente es que la consola de salida tiene un límite de caracteres para una línea horizontal
He cambiado tu código para que en lugar de crear una sola línea, tras cada coma se añada un salto de línea.
Así al final cada número se imprime en una sola línea
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class Loops3 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		int n1= input.nextInt();
		int n2= input.nextInt();
		input.close();
 
		if(n1==n2) {
			System.out.println(n1);
		}else if(n1<n2) {
			/*for(int i = n1 ; i<=n2 ;i++ ) {
				System.out.print(i);
				if(i<n2) {
					System.out.print(",");
				}
			}
			System.out.println();
			*/
			String resultado="";
			for(int i = n1 ; i<=n2 ;i++ ) {
				resultado = resultado+String.valueOf(i)+",\n";
			}
			System.out.println(resultado.substring(0, resultado.length()-1));
 
		}else {
			System.out.println();
		}
 
 
	}
}

Y ahora se puede superar el límite que comentabas, sin problemas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

"time limit exceeded" pero porque?

Publicado por sarkella (5 intervenciones) el 21/02/2021 23:29:02
Gracias por la aportación, ya me imaginava que era algo así, que quizá hay un limite de caracteres por línea.
Si eso es así, entonces tengo que ponerme en contacto con el admin de la pagina porque el ejercicio me especifica imprimirlo en una línea.

por si os interesa de que pagina y ejercicio hablo : https://jutge.org/problems/P97156
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

"time limit exceeded" pero porque?

Publicado por Kabuto (1381 intervenciones) el 22/02/2021 01:19:41
Bueno, a mi en Eclipse me ocurre lo mismo.
Tal cuál lo habías explicado, si el valor mayor es mayor (valga la redundancia) que 6621, no sale nada en la consola.
El programa termina "correctamente", sin lanzar error ni nada, pero la consola (al menos la de Eclipse) tampoco es capaz de mostrar una línea con esa dimensión.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

"time limit exceeded" pero porque?

Publicado por sarkella (5 intervenciones) el 22/02/2021 05:32:27
Y no solo eso, dependiendo de los valores que pongas a n1 o n2 el programa te devuelve cosas como.. :
Para n1 = 0 y n2 = 20000 | output : 0,1,2,3,4,
Para n1 = -10000 y n2 = 10000 | output : -10000,-9999,-9
Para n1 = 10000 y n2 = 40000 | output : 10000,10001,10
entre mas casos...

en fin.. mi cerebro no llega a comprender porque se devuelven todos esos datos. :(
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

"time limit exceeded" pero porque?

Publicado por Kabuto (1381 intervenciones) el 22/02/2021 11:45:36
Es por limitaciones de determinadas consolas.
No es un problema de tu código, ni de Java, ni de tu comprensión.

Es problema de cómo han sido programadas dichas consolas de salida para decidir cómo comportarse cuando sus límites son superados.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

"time limit exceeded" pero porque?

Publicado por Tom (1831 intervenciones) el 22/02/2021 08:56:03
Lo que has puesto funciona perfectamente, al menos en linux, con java 8, en un terminal y en la consola de netbeans.
Pruébalo en un terminal, y haz lo que dice Rodrigo, pon "\n" de vez en cuando para que la línea no sea tan larga.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar