Сообщение Re: Как собеседовать джуниоров от 11.03.2022 4:50
Изменено 11.03.2022 4:50 Lazytech
Re: Как собеседовать джуниоров
Здравствуйте, vsb, Вы писали:
vsb>На собеседованиях я сейчас первым делом даю задачу — написать на JS функцию isPalyndromic(n) — проверить, является ли число палиндромом в десятичной записи. Предполагаемое решение — преобразовать число в строку и сравнить символы. Ожидается, что кандидат знает основы JS (как число в строку преобразовать), умеет писать хоть какой-то код, умеет писать циклы, понимает, что такое массивы. Ну и вообще умеет читать формально поставленную задачу и преобразовать её в программный код. Мой идеальный джуниор должен построить m без преобразования в строку (перевернутая n) и вернуть return n === m (эффективное и с какой-то точки зрения изящное алгоритмически решение без выделения лишней памяти). <...>
При наличии запрета на преобразование числа в строку решение вполне себе тривиальное, хотя one-liner'ом, наверное, уже не обойтись. Ниже привожу свое громоздкое решение на JavaScript.
vsb>На собеседованиях я сейчас первым делом даю задачу — написать на JS функцию isPalyndromic(n) — проверить, является ли число палиндромом в десятичной записи. Предполагаемое решение — преобразовать число в строку и сравнить символы. Ожидается, что кандидат знает основы JS (как число в строку преобразовать), умеет писать хоть какой-то код, умеет писать циклы, понимает, что такое массивы. Ну и вообще умеет читать формально поставленную задачу и преобразовать её в программный код. Мой идеальный джуниор должен построить m без преобразования в строку (перевернутая n) и вернуть return n === m (эффективное и с какой-то точки зрения изящное алгоритмически решение без выделения лишней памяти). <...>
При наличии запрета на преобразование числа в строку решение вполне себе тривиальное, хотя one-liner'ом, наверное, уже не обойтись. Ниже привожу свое громоздкое решение на JavaScript.
function getNumDigits(num) {
let num2 = num;
let count = 0;
while (num2 > 0) {
num2 = Math.floor(num2 / 10);
count++;
}
return count;
}
function isPalyndrome(n, m) {
console.log('=========================================');
console.log('n =', n);
console.log('m =', m);
const numDigitsN = getNumDigits(n);
const numDigitsM = getNumDigits(m);
if (numDigitsN !== numDigitsM) {
console.log('The two numbers are of different length.');
return false;
}
let n2 = n;
let m2 = m;
// n - from right to left
// m - from left to right
let n3;
let nDigit;
let m3;
let mDigit;
let divisor = 10 ** (numDigitsM - 1);
// console.log('divisor =', divisor);
for (let i = 0; i < numDigitsN; i++) {
n3 = Math.floor(n2 / 10);
nDigit = n2 - 10 * n3;
console.log('nDigit =', nDigit);
mDigit = Math.floor(m2 / divisor);
console.log('mDigit =', mDigit);
if (nDigit !== mDigit) {
console.log('The two digits are not equal.');
return false;
}
m2 -= mDigit * divisor;
divisor /= 10;
n2 = n3;
}
console.log('It is a palyndrome indeed!');
return true;
}
console.log(isPalyndrome(1352, 2531)); // true
console.log(isPalyndrome(999, 998)); // false
console.log(isPalyndrome(1, 2)); // false
console.log(isPalyndrome(12345, 54321)); // true
Re: Как собеседовать джуниоров
Здравствуйте, vsb, Вы писали:
vsb>На собеседованиях я сейчас первым делом даю задачу — написать на JS функцию isPalyndromic(n) — проверить, является ли число палиндромом в десятичной записи. Предполагаемое решение — преобразовать число в строку и сравнить символы. Ожидается, что кандидат знает основы JS (как число в строку преобразовать), умеет писать хоть какой-то код, умеет писать циклы, понимает, что такое массивы. Ну и вообще умеет читать формально поставленную задачу и преобразовать её в программный код. Мой идеальный джуниор должен построить m без преобразования в строку (перевернутая n) и вернуть return n === m (эффективное и с какой-то точки зрения изящное алгоритмически решение без выделения лишней памяти). <...>
При наличии запрета на преобразование числа в строку решение вполне себе тривиальное, хотя one-liner'ом, наверное, уже не обойтись. Ниже привожу свое громоздкое решение.
vsb>На собеседованиях я сейчас первым делом даю задачу — написать на JS функцию isPalyndromic(n) — проверить, является ли число палиндромом в десятичной записи. Предполагаемое решение — преобразовать число в строку и сравнить символы. Ожидается, что кандидат знает основы JS (как число в строку преобразовать), умеет писать хоть какой-то код, умеет писать циклы, понимает, что такое массивы. Ну и вообще умеет читать формально поставленную задачу и преобразовать её в программный код. Мой идеальный джуниор должен построить m без преобразования в строку (перевернутая n) и вернуть return n === m (эффективное и с какой-то точки зрения изящное алгоритмически решение без выделения лишней памяти). <...>
При наличии запрета на преобразование числа в строку решение вполне себе тривиальное, хотя one-liner'ом, наверное, уже не обойтись. Ниже привожу свое громоздкое решение.
JavaScript Inside | |
| |