08.05.2023, 23:37
|
Новичок на форуме
|
|
Регистрация: 03.06.2011
Сообщений: 1
|
|
Как преобразовать массив [1,1,Q,1,R] в строку "2Q1R"
Есть массив [1,1,1,Q,1,1,R,1]
Как получить строку вида " 3Q2R1 " т.е. все единицы которые идут подряд - плюсуются;
или, для примера, массив [1,1,N,W,1,1,1,Q] требуемая строка на выходе = " 2NW3Q " (т.е если подряд единицы то они плюсуются).
Неделю копаю, не осилю, помогите пожалуйста. Заранее благодарен!
|
|
09.05.2023, 01:38
|
|
Профессор
|
|
Регистрация: 19.01.2012
Сообщений: 505
|
|
querubin,
function str_pack(arr) {
var acc = 0, str = '';
for( i in arr ){
if( isNaN(arr[i]) )
str = str + (acc > 0 ? acc : '') + arr[i],
acc = 0;
else
acc = +arr[i] + acc;
}
if( acc > 0 ) str += acc;
return str;
}
console.log(str_pack([1,1,'Q',1,'R']));
console.log(str_pack([1,1,1,'Q',1,1,'R',1]));
console.log(str_pack([1,1,'N','W',1,1,1,'Q']));
Последний раз редактировалось Белый шум, 09.05.2023 в 01:40.
|
|
09.05.2023, 06:58
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,123
|
|
querubin ,
function str_pack(arr) {
return arr.join('').replace(/1+/g, a => a.length)
}
console.log(str_pack([1,1,'Q',1,'R']));
console.log(str_pack([1,1,1,'Q',1,1,'R',1]));
console.log(str_pack([1,1,'N','W',1,1,1,'Q']));
|
|
09.05.2023, 10:59
|
|
Профессор
|
|
Регистрация: 19.01.2012
Сообщений: 505
|
|
рони,
Респект.
|
|
09.05.2023, 18:47
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,589
|
|
рони, прикольно. Единственный вопрос - что делать в таком случае [1,1,'Q',11,'R'] (если он возможен).)
__________________
29375, 35
|
|
10.05.2023, 12:49
|
|
Аспирант
|
|
Регистрация: 26.01.2014
Сообщений: 78
|
|
Бомж-стайл вариант:
function f(ar){
let res = [0];
ar.forEach( n => typeof n == 'number' && typeof res[ res.length - 1 ] == 'number' ? res[ res.length - 1 ] += n : res.push(n) );
return res.join('').replace( /^0/, '' );
}
console.log( f( [1, 1, 'Q', 1, 'R'] )); //2Q1R
console.log( f( [1, 1, 1, 'Q', 1, 1, 'R', 1] ) ); // 3Q2R1
console.log( f( [1, 1, 'N', 'W', 1, 1, 1, 'Q'] ) ); // 2NW3Q
/*****/
console.log( f( [1, 11, 'N', 'W', 3, 55 , 0, 'Q'] ) ); // 12NW58Q
console.log( f( ['A', 1, 21, 'N', 'W', 3, 55, 0, 'Q', 4] ) ); // A22NW58Q4
console.log( f( ['A','CDE', 1, 21, 'N', 'W', 3, 'Q', 4] ) ); // ACDE22NW3Q4
|
|
10.05.2023, 13:43
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,123
|
|
Cuntmann,
function f(ar) {
let i = 0;
for (let n of ar.slice(1)) {
if (typeof (n + ar[i]) == 'number') ar[i] += n;
else ar[++i] = n;
}
ar.length = ++i;
return ar.join('');
}
console.log(f([1, 1, 'Q', 1, 'R'])); //2Q1R
console.log(f([1, 1, 1, 'Q', 1, 1, 'R', 1])); // 3Q2R1
console.log(f([1, 1, 'N', 'W', 1, 1, 1, 'Q'])); // 2NW3Q
/*****/
console.log(f([1, 11, 'N', 'W', 3, 55, 0, 'Q'])); // 12NW58Q
console.log(f(['A', 1, 21, 'N', 'W', 3, 55, 0, 'Q', 4])); // A22NW58Q4
console.log(f(['A', 'CDE', 1, 21, 'N', 'W', 3, 'Q', 4])); // ACDE22NW3Q4
|
|
10.05.2023, 14:32
|
|
Аспирант
|
|
Регистрация: 26.01.2014
Сообщений: 78
|
|
рони,
|
|
10.05.2023, 15:28
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,227
|
|
Подкину и я свои 5коп...
function f(ar) {
const o = ar.reduce((o, v) => (typeof v === 'number'
? o.n += v
: (o.t += (o.n || '') + v, o.n = 0)
, o), {t: '', n: 0})
return o.t + (o.n || '')
}
console.log(f([1, 1, 'Q', 1, 'R'])); //2Q1R
console.log(f([1, 1, 1, 'Q', 1, 1, 'R', 1])); // 3Q2R1
console.log(f([1, 1, 'N', 'W', 1, 1, 1, 'Q'])); // 2NW3Q
/*****/
console.log(f([1, 11, 'N', 'W', 3, 55, 0, 'Q'])); // 12NW58Q
console.log(f(['A', 1, 21, 'N', 'W', 3, 55, 0, 'Q', 4])); // A22NW58Q4
console.log(f(['A', 'CDE', 1, 21, 'N', 'W', 3, 'Q', 4])); // ACDE22NW3Q4
Но вариант с регуляркой явно не переплюнуть...
Последний раз редактировалось ksa, 10.05.2023 в 15:44.
|
|
|
|