Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Testes técnicos com juízes eletrônicos

Testes técnicos com juízes eletrônicos

Título:
How to get away with algorithms: como ir bem em testes técnicos de processos seletivos com juízes eletrônicos

Descrição:

## Curta (200 caracteres)
Sabe aqueles testes técnicos que até o texto é difícil de entender o que você precisa fazer e os exemplos não ajudam muito?
Então, veremos o que precisamos entender e estudar pra ir bem neles.

## Longa
Vários processos seletivos usam sites de juízes eletrônicos nas etapas técnicas.
Muitas vezes os textos dos problemas são grandes, parecem meio confusos e assustadores. E nem sempre os exemplos ajudam muito.
Além das estruturas de dados e dos algoritmos, tem algumas coisas que podem nos ajudar ajudar a resolver esses problemas.
É isso que veremos nessa palestra.

Bruna Moreira

October 14, 2021
Tweet

More Decks by Bruna Moreira

Other Decks in Programming

Transcript

  1. How to get away with algorithms como ir bem em

    testes técnicos de processos seletivos com juízes eletrônicos
  2. Bruna Moreira Engenheira de software PyLadies DF Fundadora da BOSS

    Forrozeira descrição: foto estilo retrato, mulher branca com cabelos ondulados e curtos. Está sorrindo e com uma camiseta laranja. Aprendendo libras Sinto falta de dançar e cantar no karaokê. Mas tenho meus gatos, então está tudo bem :P
  3. Habilidades 1) Sem desespero 2) Executar e comparar saída 3)

    Entender e resolver o problema na mão 4) Ler entrada 5) Análise de complexidade 6) Entender os tipos de erros 7) Identificar o tipo de problema
  4. Habilidades 1) Sem desespero 2) Executar e comparar saída 3)

    Entender e resolver o problema na mão 4) Ler entrada 5) Análise de complexidade 6) Entender os tipos de erros 7) Identificar o tipo de problema
  5. Executar Executar é simples! $ python a.py $ python a.py

    < a.in $ python a.py < a.in > a.out $ diff a.out a.ans
  6. Executar Executar é simples! Inserir input o tempo todo? $

    python a.py $ python a.py < a.in $ python a.py < a.in > a.out $ diff a.out a.ans
  7. Executar Executar é simples! Inserir input o tempo todo? Ótimo!

    $ python a.py $ python a.py < a.in $ python a.py < a.in > a.out $ diff a.out a.ans
  8. Executar Executar é simples! Inserir input o tempo todo? Ótimo!

    Comparar saída no terminal? $ python a.py $ python a.py < a.in $ python a.py < a.in > a.out $ diff a.out a.ans
  9. Executar Executar é simples! Inserir input o tempo todo? Ótimo!

    Comparar saída no terminal? $ python a.py $ python a.py < a.in $ python a.py < a.in > a.out $ diff a.out a.ans
  10. Executar Executar é simples! Inserir input o tempo todo? Ótimo!

    Comparar saída no terminal? Usar ferramentas disponíveis $ python a.py $ python a.py < a.in $ python a.py < a.in > a.out $ diff a.out a.ans
  11. Habilidades 1) Sem desespero 2) Executar e comparar saída 3)

    Entender e resolver o problema na mão 4) Ler entrada 5) Análise de complexidade 6) Entender os tipos de erros 7) Identificar o tipo de problema
  12. Entendendo o problema 1) Como a entrada se transforma na

    saída? Exemplo de Entrada Exemplo de Saída 4 12/0001111 14/0001111 11/0001111 10/0001111 5 contar quantos pares (i, j) existem tais que i < j e m[i] > m[j], onde 1 ≤ i,j ≤ N e m[i] m[i] significa a matrícula do aluno que ficou em i-ésimo lugar. As próximas N linhas são a classificação final dos alunos Calouro Vence Veterano?
  13. Entendendo o problema 1) Como a entrada se transforma na

    saída? 2) Contar pares com alguma condição Exemplo de Entrada Exemplo de Saída 4 12/0001111 14/0001111 11/0001111 10/0001111 5 contar quantos pares (i, j) existem tais que i < j e m[i] > m[j], onde 1 ≤ i,j ≤ N e m[i] m[i] significa a matrícula do aluno que ficou em i-ésimo lugar. As próximas N linhas são a classificação final dos alunos Calouro Vence Veterano?
  14. Entendendo o problema 1) Como a entrada se transforma na

    saída? 2) Contar pares com alguma condição 3) Matrícula mais nova com melhor colocação Exemplo de Entrada Exemplo de Saída 4 12/0001111 14/0001111 11/0001111 10/0001111 5 contar quantos pares (i, j) existem tais que i < j e m[i] > m[j], onde 1 ≤ i,j ≤ N e m[i] m[i] significa a matrícula do aluno que ficou em i-ésimo lugar. As próximas N linhas são a classificação final dos alunos Calouro Vence Veterano?
  15. Entendendo o problema 1) Como a entrada se transforma na

    saída? 2) Contar pares com alguma condição 3) Matrícula mais nova com melhor colocação 4) Tentar encontrar os 5 pares Exemplo de Entrada Exemplo de Saída 4 12/0001111 14/0001111 11/0001111 10/0001111 5 contar quantos pares (i, j) existem tais que i < j e m[i] > m[j], onde 1 ≤ i,j ≤ N e m[i] m[i] significa a matrícula do aluno que ficou em i-ésimo lugar. As próximas N linhas são a classificação final dos alunos Calouro Vence Veterano?
  16. Entendendo o problema 1) Como a entrada se transforma na

    saída? 2) Contar pares com alguma condição 3) Matrícula mais nova com melhor colocação 4) Tentar encontrar os 5 pares a) 12 e 14: não b) 12 e 11: sim c) 12 e 10: sim d) 14 e 11: sim e) 14 e 10: sim f) 11 e 10: sim Exemplo de Entrada Exemplo de Saída 4 12/0001111 14/0001111 11/0001111 10/0001111 5 contar quantos pares (i, j) existem tais que i < j e m[i] > m[j], onde 1 ≤ i,j ≤ N e m[i] m[i] significa a matrícula do aluno que ficou em i-ésimo lugar. As próximas N linhas são a classificação final dos alunos Calouro Vence Veterano?
  17. Resolvendo o problema 1) Ler a entrada Exemplo de Entrada

    Exemplo de Saída 4 12/0001111 14/0001111 11/0001111 10/0001111 5 contar quantos pares (i, j) existem tais que i < j e m[i] > m[j], onde 1 ≤ i,j ≤ N e m[i] m[i] significa a matrícula do aluno que ficou em i-ésimo lugar. As próximas N linhas são a classificação final dos alunos Calouro Vence Veterano?
  18. Resolvendo o problema 1) Ler a entrada 2) Informações importantes

    da matrícula Exemplo de Entrada Exemplo de Saída 4 12/0001111 14/0001111 11/0001111 10/0001111 5 contar quantos pares (i, j) existem tais que i < j e m[i] > m[j], onde 1 ≤ i,j ≤ N e m[i] m[i] significa a matrícula do aluno que ficou em i-ésimo lugar. As próximas N linhas são a classificação final dos alunos Calouro Vence Veterano?
  19. Resolvendo o problema 1) Ler a entrada 2) Informações importantes

    da matrícula 3) Comparar cada um com os demais Exemplo de Entrada Exemplo de Saída 4 12/0001111 14/0001111 11/0001111 10/0001111 5 contar quantos pares (i, j) existem tais que i < j e m[i] > m[j], onde 1 ≤ i,j ≤ N e m[i] m[i] significa a matrícula do aluno que ficou em i-ésimo lugar. As próximas N linhas são a classificação final dos alunos Calouro Vence Veterano?
  20. Resolvendo o problema 1) Ler a entrada 2) Informações importantes

    da matrícula 3) Comparar cada um com os demais Exemplo de Entrada Exemplo de Saída 4 12/0001111 14/0001111 11/0001111 10/0001111 5 contar quantos pares (i, j) existem tais que i < j e m[i] > m[j], onde 1 ≤ i,j ≤ N e m[i] m[i] significa a matrícula do aluno que ficou em i-ésimo lugar. As próximas N linhas são a classificação final dos alunos Calouro Vence Veterano? Ordenação
  21. Resolvendo o problema 1) Ler a entrada 2) Informações importantes

    da matrícula 3) Comparar cada um com os demais Exemplo de Entrada Exemplo de Saída 4 12/0001111 14/0001111 11/0001111 10/0001111 5 contar quantos pares (i, j) existem tais que i < j e m[i] > m[j], onde 1 ≤ i,j ≤ N e m[i] m[i] significa a matrícula do aluno que ficou em i-ésimo lugar. As próximas N linhas são a classificação final dos alunos Calouro Vence Veterano? Ordenação contando as trocas
  22. Habilidades 1) Sem desespero 2) Executar e comparar saída 3)

    Entender e resolver o problema na mão 4) Ler entrada 5) Análise de complexidade 6) Entender os tipos de erros 7) Identificar o tipo de problema
  23. Ler entrada 3 tipos de entrada 1. Ler uma quantidade

    definida de casos 2. Ler até o fim do arquivo 3. Até receber um caracter específico
  24. Ler quantidade definida ler um inteiro N quantidade de alunos

    https://www.urionlinejudge.com.br/judge/pt/problems/view/1892
  25. Ler quantidade definida ler um inteiro N quantidade de alunos

    https://www.urionlinejudge.com.br/judge/pt/problems/view/1892
  26. Ler quantidade definida 1 if __name__ == "__main__": 2 n

    = int(input()) 3 4 for i in range(n): 5 a = input() 6 line = a.split() 7 print(line)
  27. Ler quantidade definida 1 if __name__ == "__main__": 2 n

    = int(input()) 3 4 for i in range(n): 5 a = input() 6 line = a.split() 7 print(line) ler inteiro quantidade de casos
  28. Ler quantidade definida 1 if __name__ == "__main__": 2 n

    = int(input()) 3 4 for i in range(n): 5 a = input() 6 line = a.split() 7 print(line) ler inteiro quantidade de casos ler n vezes informações
  29. Ler entrada 3 tipos de entrada 1. Ler uma quantidade

    definida de casos 2. Ler até o fim do arquivo 3. Até receber um caracter específico
  30. Ler até fim do arquivo 1 import sys 2 if

    __name__ == "__main__": 3 for linha in sys.stdin: 4 v, t = linha.split() 5 print("v: {} -- t: {}".format(v, t))
  31. Ler até fim do arquivo 1 import sys 2 if

    __name__ == "__main__": 3 for linha in sys.stdin: 4 v, t = linha.split() 5 print("v: {} -- t: {}".format(v, t)) importar para ler toda a entrada
  32. Ler até fim do arquivo 1 import sys 2 if

    __name__ == "__main__": 3 for linha in sys.stdin: 4 v, t = linha.split() 5 print("v: {} -- t: {}".format(v, t)) importar para ler toda a entrada Passa por cada linha da entrada
  33. Ler entrada 3 tipos de entrada 1. Ler uma quantidade

    definida de casos 2. Ler até o fim do arquivo 3. Até receber um caracter específico
  34. Ler até caracter Informações a serem lidas para cada caso

    https://www.urionlinejudge.com.br/judge/pt/problems/view/1910
  35. Ler até caracter Informações a serem lidas para cada caso

    https://www.urionlinejudge.com.br/judge/pt/problems/view/1910
  36. Ler até caracter Informações a serem lidas para cada caso

    https://www.urionlinejudge.com.br/judge/pt/problems/view/1910
  37. Ler até caracter Informações a serem lidas para cada caso

    https://www.urionlinejudge.com.br/judge/pt/problems/view/1910
  38. Ler até caracter 1 if __name__ == "__main__": 2 line

    = input() 3 o, d, k = line.split() 4 while line != "0 0 0": 5 channels = input() 6 print("saída correta") 7 line = input() 8 o, d, k = line.split() ler a primeira linha
  39. Ler até caracter 1 if __name__ == "__main__": 2 line

    = input() 3 o, d, k = line.split() 4 while line != "0 0 0": 5 channels = input() 6 print("saída correta") 7 line = input() 8 o, d, k = line.split() ler a primeira linha a informação é processada caso a linha não seja "0 0 0"
  40. Ler até caracter 1 if __name__ == "__main__": 2 line

    = input() 3 o, d, k = line.split() 4 while line != "0 0 0": 5 channels = input() 6 print("saída correta") 7 line = input() 8 o, d, k = line.split() ler a primeira linha a informação é processada caso a linha não seja "0 0 0" o resto do caso só é lido quando for pertinente
  41. Habilidades 1) Sem desespero 2) Executar e comparar saída 3)

    Entender e resolver o problema na mão 4) Ler entrada 5) Análise de complexidade 6) Entender os tipos de erros 7) Identificar o tipo de problema
  42. entrada não afeta a quantidade de operações O(1) quantidade de

    elementos altera linearmente a quantidade O(n) quantidade de elementos altera quadraticamente a quantidade O(n²) Análise de complexidade
  43. operações O(1) busca em array O(log n) busca em matriz

    O(n²) Busca mais eficiente ordenado Análise de complexidade
  44. Habilidades 1) Sem desespero 2) Executar e comparar saída 3)

    Entender e resolver o problema na mão 4) Ler entrada 5) Análise de complexidade 6) Entender os tipos de erros 7) Identificar o tipo de problema
  45. Tipos de erro WA resposta errada Algum dos casos de

    teste teve resposta diferente do esperado • Comparar casos especificados • Pensar em casos de borda ◦ maior e menor número possível ◦ números negativos • Casos conhecidos ◦ fóruns ◦ exemplos ◦ udebug
  46. Tipos de erro Presentation erro de apresentação Erros de apresentação

    costumam ser diferenças em caracteres de espaço em branco • tabs • espaços • quebras de linha
  47. Tipos de erro TLE excedeu o tempo As questões têm

    limite de tempo para a execução de cada arquivo de entrada • Loop infinito • solução com alta complexidade (Big O) ◦ tem algum algoritmo mais rápido? ◦ tem estrutura de dados mais adequada? ◦ tem algum passo que não precisa? ◦ algo pode ser trocado por uma operação?
  48. Tipos de erro Runtime erro em tempo de execução Enquanto

    a questão era executada com as entradas, ocorreu um erro • operação inválida para o tipo da variável • tentar acessar posição inexistente na lista
  49. Habilidades 1) Sem desespero 2) Executar e comparar saída 3)

    Entender e resolver o problema na mão 4) Ler entrada 5) Análise de complexidade 6) Entender os tipos de erros 7) Identificar o tipo de problema
  50. Estruturas e Bibliotecas • Busca sequencial e Busca binária •

    Ordenação ◦ insertion sort (ordenação por inserção) ▪ Complexidade O(n2) ◦ merge sort ▪ Complexidade O(log n) ◦ Tim sort é o padrão do python ▪ Complexidade O(n log n) Slides com busca e ordenação
  51. Estruturas e Bibliotecas • Filas • Pilhas • Fila de

    prioridade • Hash Table (dict e set)
  52. Grafos • Também é estrutura de dados (especial) • Travessia

    entre as informações armazenadas ◦ Profundidade ◦ Largura ◦ Dijkstra • Caminhos mínimos • Ciclos • Resiliência Meus slides de grafos Material de grafos do Edson Playlist de aulas de grafos do Edson
  53. Paradigmas de solução • Algoritmos gulosos • Dividir para conquistar

    • Programação dinâmica ◦ Problema da Mochila (knapsack) ◦ Problema do troco ◦ Caixeiro viajante
  54. Repositórios Repositório da disciplina do Edson (melhor professor que tive

    na faculdade) Curso em vídeo de Introdução a programação competitiva do professor Edson Repositório de Introdução a programação competitiva do Matheus Repositório de conteúdo recomendado por empresas como google Meus slides de todas as disciplinas
  55. Obrigada! PyBR por ser o melhor evento amigas maravilhosas que

    tenho prof Edson por ser inspiração até hoje [email protected] https://speakerdeck.com/brunamoreira/ brunanayara.github.io