Собственно, на задание отведено 15 минут и запрещено запускать консоль. Можно писать код в блокноте и объяснять ход мыслей.
Задача: Есть строка вида "AAAADEEESSQQQQQQ";
Нужно сделать простейший архиватор и выдать что-то вроде: "A4DE3S2Q6".
Поскольку собеседование я засрал, но интерес остался - вот потуги моей деятельности за 3 часа мозго-секса.
var originalString = 'HRRAAAABBZGGU';
function archiver(data) {
var elements = data.split("");
var compressedData = "";
var compressRate = 1;
var repeats = [];
var rate = '';
for( var i in elements ) {
if( elements[i++] === elements[i] ) {
var currentRate = compressRate++;
repeats.push(currentRate);
rate += currentRate - "";
}
else {
compressRate = 1;
repeats = [];
rate = '';
}
i--;
compressedData += ( repeats.length > 0 ) ? elements[i] + (Math.max.apply(null, rate.split('')) + 1 ) : ( typeof elements[i] !== 'undefined' ) ? elements[i] + '1' : '';
}
var compressedResult = compressedData.split('');
var testLetter = '';
for( var x in compressedResult) {
if( compressedResult[x++] !== compressedResult[x] ) {
x--;
testLetter += ( typeof compressedResult[x] !== 'undefined' ) ? compressedResult[x] : '';
}
}
function pairs(testLetter) {
var pairs = [];
for( var i = 0; i < testLetter.length / 2; i++ ) {
pairs.push( testLetter.slice( 2 * i, 2 * i + 2 ) );
}
return pairs;
}
var compressedDataString = '';
for( var n in pairs(testLetter) ) {
if( n == 0 && pairs(testLetter)[n].split('')[1] === '1') {
compressedDataString += pairs(testLetter)[n].split('')[0];
}
var first = pairs(testLetter)[n];
var second = ( typeof pairs(testLetter)[(n - 0)+1] !== 'undefined' ) ? pairs(testLetter)[(n - 0)+1] : '';
if( (n - 0) > 0) {
if( first.split('')[0] == second.split('')[0] ) {
compressedDataString += first.split('')[0] + first.split('')[1];
}
else {
//n++
}
}
}
console.log( compressedDataString );
return compressedData;
}
archiver(originalString);
Она выдает: HR2A2A3A4B2G2
Собсно, я знаю что это говнокод и знаю что неприкольно не доводить до конца, но пока я решал задачу дома - пришло письмо с отказом(мол не тот уровень). Кодить я бросил и предлагаю рушить задачу либо дописав мой говнокод, либо написав с нуля. Просто интересно во сколько по времени вы оцените решение данной постановы.
Я лично припарился
Не знаю что там насчет 15 минут - слишком много подводных камней бьют по мизинцам.