Для Дня 2 вам дается список, каждый со своими правилами, и вас просят вернуть количество допустимых строк.
1-3 a: abcde
1-3 b: cdefg
2-9 c: ccccccccc
В приведенном примере вам даны три строки. Цифры до и после тире говорят вам, сколько раз следующая буква должна появиться в строке справа от двоеточия. В строке: 1-3 a: abcde
буква a должна появляться от одного до трех раз в строке после двоеточия.
В приведенном выше примере ответ будет 2. В первой строке буква «a» встречается в строке от одного до трех раз. Во второй строке буква «b» вообще не появляется в строке и должна возвращать false. В третьей строке буква «c» встречается девять раз, что находится в пределах указанного лимита.
Если бы весь набор данных был передан в функцию как есть, он был бы передан в виде строки, и ее нужно было бы проанализировать. Чтобы проверить каждую отдельную строку на истинность, нам нужно будет использовать функцию .split (‘\ n’), чтобы разделить каждый фрагмент данных с помощью символа новой строки на его собственный индивидуальный фрагмент, к которому будет осуществляться доступ в массиве. В настоящее время наш код должен выглядеть примерно так:
function day2(str){
const arr = str.split('\n')
}
day2('
1-3 a: abcde
1-3 b: cdefg
2-9 c: ccccccccc
')
При этом данные будут выглядеть примерно так:
console.log(arr) // ['1-3 a: abcde
','1-3 b: cdefg
','2-9 c: ccccccccc
'] // Where arr[0] = '1-3 a: abcde
'
Теперь, когда мы можем получить доступ к каждой строке индивидуально, мы можем разбить каждую строку для анализа данных. Мы можем разделить каждый элемент на левую и правую части - шаблон и данные.
function day2(str){ let counter = 0 const arr = str.split('\n') for(let i = 0; i < arr.length; i++){ let eachLine = arr[i].split(':') let pattern = eachLine[0] let data = eachLine[1] } }
Просто взглянув на первую строку инструкций, которые нам предоставили, данные теперь выглядят примерно так:
//arr[0] = '1-3 a: abcde
' //eachLine = ['1-3 a
','abcde
'] //pattern = '1-3 a' //data = abcde
Мы почти закончили, и нам просто нужно еще несколько функций .split (), чтобы преобразовать отдельные фрагменты данных в их собственные переменные. Окончательная версия должна выглядеть примерно так.
function day2(str){ let counter = 0 const arr = str.split('\n') for(let i = 0; i < arr.length; i++){ let eachLine = arr[i].split(':') let smallBound = eachLine[0].split('-') let bigBound = smallBound[1].split(' ') let letter = bigBound[1] let count = 0 for(let i = 0; i < arr[x].length; i++){ if(splitStr[1][i] === letter){ count++ } } count >= smallBound[0] && count <= bigBound[0] ? counter++ : null } return counter }
После помещения каждой части данных в их отдельные переменные, проанализируйте правую часть строки и посчитайте и посмотрите, находится ли количество появлений между указанными числами. Вы должны сделать это для каждой строки и увеличить истинный счетчик, созданный наверху.