¿Qué código se debe mostrar en la entrevista?

Hoy por la mañana hubo una publicación muy interesante sobre qué código necesitas escribir en la entrevista y qué habilidades demostrar. La tarea de prueba fue esta.

Escriba una función en TypeScript que, para una matriz de números dada, muestre una cadena de texto de rangos:

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 

Desafortunadamente, esta publicación ya no está disponible, y no restauraré la solución dada ahora. Pero esta decisión fue tan hermosa, tan extremadamente pobremente legible para el programador promedio que fue ligeramente torturado por la gerencia al final de la fecha límite. Era un guión de estilo Perl de solo una línea de escritura.

Y la pregunta es, ¿cómo evaluar este código? Por un lado, demuestra el alto nivel técnico del candidato. Por otro lado, también demuestra algunos malentendidos de los procesos de desarrollo de equipos con programadores de niveles de capacitación bastante diferentes.

Esbocé mi decisión en unos 10 minutos. Se ve así:

 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 

El algoritmo aquí es este:

  • en el primer paso seleccionamos intervalos de una matriz de números
  • en el segundo paso convertimos los intervalos a cadenas

Pero luego miré esta decisión. Y no para que también se viera perfecto. Algo detallado, se introduce una entidad adicional "Intervalo". Pero aún así, estoy convencido de que esta decisión es mucho más fácil de leer y comprender.

Pero aquí está la pregunta. ¿Cómo se evaluará esta decisión en una entrevista desde el punto de vista de un fanático de la programación olímpica?

En general, me gustaría continuar esta discusión.

UPD 1. Adiciones a la tarea. La matriz de entrada está ordenada.
UPD 2. La publicación original está disponible nuevamente, habr.com/en/post/470407

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


All Articles