Hoje, pela manhã, houve um post muito interessante sobre qual código você precisa escrever na entrevista e quais habilidades demonstrar. A tarefa de teste foi essa.
Escreva uma função no TypeScript que, para uma determinada matriz de números, exiba uma sequência de texto de intervalos:
getRanges([0, 1, 2, 3, 4, 7, 8, 10]);
Infelizmente, esta postagem não está mais disponível e não restaurarei a solução fornecida agora. Mas essa decisão foi tão bonita, tão extremamente mal legível para o
programador médio que foi levemente torturado pela gerência até o final do prazo. Era um script no estilo Perl, de gravação quase única linha.
E a pergunta é: como avaliar esse código? Por um lado, ele demonstra o alto nível técnico do candidato. Por outro lado, também demonstra algum mal-entendido dos processos de desenvolvimento de equipes com programadores de níveis bastante diferentes de treinamento.
Eu esbocei minha decisão em cerca de 10 minutos. É assim:
class Interval { start: number; stop: number constructor(start: number, stop: number) { this.start = start; this.stop = stop; } toString(arr: number[]) { let text: string; text = arr[this.start].toString(); if (this.start < this.stop) { text += '-' + arr[this.stop].toString(); } return text; } } function getRanges(arr: number[]) {
O algoritmo aqui é este:
- na primeira etapa, selecionamos intervalos de uma matriz de números
- no segundo passo, convertemos os intervalos em strings
Mas então eu olhei para essa decisão. E não para que também parecesse perfeito. Um pouco detalhado, uma entidade adicional "Intervalo" é introduzida. Ainda assim, estou convencido de que essa decisão é muito mais fácil de ler e entender.
Mas aqui está a questão. Como essa decisão será avaliada em uma entrevista do ponto de vista de um fã de programação de olimpíadas?
Em geral, eu gostaria de continuar esta discussão.
UPD 1. Adições à tarefa. A matriz de entrada é classificada.
UPD 2. A postagem original está disponível novamente,
habr.com/en/post/470407