Профиль пользователя заблокирован сроком с 24 июля 2019 г. и навсегда по причине: нарушение п.6.1. правил Сервиса
  • Какой алгоритм решения этой задачи можете посоветовать?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    1. найти все подстроки,
    2. для каждой посчитать вес: сколько букв в ней совпадают регистром с деф.строкой
    3. взять с наибольшим.
    Плохая реализация
    // но тесты проходит
      function repairCase(src, input) {
        const len = input.length;
        if (len === 0) return '';
        
        const _src = src.toLowerCase();
        const _input = input.toLowerCase();
        let i, from = 0, maxWeight = -1, maxIndex = -1;
        while (i = _src.indexOf(_input, from), -1 !== i) {
          from = i + 1; 
          const match = src.substr(i, len);
          let weight = 0;
          for (let k = 0; k < len; k++) if (match[k] === input[k]) weight++;
          if (maxWeight < weight) {
            maxWeight = weight;
            maxIndex = i;
          }
        }
        
        if (-1 === maxIndex) return '';
        
        return src.substr(maxIndex, len);
      }
    Ответ написан
    Комментировать
  • Какой алгоритм решения этой задачи можете посоветовать?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    function repairCase(str, substr) {
    	if (!substr) return ''; //Empty string
    	//let arr = []; //Найденные результаты. Для наглядного дебага
    	let str_upper = str.toUpperCase();
    	let sub_upper = substr.toUpperCase();
    	let len = sub_upper.length;
    	let index = 0; //Стартовая позиция
    	let max_score = -1; //Максимальная оценка на совпадение по регистру.
    	let answer = ''; //То, что вернёт функция.
    	while (true) {
    		let result = str_upper.indexOf(sub_upper, index); //Ищем позицию очередного куска
    		if (result == -1) break;
    		let found = str.substr(result, len); //Найденный кусок
    		let score = 0; //Оценка совпадения
    		for(let i=0;i<substr.length;i++) { //Простой алгоритм:: чем больше совпадений, тем лучше.
    			if (substr[i] == found[i]) score++; //Увеличиваем оценку за каждое совпадение по символу.
    		}
    		if (score > max_score) { //Нашли более подходящий результат
    			max_score = score;
    			answer = found;
    		}
    		//arr.push({ pos: result, found: found, score: score });
    		index = result + 1;
    	}
    	//console.log(arr); //Смотрим, что под капотом
    	return answer;
    }

    Примеры вызова:
    repairCase('Hello World', 'hell'); // 'Hell'
    repairCase('Алан Тьюринг', 'а'); // 'а'
    repairCase('Дональд Кнут', 'Н'); // 'н'
    repairCase('Линус Торвальдс', 'ндc'); // ''


    P.S. У меня к вам встречный вопрос: вы программист? Задача решается за 10 минут.
    Ответ написан
    3 комментария
  • Как соблюсти принцип последней буквы SOLID?

    @Wentixon
    Во-первых, я советую тебе не заниматься херней, проходя всякие тупые курсы и делая свои велосипеды. Поверь, эти курсы тебя ничему хорошему не научат, я сам это все прошел - толку ровно ноль. У тебя все равно ничего хорошего не получится, так как лучшие разработчики годами оттачивают свои фреймворки, при чем заимствуя фишки друг у друга (речь идет о популярных фреймворках).

    Во-вторых, если все же у тебя шило в попе, хочется какую то херню погородить, то умные люди придумали некоторые стандарты. Условным стандартом в php являются компоненты с самого качественного фреймворка symfony, на которых кстати основан также laravel. Вот компонент роутера например. Популярные фреймворки состоят из таких мелких независимых компонентов.

    В-третьих, на будущее.. Прежде чем что то делать, посмотри как это сделано у других. Компонент роута я тебе дал, хочешь свой пилить (хотя это абсолютно бессмысленно), то пожалуйста, но лучше ты 100% не сделаешь, так что просто посмотри как сделано у них хотя бы.

    Ну а теперь отвечу на твой вопрос. Контроллеры привязываются к роутеру извне, так что внутри никаких привязок не будет. И вообще, тут не стоит говорить о SOLID, так как это этап загрузки приложения. Никто не может быть уверенным, что такой контроллер вообще найдется и в нем будет присутствовать такой метод, так что в этом случае просто будет исключение.

    Кстати можешь посмотреть эти курсы, самое толковое из того что есть
    Ответ написан
    64 комментария
  • Что такое провайдер в программировании?

    dunmaksim
    @dunmaksim
    Технический писатель
    Как правило провайдер используется для инкапсуляции более сложного кода, скрывая детали реализации. Он служит этакой обёрткой, реализуя шаблон проектирования "Фасад".
    Вы копируете файл из каталога в каталог, просто перетащив его мышью. Но как это произошло на физическом уровне? Вам этого знать не обязательно, всё скрыто под множественными слоями абстракций.
    Чтобы не думать о каких-либо низкоуровневых вещах, часто вводят провайдеры, сервисы и т.д. Суть одна - скрыть какие-либо часто используемые сложные функции и рутинную работу за простым и понятным интерфейсом.
    Ответ написан
    2 комментария
  • Dependency Injection на пальцах?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Архитектурные вопросы сложны по определению. Чтобы их понимать, нужно иметь достаточную базу знаний и опыта программирования. В идеале, чтобы понять паттерн, нужно столкнутся с проблемой, для решения которой он был придуман. Если база знаний и опыта уже есть, а понимания всё ещё нет, то прочитайте учебник, вроде "Чистой архитектуры" Мартина.

    А "на пальцах" вам сейчас дадут множество объяснений, большинство которых будут неправильными и запутают ещё больше.
    Ответ написан
    Комментировать
  • Чем отличаются дата маппер и репозиторий?

    trevoga_su
    @trevoga_su
    design-pattern.ru/patterns/repository.html

    откровенно говоря, херня а не паттерн. типа синтаксический сахар + коллекция объектов

    боюсь, кроме автора никто не даст ответ на этот вопрос. это очень частный случай очень расплывчатый паттерн.
    Ответ написан
    Комментировать
  • Сложно ли учиться программированию в ВУЗ?

    sim3x
    @sim3x
    Любое мышление можно развить практикой
    Плохой ВУЗ хуже чем его отсутствие
    Хороший ВУЗ сложно найти
    Для поступления в хороший ВУЗ потребуются ресурсы на переезд
    Верстка - не имеет никакого отношения к программингу
    Сам программинг просто оперирование блоками кода и переменными
    Программинг намного легче математики, даже школьного уровня
    Ответ написан
    Комментировать
  • Зачем мне нужна модель, если я использую ORM?

    @Mysterion
    Из WIKI:
    Модель предоставляет данные и методы работы с ними: запросы в базу данных, проверка на корректность. Модель не зависит от представления (не знает как данные визуализировать) и контроллера (не имеет точек взаимодействия с пользователем) просто предоставляя доступ к данным и управлению ими.

    Модель строится таким образом, чтобы отвечать на запросы, изменяя своё состояние, при этом может быть встроено уведомление «наблюдателей».

    Модель, за счёт независимости от визуального представления, может иметь несколько различных представлений для одной «модели».

    Проще говоря, модель является посредником между контроллером и базой данных. А в Вашем случае должна быть между контроллером и ORM.
    Это позволит в модель вынести логику получения, внесения, удаления и изменения данных в базе данных. В том числе и валидаторы всякие и т.д.
    Ответ написан
    5 комментариев
  • Зачем мне нужна модель, если я использую ORM?

    @Vitsliputsli
    В модели хранится бизнес-логика (она же domain), т.е. по-сути все самое интересное в модели. Вам нужно более внимательно изучить mvc
    Ответ написан
    Комментировать
  • Почему сlass_exists не находит класс, подключенный autoloading'ом composer?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Автозагрузка тут ни при чём, просто class_exists ожидает получить полный путь до класса вместе с пространством имён, алиасы текущего файла она не понимает.

    Вам нужно руками в проверку добавить пространство имён.
    Ответ написан
    2 комментария
  • Почему в php 7.0 работают модификаторы классов?

    DevMan
    @DevMan
    тащемта их завезли ещё в пхп5.
    в 7.1 прост расширили их действие на константы.
    Ответ написан
    Комментировать
  • Можно ли получить данные из двух таблиц, где данные второй таблицы зависят от первой?

    @ghostiam
    На Go писатель, серверов пинатель.
    SELECT *
    FROM table1 AS t1
    LEFT JOIN table2 AS t2 ON t1.id=t2.id
    Ответ написан
    2 комментария