Welcher Code sollte beim Interview angezeigt werden?

Heute Morgen gab es einen sehr interessanten Beitrag darüber, welchen Code Sie beim Interview schreiben müssen und welche Fähigkeiten Sie demonstrieren müssen. Die Testaufgabe war dies.

Schreiben Sie eine Funktion in TypeScript, die für ein bestimmtes Array von Zahlen eine Textzeichenfolge von Bereichen anzeigt:

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 

Leider ist dieser Beitrag nicht mehr verfügbar und ich werde die jetzt angegebene Lösung nicht wiederherstellen. Aber diese Lösung war so schön und für den durchschnittlichen Programmierer, der gegen Ende der Frist vom Management leicht gefoltert wurde , genauso schlecht lesbar. Es war ein fast einzeiliges Skript nur im Perl-Stil.

Und die Frage ist, wie man diesen Code bewertet? Einerseits demonstriert er das hohe technische Niveau des Kandidaten. Andererseits zeigt es auch ein Missverständnis der Teamentwicklungsprozesse mit Programmierern unterschiedlicher Ausbildungsstufen.

Ich skizzierte meine Entscheidung in ungefähr 10 Minuten. Es sieht so aus:

 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 

Der Algorithmus hier ist folgender:

  • Im ersten Schritt wählen wir Intervalle aus einem Array von Zahlen aus
  • Im zweiten Schritt konvertieren wir die Intervalle in Strings

Aber dann habe ich mir diese Entscheidung angesehen. Und nicht so, dass es auch perfekt aussah. Etwas ausführlich wird eine zusätzliche Entität "Intervall" eingeführt. Trotzdem bin ich überzeugt, dass diese Entscheidung viel einfacher zu lesen und zu verstehen ist.

Aber hier ist die Frage. Wie wird diese Entscheidung in einem Interview aus Sicht eines Olympiaden-Programmierfans bewertet?

Generell möchte ich diese Diskussion fortsetzen.

UPD 1. Ergänzungen zur Aufgabe. Das Eingabearray ist sortiert.
UPD 2. Der ursprüngliche Beitrag ist wieder verfügbar, habr.com/de/post/470407

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


All Articles