Qual código deve ser mostrado na entrevista

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]); // 0-4,7-8,10 getRanges([4, 7, 10]); // 4,7,10 getRanges([2, 3, 8, 9]); // 2-3,8-9 

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[]) { // find start-stop intervals in the sequence let intervals : Interval[] = []; let start = 0; for (let i = 1; i < arr.length; i++) { if (arr[i] - arr[i - 1] > 1) { intervals.push(new Interval(start, i - 1)); start = i; } } intervals.push(new Interval(start, arr.length - 1)); // convert intervals to the string let out : String = ""; for (let i = 0; i < intervals.length; i++) { out += intervals[i].toString(arr); if (i < intervals.length - 1) { out += ','; } } console.log(out); } getRanges([0, 1, 2, 3, 4, 7, 8, 10]); // 0-4,7-8,10 getRanges([4, 7, 10]); // 4,7,10 getRanges([2, 3, 8, 9]); // 2-3,8-9 

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

Source: https://habr.com/ru/post/pt470660/


All Articles