Skip to content

Instantly share code, notes, and snippets.

@s7etozar
Last active December 7, 2016 00:28
Show Gist options
  • Save s7etozar/5940df859ba3092110875d3fe602c79a to your computer and use it in GitHub Desktop.
Save s7etozar/5940df859ba3092110875d3fe602c79a to your computer and use it in GitHub Desktop.
// Функция searchСommonLetters() ищет в строке n наиболее часто встречающихся букв и выводит эту строку с выделенными буквами.
searchСommonLetters('Алиса сидела со старшей сестрой на берегу и маялась: делать ей было совершенно нечего, а сидеть без дела, сами знаете, дело нелегкое; раз-другой она, правда, сунула нос в книгу, которую сестра читала, но там не оказалось ни картинок, ни стишков. "Кому нужны книжки без картинок или хоть стишков, не понимаю!" - думала Алиса. С горя она начала подумывать (правда, сейчас это тоже было дело не из легких - от жары ее совсем разморило), что, конечно, неплохо бы сплести венок из маргариток, но плохо то, что тогда нужно подниматься и идти собирать эти маргаритки, как вдруг... Как вдруг совсем рядом появился белый кролик с розовыми глазками! Тут, разумеется, еще не было ничего такого необыкновенного; Алиса-то не так уж удивилась, даже когда услыхала, что Кролик сказал (а сказал он: "Ай-ай-ай! Я опаздываю!"). Кстати, потом, вспоминая обо всем этом, она решила, что все-таки немножко удивиться стоило, но сейчас ей казалось, что все идет как надо. Но когда Кролик достал из жилетного кармана (да-да, именно!) ЧАСЫ (настоящие!) и, едва взглянув на них, опрометью кинулся бежать, тут Алиса так и подскочила! Еще бы! Ведь это был первый Кролик в жилетке и при часах, какого она встретила за всю свою жизнь! Сгорая от любопытства, она со всех ног помчалась вдогонку за Кроликом и, честное слово, чуть-чуть его не догнала! Во всяком случае, она поспела как раз вовремя, чтобы заметить, как Белый Кролик скрылся в большой норе под колючей изгородью.', 3);
function searchСommonLetters(str, n) {
var strCopy = str.replace(/[^а-яА-ЯЁёa-zA-Z]/g, ''); // лучше удалить из текста все символы кроме букв, так как их считать по условию не надо
for (var strCutCopy = strCopy, i = 0, nMax = 0, regexp, arrMatch = [], symbolMax; i < n; i++) {
while (strCutCopy.length != 0) { // будем искать все в более и более короткой строке (строка в переменной strCutCopy будет укорачиваться при каждой итерации цикла while)
regexp = new RegExp( strCutCopy.charAt(0), 'g' );
arrMatch = strCutCopy.match(regexp); // метод вернет массив, например [а,а,а,а,а] с длиной 5, значит буква "а" встретилась в тексте 5 раз
if (arrMatch.length >= nMax) { // если данная буква встречается чаще (или с такой же частотой) чем предыдущая, которую мы искали...
nMax = arrMatch.length; // частота встречаемости данной буквы
symbolMax = strCutCopy.charAt(0); // та буква, которую мы искали, встречается чаще чем предыдущая, нужно запомнить какая именно
}
arrMatch = [];
strCutCopy = strCutCopy.replace(regexp, ''); // удаление всех повторений буквы которую мы уже искали и перезапись strCutCopy для того чтобы строка strCutCopy стала короче на след. итерации цикла while
}
console.log('Буква "' + symbolMax + '" встречается в тексте ' + nMax + ' раз(а)');
nMax = 0;
regexp = new RegExp(symbolMax, 'g');
strCutCopy = strCopy = strCopy.replace(regexp, '');
str = str.replace(regexp, '<span style = \'color: blue; font-weight: bold\'>' + symbolMax + '</span>');
}
document.write(str + '<br>');
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment