Вот такое задание, но я только в начале пути вэб разработки, подскажите как?
в textarea можно ввести сколько угодно строк текста, отдельно в коде задан массив символов, каждый знак в массиве должен быть уникальным, и каждому знаку соответствует - число, порядковый номер этого символа в массиве. требуется для каждой строки найти сумму всех известных символов и отсортировать строки сначала по кол-ву неизвестных символов (чем меньше неизвестных символов - тем выше строка), а затем все строки с одинаковым кол-вом неизвестных символов отсортировать по сумме известных символов строки (чем больше код - тем выше строка)
|
Dixlofos,
сделать html найти темы разбить тест на строки получить массив строк. читать учебник по функциям массива https://learn.javascript.ru/ sort indexOf |
Dixlofos,
Написать решение? или сами пробовать будите? |
хотелось бы мне, конечно самому разобраться в этом вопросе, но я не откажусь от подсказки. в каком направлении думать (хотя бы примерный алгоритм)
|
Цитата:
|
Цитата:
сортировка должна быть только одна, функция сравнения сначала сравнивает количество неизвестных, потом сумму известных |
1) создаем элемент textarea и получаем его например при помощи
https://developer.mozilla.org/ru/doc.../querySelector 2) добавляем какую нибудь кнопочку по нажатию на которую будет происходить все действия. 3) по событию клик на кнопочку добавляем обработчик который будет получать value нашего textarea и делать из него массив при помощи .split(/\n/) 4) при помощи методов sort и reduce будет сортировать сразу по двум критериям (самое сложное но в гугле есть примеры) https://developer.mozilla.org/ru/doc...cts/Array/sort https://developer.mozilla.org/ru/doc...s/Array/Reduce 5) склеиваем массив в строку arr.join('\n') и вставляем обратно в textarea |
делайте все что сможете с самой сортировкой поможем
|
Цитата:
|
Цитата:
|
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <textarea id="area"></textarea><br> <button id="btn">сортировать</button> <script> var dic = ['a','b','c','d','e','f','g','h','i','j','k','l']; var ots = (s, el)=> !dic.includes(el) ? ++s : s; var sum = (s, el)=>{ var ind = dic.indexOf(el); return ind != -1 ? s + ind : s; }; btn.onclick = e => { var arr = area.value .split(/\n/) .sort((a,b)=>(a.split('').reduce(ots,0) - b.split('').reduce(ots,0) ) || (b.split('').reduce(sum,0) - a.split('').reduce(sum,0))); area.value = arr.join('\n'); }; </script> </body> </html> над производительностью не заморачивался. |
сортировка строк
j0hnik,
Alexandroppolus, :thanks: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <textarea id="area" rows="20">b a 1111b 1111a</textarea><br> <button id="btn">сортировать</button> <script> var dic = ['a','b','c','d','e','f','g','h','i','j','k','l'].reduce((obj, char, i) => (obj[char] = i, obj), {}); btn.onclick = e => { var arr = area.value .split(/\n/) .map(el => el.split("").reduce((obj,char) => (char in dic ? obj.sum += dic[char] : obj.len++, obj), {str : el, len : 0, sum : 0})) .sort((a,b)=>(a.len - b.len || b.sum - a.sum)); area.value = arr.map(Object.values).join('\n'); //строка, кол-во неизвестных, сумма известных }; </script> </body> </html> |
Здравствуйте уважаемые форумчане. Я нахожусь в начале пути. Помогите с задачей. Голову сломал и тупик.
Напишите программу которая в последовательности натуральных чисел определяет сумму чисел, кратных 6. Программа получает на вход количество чисел в последовательности, а затем сами числа. В последовательности всегда имеется число кратное 6. Кол-во чисел не превышает 100. Введённые числа не превышают 300. Программа должна ввести одно число - сумму чисел кратных 6. Вот что навоял, вариантов была масса - это последний. var summ = 0; for (var i = Number(prompt("число",0)); i<=100; i+=6){ if (i>100){ alert ("Ошибка"); } else (summ +=i); } document.write(summ +"<br/>"); Понимаю что все не правильно, но знаю как отсеять методом деления (if i%6) continue. а как отсеянное вывести на экран? И alert не работает. Большое спасибо! |
или не туда или не то написал.:blink:
|
Цитата:
|
j0hnik,
:-? получить длину массива от 1 до 100, затем элементы массива от 1 до 300, затем суммирование чисел кратных 6 из этого массива. |
я и сам плохо понимаю, но репетитор дал задачу и в интернете она тоже есть. только нет решения. количество чисел не превышает сто, а введенные числа не превышают 300. я подумал сначала что сделаю хоть как нибудь. сейчас надеюсь на Вас.
|
Так откуда возьмутся 300 если ввели 100, а нужно только каждое 6 число. Если интересно, то их две однотипные задачи. Могу и её выложить, но если смогу эту то и ту тоже.
|
Можно оптимизировать.
const arrayLength=prompt('Кол-во элементов массива',3)||3; const result=(prompt('Элементы массива через запятую','3,6,12')||'').split(',').slice(0,arrayLength).map(i=>+i.trim()).filter(i=>i%6===0).reduce((r,i)=>r+i,0); alert(result); |
Цитата:
Цитата:
|
Да наверно мне еще рано такие задачи. Ничего я так и не понял. В моем понимании последовательность натуральных чисел это 0,1,2,3,4,5,6,7,8...
т.е. вводим количество 100, раскладываем в последовательность из них находим кратные 6 и их сумму. Причем здесь 300? Или вводим 300 и так далее. Что такое введенные? Как связать количество элементов массива с элементами массива. в готовом скрипте? Пока писал начинаю вроде понимать. Элементы массива в сумме не должны превышать 300? Тогда все сходиться, а количество чисел и введенные мы вводим произвольно и непосредственно в программу. Так? |
Введенные числа в сумме не превышают 300? Тогда все сходится. В задаче не хватает слова в сумме!!! И я подумал что последовательность натуральных чисел это 1,2,3,4,5,6,7...... , а их можно произвольно. Так?
|
Задорожный Виталий, как я понял из условия задачи: 100 - максимальный размер массива, а 300 - максимальное значение элемента массива.
|
Доброго времени суток еще раз. В итоге трех дней головоломок, с Вашей помощью решил вот так:
var summ = 0; var arr = new Array (); for ( var i=1; i<101; i++){ arr[i] = i*3; if (arr[i] % 6) continue; summ += arr[i]; } document.write (summ + "</br>"); Пишу на чистом js тк библиотек пока не знаю. Может что то не так проверите пож-та. Программа получает числа до 100 в цикле, мы можем изменять количество чисел. Введенные числа ограничиваем до 300 умножением на 3 и так получаем кратные 6. Дальше суммируем получившийся массив. Как Вам? |
Цитата:
Главная задача в этой задаче понять чего имел в виду тот идиёт когда фразировал свой тренинг. |
Понял спасибо. Пойду как есть. Через неделю выложу его решение. Всем большое спасибо.
|
Цитата:
|
Цитата:
Вот решение: function summa6(n, arr) { if (arr.length <= 100) { let arr6 = arr.filter(item => !(item % 6) && item <= 300); arr6.length = n; return arr6.reduce((sum, item) => sum + item); } } console.log(summa6(10, [1, 2, 3, 4, 5, 6, 7, 12, 24, 54, 300, 350, 1014])); Интересно, прокатит или по условию нужно ещё проверять массив на кратность? Я понимаю так, что у того лектора в массиве уже имеется число кратное 6. Цитата:
Если не имеется, то разбить ему лицо и в код добавить проверку чтоб в массиве было кратное 6. |
Интересный код. Я его понял так - Объявляем функцию и глобальные переменные(включая массив), в функции длина массива меньше либо равно 100. Далее внутри условия локальная переменная сортирует числа кратные 6 и меньше либо равно 300. Присваиваем локальную переменную к глобальной. Завершаем функцию и суммируем перебор. За функцией выводим результат. ГЕНИАЛЬНО!!! Много нового узнал! Один вопрос по последней строчке кода. Откуда цифра 10. В квадратных понятно - это массив и я так понял произвольно набранный.
Огромное спасибо! |
Цитата:
|
Цитата:
Скорей всего вам такое решение нужно: function summa_6(n, arr) { if (arr.length <= 100) { let arr_6 = []; for (let i = 0; i < arr.length; i++) { if (!(arr[i] % 6) && arr[i] <= 300) { arr_6.push(arr[i]); } } //console.log(arr_6); let sum = 0; for (let i = 0; i < arr_6.length && i < n; i++) { sum += arr_6[i]; } //console.log(sum); return sum; } } // Пример вызова: summa_6(5, [1, 2, 3, 4, 5, 6, 7, 8, 12, 24, 300, 350, 450, 1250, 18, 36]); логи можете удалить или раскомментировать чтоб посмотреть массив кратный 6 и результат. |
Существует множество натуральных чисел N, из которых можно составить, например, такие последовательности
⟨0, 1, 2, 3, ...⟩ возрастающая последовательность элементов множества натуральных чисел. ⟨1, 10, 100, 1000, ...⟩ последовательность степеней десяти ⟨2, 3, 5, 7, ...⟩ последовательность простых чисел ⟨0, 1, 0, 1, ...⟩ чередующаяся последовательность 0 и 1 Все эти последовательности являются последовательностями натуральных чисел, поскольку элементы этих последовательностей принадлежат множеству натуральных чисел. Троеточие в записи последовательности указывает на бесконечность последовательности, т. е. вы можете всегда получить следующее число последовательности независимо от того, сколько чисел вы уже получили. Последовательность ⟨5, 4, 10, 8⟩ составлена из конечного числа элементов множества натуральных чисел. Количество чисел в этой последовательности – 4. Я могу попросить вас составить для меня последовательность, состоящую из i чисел. Вы составляете ⟨n₁, n₂, n₃, ..., nᵢ⟩, где n₁, n₂, n₃, ..., nᵢ принадлежат множеству натуральных чисел. Вы их выбираете в любом порядке. (вариантов – бесконечное число) И это тоже последовательность натуральных чисел. Цитата:
Код:
Алгоритм: суммирование чисел, кратных 6 function summation(seq) { return seq.reduce((sum, v) => v % 6 === 0 ? sum + v : sum, 0); }Вот суть решения. Но, почему это так сложно и вызывает затруднения? Цитата:
Согласно алгоритму, ответ вычисляется за один проход по массиву. Однако почему-то в теме считается, что что-то там можно неожиданно для всех оптимизировать до двух или даже трёх!!! проходов по массиву. Цитата:
Ещё мне интересно, почему утверждение «Кол-во чисел не превышает 100» вы переделываете в «Кол-во чисел не может быть больше 100»? Если последовательность составлена из чисел множества натуральных чисел N без нуля, то из утверждения «В последовательности всегда имеется число кратное 6» можно вывести утверждение «Сумма чисел кратных 6 не равна 0». Вы же почему-то сомневаетесь, что это так, и предполагаете, что «В последовательности всегда должно быть число кратное 6». Факты о входных данных дают вам гарантии. Пользователь может ввести последовательность натуральных чисел ⟨300, 300, 300, ..., 300⟩ состоящую из 100 элементов. Все числа кратны 6 и сумма равна 30000. Это гарантирует вам, как программисту на JavaScript, что результат вычислен верно, поскольку результат не больше наибольшего безопасного целого числа Number.MAX_SAFE_INTEGER. В типизированных языках это помогло бы выбрать необходимый числовой тип. Вот моё решение... (function main() { alert( "Программа, которая в последовательности натуральных " + "чисел определяет сумму всех чисел, кратных 6" ); var sum = 0; var n = +prompt("Введите количество чисел в последовательности"); var v; for(var i = 1; i <= n; i++) { v = +prompt("Введите число (" + i + " из " + n + ")"); if(v % 6 === 0) sum += v; } alert("Сумма чисел, кратных 6 – " + sum); })(); |
Часовой пояс GMT +3, время: 09:57. |