Есть несколько неверных ответов, к примеру
12 Колбек функции sort должен возвращать число, а не булево значение, это важно. Контр-пример:
[8,4,9,7,6,5,4,3,2,1,0].sort((a,b) => a > b); // [5,0,1,2,3,4,4,6,7,8,9] (в хроме)
13 Сумма кодов символов не сработает, пример
sameWords(['lnt', 'tok', 'okt']) // true
примитивное решение с сортировкой
function sameWords(arr) {
var firstSorted = arr[0].split('').sort().join('');
for (var i = 1; i < arr.length; i++) {
var sorted = arr[i].split('').sort().join('');
if (firstSorted !== sorted) return false;
}
return true;
}
У вас async/await код больно страшный. К примеру, в функции checkItems последние catch и then на одном уровне, хотя первое относится к fs.stat, а второе к Promise.all. Плюс использовать исключения для управления потоком не очень хорошо
К тому же код в примерах не эквивалентный, в promise-версии файлы фильтруются и читаются сразу, а в async-версии сначала получается список файлов, потом читается по списку — отсюда два использования Promise.all
У меня с async получилось так:
async function readFile(file) {
const stat = await promisify(fs.stat, [path.join(__dirname, file)]);
if (!stat.isFile()) {
console.error("Not a file!");
return null;
}
return await promisify(fs.readFile, [file]);
}
async function main() {
const items = await promisify(fs.readdir, [__dirname]);
const buffersOrNull = await Promise.all(items.map(readFile));
return buffersOrNull.filter(buffer => buffer !== null);
}
В абсолютных величинах это ничего бы не изменило, т.к. первый заключенный имел бы шансы 31.18% и никак больше.
У первого заключённого должно быть больше шансов, поскольку второе утверждение более слабое
1. нет ни одной последовательности, длиной больше 50
2. длина первой последовательности больше 50
gulp-copy не нужен, потому что gulp умеет выполнять задачи без трансформации, как
gulp.src('./source/js/**/*.*', {base: './source'})
.pipe(gulp.dest('./dist')) //скопирует папку js из source в dist
.pipe(gulp.dest('./deploy')); //можно использовать несколько раз
Your plugin should not do something that can be done easily with an existing node module
Wrapping every possible thing just for the sake of wrapping it will pollute the ecosystem with low quality plugins that don't make sense within the gulp paradigm.
Плагин не должен делать то, что легко делается существующим node модулем
Оборачивание всего подряд ради обертки загрязняет екосистему плагинами низкого качества, что противоречит парадигме gulp
Так что да, не нужны
gulp-requirejs — простая обертка
gulp-browserify — не поддерживается, вместо этого сам дает ссылку на рецепты, где способ запуска browserify для gulp
Почему все ссылки на гитхаб, а не на npmjs? У последнего видны количество закачек, зависимости и есть ссылка на репозиторий.
Подборка ведь для людей, которые будут использовать, а не допиливать ;)
Мне, например, нравится base64, тем что:
* его можно использовать в виде повторяющегося фона
* не нужен отдельный элемент для иконки <i class="icon"></i>
* base64 делается нажатием одной кнопки и без настроек — можно обойтись без сборки вообще, используя онлайн-декодер
* удаление иконки происходит так же просто как удаление класса из css
* добавление одной иконки никак не повлияет на другие. Со спрайтом вполне может произойти так, что неопытный специалист добавит что-то свое, пережмет из png-24 в png-8, и не заметит что стало хуже.
В общем, по мне baseurl проще. А значит, при прочих равных — лучше.
Формулировка задачи немного размыта, но судя по вот этим строчкам в решении это и требовалось
Есть несколько неверных ответов, к примеру
12 Колбек функции sort должен возвращать число, а не булево значение, это важно. Контр-пример:
13 Сумма кодов символов не сработает, пример
38 Вариант с eval не сработает вот тут:
{{}}
Это сработало бы если бы числа 1..n нельзя было бы делить
А почему он не может быть произведением 4х простых чисел > n ?
Пункты 1 и 2 друг другу противоречат, судя по всему компания уделяет большое внимание соблюдению сроков и бюджетов проектов, а не мотивации
У вас async/await код больно страшный. К примеру, в функции
checkItems
последниеcatch
иthen
на одном уровне, хотя первое относится кfs.stat
, а второе кPromise.all
. Плюс использовать исключения для управления потоком не очень хорошоК тому же код в примерах не эквивалентный, в promise-версии файлы фильтруются и читаются сразу, а в async-версии сначала получается список файлов, потом читается по списку — отсюда два использования
Promise.all
У меня с async получилось так:
правда пропадает фича с единицами измерения
У первого заключённого должно быть больше шансов, поскольку второе утверждение более слабое
1. нет ни одной последовательности, длиной больше 50
2. длина первой последовательности больше 50
1. посчитать ширину скроллбара (это
div.offsetWidth - div.clientWidth
)2. обернуть контейнер, дать обёртке свойство
overflow: hidden
3. сделать контейнеру отрицательный отступ вправо, на ширину скроллбара
Не так уж и сложно. Я так сто раз делал!
Даже писал свой плагин для кастомизации скроллбара standy.github.io/custom-scroll
Более того, для большинства браузеров это можно сделать обычным css (кроме ФФ и некоторых версий ИЕ)
blogs.msdn.com/b/kurlak/archive/2013/11/03/hiding-vertical-scrollbars-with-pure-css-in-chrome-ie-6-firefox-opera-and-safari.aspx
Всё ведь можно сделать гораздо проще:
1. скрыть нативный скролл
2. при изменении позиции скролла, перерисовать индикатор
Набросал пример в 30 строк кода: jsfiddle.net/wzttveva/3
К плюсам такого решения могу добавить:
По поводу requirejs и browserify, вот что говорится в руководстве для написания плагинов
Так что да, не нужны
gulp-requirejs — простая обертка
gulp-browserify — не поддерживается, вместо этого сам дает ссылку на рецепты, где способ запуска browserify для gulp
gulp-uncss — у вас ссылка не на тот плагин, на gulp-uncss-task, который тоже deprecated
gulp-copy — плагин сомнительной полезности, копировать файлы гулп умеет из коробки.
gulp-express — запускает не только Express.js сервер, а вообще любой
По мне, так для продакшена надо делать отдельную сборку, с минификацией и без сорсмап.
Подборка ведь для людей, которые будут использовать, а не допиливать ;)
Говорю же, каждому своё.
Что есть такого у спрайтов, чтобы их до сих пор использовать?
PS: забыл упомянуть — встраивать через data:url можно и jpeg и анимированный gif.
Мне, например, нравится base64, тем что:
* его можно использовать в виде повторяющегося фона
* не нужен отдельный элемент для иконки
<i class="icon"></i>
* base64 делается нажатием одной кнопки и без настроек — можно обойтись без сборки вообще, используя онлайн-декодер
* удаление иконки происходит так же просто как удаление класса из css
* добавление одной иконки никак не повлияет на другие. Со спрайтом вполне может произойти так, что неопытный специалист добавит что-то свое, пережмет из png-24 в png-8, и не заметит что стало хуже.
В общем, по мне baseurl проще. А значит, при прочих равных — лучше.
Размер: 11 597 байт,
В архиве: 11 613 байт
В виде строки base64
Размер: 15 464 байт
В архиве: 11 694 байт
Разница после gzip менее процента.
Попробовал поменять архиватор, тенденция сохранилась.
PS: на всякий случай прогнал картинку через punypng: No savings