Kode apa yang harus ditunjukkan pada saat wawancara

Hari ini di pagi hari ada posting yang sangat menarik tentang kode apa yang perlu Anda tulis di wawancara dan keterampilan apa yang harus diperagakan. Tugas tes adalah ini.

Tulis fungsi pada TypeScript yang, untuk array angka yang diberikan, menampilkan string teks rentang:

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 

Sayangnya, posting ini tidak lagi tersedia, dan saya tidak akan mengembalikan solusi yang diberikan sekarang. Tetapi solusi ini sangat indah, sama terbaca dengan buruk untuk programmer rata - rata yang sedikit disiksa oleh manajemen menjelang akhir tenggat waktu. Itu adalah skrip Perl-style tulisan-satunya yang hampir tunggal.

Dan pertanyaannya adalah, bagaimana cara mengevaluasi kode ini? Di satu sisi, ia menunjukkan tingkat teknis yang tinggi dari kandidat. Di sisi lain, ini juga menunjukkan beberapa kesalahpahaman tentang proses pengembangan tim dengan programmer dari tingkat pelatihan yang agak berbeda.

Saya membuat sketsa keputusan saya dalam sekitar 10 menit. Ini terlihat seperti ini:

 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 

Algoritme di sini adalah ini:

  • pada langkah pertama kita memilih interval dari array angka
  • pada langkah kedua kita mengonversi interval ke string

Tapi kemudian saya melihat keputusan ini. Dan tidak juga terlihat sempurna. Agak bertele-tele, entitas tambahan "Interval" diperkenalkan. Tapi tetap saja, saya yakin bahwa keputusan ini jauh lebih mudah dibaca dan dipahami.

Tapi ini pertanyaannya. Bagaimana keputusan ini akan dievaluasi dalam wawancara dari sudut pandang penggemar pemrograman olimpiade?

Secara umum, saya ingin melanjutkan diskusi ini.

UPD 1. Penambahan tugas. Array input diurutkan.
UPD 2. Posting asli tersedia lagi, habr.com/en/post/470407

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


All Articles