HackerRank: Snippets de codigo

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.


  • Cursos de Código Facilito

    Te comparto aquí mis recomendaciones de cursos de Código Facilito. Codigofacilito.com es una plataforma virtual de cursos en idioma exclusivamente español que inició como un canal de YouTube. Opinión de la plataforma En mi opinión la plataforma aún es incipiente y los cursos necesitan más trabajo, ya que es muy común hallarse con clases de…


  • Cursos de LinkedIn Learning

    Te comparto aquí mis recomendaciones de cursos de Linkedin Learning. LinkedIn Learning es una plataforma virtual de cursos propiedad de Microsoft. Hallarás mucho material en inglés, pues prácticamente todos los cursos vienen con subtítulos en castellano y en la parte técnica son muy buenos debido a la adquisición de Lynda.com. En mi opinión la plataforma…


  • Mockito: Snippets de código

    Estos snippets de código para entrevista acerca de mockito espero te sean de mucha utilidad. Claro que también los puedes usar para tu desarrollo en el día a día. Mock básico Si te llegan a mostrar algo como esto es mejor que sospeches, mockito se usa principalmente para pruebas de integración. Si llegas a ver…


javapro.org