Ya sea para una entrevista o para programación competitiva te comparto algunos fragmentos de código o snippets que te ayudaran a mejorar tu velocidad y a que te enfoques en el problema en sí y no en los detalles de la plataforma
SQL
Estructura básica de una consulta con estadísticas de datos
SELECT
field1
, groupfunction(field2)
FROM
table1 t1
,table2 t2
WHERE
t1.id = t2.id1
GROUP BY
field1;
Java
Lectura desde consola
Lectura de consola con scanner
Esta forma es ideal para cuando la entrada está separada por espacios
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int a = scan.nextInt();
System.out.println(c);
}
}
Lectura desde consola con Buffered reader
Esta forma es útil cuando debes procesar línea por línea
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String n = bufferedReader.readLine();
bufferedReader.close();
}
}
Pruebas unitarias
Uno de los grandes defectos de hackerrrank es que no tenemos opción de escribir nuestras pruebas unitarias con código, solamente nos presenta un campo de entrada en el mejor de los casos.
Para hacer que nuestra solución sea de calidad y hacer nuestras propias pruebas deberemos de tener antes una plantilla de código para hacer las pruebas, sabiendo que siempre se recibirá una entrada por consola y se evaluara una salida por consola. Por ello te comparto la siguiente plantilla para reemplazar los datos de la pregunta.
import org.junit.Before;
import org.junit.Test;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.PrintStream;
import java.util.Scanner;
import static org.junit.Assert.assertEquals;
public class Program1Test {
@Before
public void setUp() throws Exception {
}
@Test
public void main() throws Exception {
String data = "36 30 36 30\n" + //TODO remplaza por tu entrada aca
"15 15 15 15\n" +
"46 96 90 100\n" +
"86 86 86 86\n" +
"100 200 100 200\n" +
"-100 200 -100 200";
InputStream stdin = System.in;
PrintStream stdOut = System.out;
String programOutput;
try (
ByteArrayOutputStream outputbaos = new ByteArrayOutputStream();
PrintStream outputPs = new PrintStream(outputbaos)
) {
System.setIn(new ByteArrayInputStream(data.getBytes()));
// Use my stream
System.setOut(outputPs);
Scanner scanner = new Scanner(System.in);
Program1.main(null);
System.out.flush();
programOutput = outputbaos.toString();
} finally {
// Put things back
System.setIn(stdin);
System.setOut(stdOut);
}
String expectedOutput = "2 2 2"; //reemplaza tu salida aqui
assertEquals(expectedOutput + "\n != \n" + programOutput, expectedOutput, programOutput);
}
}
no olvides ponerle \n para indicar el salto de línea tanto en entrada como en salida.
El framework de pruebas que tiene es Junit4 ya que es de los más populares y simples de la industria, no dudes en adaptar el código al framework de tu preferencia.
Puedes consultar este codigo con algunas soluciones a unos pocos problemas de hackerrrank en este repositorio que tego.