Показать сообщение отдельно
  #1 (permalink)  
Старый 30.01.2018, 16:13
Аватар для xShift
Профессор
Отправить личное сообщение для xShift Посмотреть профиль Найти все сообщения от xShift
 
Регистрация: 22.11.2016
Сообщений: 212

Тестовое задание Yandex
Собственно, на задание отведено 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 минут - слишком много подводных камней бьют по мизинцам.
Ответить с цитированием