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]);
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[]) {
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