• Можно ли посчитать количество цифр в документе, в котором содержатся результаты подсчёта?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Я не уверен, можно ли решить эту задачу, если документ состоит из 97 девяток.
    Ещё одна девятка будет в левом столбце таблицы. Какая-нибудь из цифр от 0 до 8 вряд ли встретится 9 раз. Так что девяток будет 98+ число девяток в последней клетке таблицы. Вот и получается:
    Если в последней клетке 0 девяток, то в ней число 98+0=98
    Если в ней одна девятка, то в ней 98+1=99
    Если в ней две девятки, то в ней 98+2=100
    Во всех случаях получаем противоречие.

    UPD. Задача решается довольно просто.
    Пусть у нас уже собрана статистика о числе разных цифр в теле документа (B[0] нулей, B[1] единиц...)
    Сразу прибавим к этим числам по единичке, чтобы учесть левый столбик.
    Оценим сверху число цифр в правой части таблицы. Например, как S=10*(log_10(B[0]+..+B[9])+2).
    Каждая цифра в полном документе встретится не более B[n]+S раз, значит, в правой части таблицы для неё будет число, лежащее от D0[n]=B[n] до D1[n]=B[n]+S.
    Прооптимизируем диапазоны D0..D1. Для этого для каждой цифры переберём все числа от D0[n] до D1[n], посмотрим количество разных цифр в каждом из этих чисел, возьмём минимальное и максимальное значение вхождений. Например, если D0[n]=997, D1[n]=1013, то в клетке, соответствующей n, 0,1 и 9 могут встретиться от 0 до 3 раз, а остальные цифры - 0 или 1 раз.
    Просуммируем полученные диапазоны по всем n - получим новую таблицу диапазонов D0n,D1n. Пересечём их с D0,D1.
    Есть 3 варианта.
    Все полученные диапазоны совпали с D0..D1. Выходим из цикла.
    Один из новых диапазонов пуст. В этой ветке решений нет, возвращаемся из функции.
    Какой-то диапазон изменился. Продолжаем оптимизировать.

    После того, как диапазоны стабилизировались, смотрим их длины. Если все они длины 1 (т.е. D0=D1), то мы нашли решение. Если нет - то берём самый короткий диапазон длины больше 1, перебираем все его значения D0[n]<=u<=D1[n], подставляем каждое из них в копию таблицы диапазонов (D0n[n]=D1[n]=u) и рекурсивно вызываем функцию оптимизации.
    Перебор оказывается небольшим, вот примеры (ncall - число рекурсивных вызовов):

    For 1 2 3 4 5 6 7 8 9 10
    0->5 1->7 2->5 3->5 4->6 5->10 6->9 7->10 8->10 9->12
    ncall=696

    For 1 1 1 0 0 0 0 0 0 0
    0->2 1->7 2->5 3->1 4->1 5->2 6->1 7->2 8->1 9->1
    ncall=486

    For 0 0 0 0 0 0 1 0 0 0
    ncall=464

    For 0 0 0 0 0 0 0 1 0 0
    0->1 1->7 2->2 3->3 4->1 5->1 6->1 7->3 8->1 9->1
    0->1 1->6 2->3 3->3 4->1 5->1 6->2 7->2 8->1 9->1
    0->1 1->6 2->4 3->1 4->2 5->1 6->2 7->2 8->1 9->1
    ncall=482

    For 3997 19995 5677 998 799996 392 7 94 8998 99985
    0->4014 1->20000 2->5679 3->1000 4->800001 5->394 6->10 7->96 8->9000 9->99994
    0->4013 1->20001 2->5679 3->1001 4->800000 5->394 6->10 7->96 8->9000 9->99994
    ncall=47356
    Ответ написан
    4 комментария
  • Можно ли посчитать количество цифр в документе, в котором содержатся результаты подсчёта?

    Spetros
    @Spetros
    IT-шник
    Можно ли посчитать количество цифр в документе, в котором содержатся результаты подсчёта?

    Можно. Сама задача сбора статистики - довольно тривиальна.
    Если речь о практической реализации, то, например, в msword возможно скриптами на VB такое сделать.

    UPD Пять минут гугления и выясняем, что это было придумано до нас и называется "A self-referencing number problem"
    Ответ написан
    6 комментариев
  • OOCSS, ACSS, BEM, SMACSS, MCSS?

    @ugodrus
    Согласен с @aen. Есть ещё одна хитрость. Сейчас микроформаты набирают силу. И по этой причине стараюсь для общей вёрстки с использованием классов использовать префиксы.
    Ответ написан
    Комментировать
  • Как создать перегруженный конструктор класса в JS?

    Shuhrat
    @Shuhrat
    У Джона Резига была статья, вот только без проверки типа данных
    Ответ написан
    Комментировать
  • Как создать перегруженный конструктор класса в JS?

    @egorinsk
    У вас очень странное (не)понимание ООП, писать в конструктор объекта код рисования — похоже на наркоманство. Вообще, писать в конструкторе сколько-нибудь сложный код — плохая идея. Если вы хотите нарисовать круг, сделайте метод drawCircle(...)

    То. что вы спрашиваете в вопросе, называется не перегрузка функции (в яваскрипт нельзя делать такие вещи), а значения аргументов по умолчанию. Чтобы их сделать, используем тот факт, что непереданный аргумент имеет значение undefined:

    function (arg1, arg2, arg3) {
    arg2 = arg2 || 10; // значение по умолчанию
    arg3 = arg3 || 20;


    }

    Как видите, получилось совсем не сложно!
    Ответ написан
    7 комментариев
  • Как создать перегруженный конструктор класса в JS?

    Stdit
    @Stdit
    А зачем вам объект «окружность»? Что вы с ним потом собираетесь делать, ради чего здесь он создаётся? Может проще написать просто какой-нибудь «хелпер»:
    helpers.circle = function (context, x, y, radius, color) {
        context.arc(x, y, radius, startDegrees, endDegrees, counterClockwise);
        context.fillStyle = color;
        context.fill();
    }
    

    Ну или завести объект «рисовальщик», хранящий ссылку на графический контекст и настройки рисования, и имеющий необходимые методы (вроде приведённого выше) для работы с этим контекстом:
    function Painter(context, defaultColor) {
        this.context = context;
        this.defaultColor = defaultColor;
        this.circle = function (x, y, r, color) {
            if (color === undefined) {
                color = this.defaultColor;
            } 
            this.context.arc(x, .... // code
        }
    }
    

    Это если вам нужно наследование. Объекты по-моему имеет смысл создавать только для реально существующих инстансов (спрайты, например, от которых наследуются игровые объекты и персонажи). Если окружность — это динамический объект, тогда можно уже думать и крутить, в зависимости от архитектуры графики, например так:
    function Circle(x, y, r, color) {
        this.x = x;
        this.y = y;
        this.r = r;
        this.color = color;
        this.render = function (context) {
            context.arc(this.x, ... 
        }
    }
    
    Ответ написан
    6 комментариев
  • Как создать перегруженный конструктор класса в JS?

    sdevalex
    @sdevalex
    В вашем случае просто пишите…
    function Circle(x, y, radius, color, startDegrees, endDegrees, counterClockwise)
    {
    }
    
    Если не передать нужное число параметров, то незадействованые станут undefined.

    Если нужно передеавать разные в разном порядке, то передавайте объект options…
    function Circle(options)
    {
    }
    

    Пример…
    new Circle({ radius: 10, x: 40, y: 30 });
    

    На CoffeeScript ещё лучше:
    new Circle radius: 10, x: 40, y: 30
    
    Ответ написан
    2 комментария
  • Как обновить большой объём данных?

    miraage
    @miraage
    Старый прогер
    Вы уверены, что не можете в начало скрипта написать следующий код?
    ini_set('max_execution_time', 0);
    
    Ответ написан
    1 комментарий
  • Как обновить большой объём данных?

    @Silver_Clash
    Добавить в таблицу пользователей столбец с датой последнего обновления. Скрипт научить самому находить себе жертву и запускать его по расписанию каждую минуту. При этом потребуется всего одно правило, а скрипт сам будет находить пользователей которых надо апдейтить.
    Ответ написан
    Комментировать
  • Как обновить большой объём данных?

    @s0rr0w
    1. Сделать асинхронной задачу парсинга и обновления данных. Парсер создает пул задач для обновления, потом второй скрипт производит обработку этого пула, обновляя нужные данные.

    2. Попробовать реализовать обновление триггером. Как только парсер выдернул данные и вставил в базу, они автоматом обновятся в нужных таблицах. Нужно помнить, что не всегда этот способ хорош, и может уложить на лопатки базу из-за постоянной индексации или наоборот, редкой индексации.
    Ответ написан
    1 комментарий
  • Автоматическое добавление VirtualHosts в apache2 [Ubuntu Server]?

    @max_rip
    rewrite можно включить в .htaccess тем более, что задача скорее всего для тестов.
    А по поводу перебора каталогов
    for dir in `ls -F1 /где_смотреть | grep -e ./ | tr -d \/`
    do
    echo $dir
    done
    
    Ответ написан
    2 комментария
  • Подскажите план обучения программированию под андроид

    night_amir
    @night_amir
    1) Берешь книжку по Android
    2) Знакомишься с основами
    3) ставишь перед собой задачу написать то или иное приложение
    4) пишешь его, постоянно гугля и решая кучу проблем
    5) Продаешь. :)

    Написание каждого приложение уникально. Постоянно возникают проблемы, с которыми ты еще не сталкивался, поэтому все зависит от того, какое ты приложение или игру пишешь.
    Ответ написан
    2 комментария
  • Как восстановить grub 1.99?

    RoboSloNE
    @RoboSloNE
    Согласен с mark_ablov, вероятно, что диск отключен или поврежден.

    Однако:

    Может поможет, в случае, если в ОС таки получается загрузиться:
    1. Лезем в файловую систему, ищем /etc/fstab, смотрим какому диску принадлежит этот UUID. Допустим, это /dev/sda1.
    2. $ blkid /dev/sda1 [это выдаст нам UUID диска]
    3. Меняем в /etc/fstab UUID на правильный.
    4. # mount -a

    Если не получается загрузиться в ОС, то:
    С загрузочной флешки лезем в консоль:
    $ sudo update-grub
    Ответ написан
    5 комментариев
  • Библиотеку javascript для мобильных платформ?

    barmaley_exe
    @barmaley_exe
    Есть еще jQueryMobile.
    Ответ написан
    Комментировать
  • Библиотеку javascript для мобильных платформ?

    marcus
    @marcus
    Я знаю только Сенчу: www.sencha.com/products/touch. Очень тяжелая, но работает хорошо на айдевайсах. В Опере не тестировал, вряд ли под нее вообще что-то есть.
    Ответ написан
    2 комментария
  • Книги и материалы по InDesign

    rossomachin
    @rossomachin
    Про InDesign есть замечательный видео-курс от Lynda.com.
    Ответ написан
    1 комментарий