• Что такое список в функциональных языках программирования?

    Отвечу за Haskell.
    Вот список:
    data [a] = [] | a : [a]
    Т.е. список либо пуст, либо имеет [ссылку на] [недовычисленную] голову и [ссылку на] [недовычисленный] другой список - хвост. Т.о. чтобы пробежаться по списку (без использования готовых функций), надо проверять, не является ли он пустым, если нет, работать с головой, а хвост обрабатывать рекурсивно.
    Список иммутабельный, т.е. ничего никуда вставить нельзя, однако списки могут "шарить" общий хвост, например:
    list1 = [2,3,4]
    list2 = 1 : 2 : list1
    list3 = 0 : 0 : list1

    В памяти будет (после форсирования, рассмотрение ленивости я опускаю) как-то так:
    1-2
       \
        2-3-4
       /
    0-0
    Ответ написан
    Комментировать
  • Как получить определенный элемент массива в Perl?

    targumon
    @targumon
    $el - это ссылка на хэш. Ее надо разыменовать, прежде чем обращаться к самому хэшу:
    foreach my $el (@series){
      print $el->{'login'};
    }
    Ответ написан
    1 комментарий
  • Как ускорить алгоритм?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Сначала учитываем 3*N^2 треугольников, у которых вершина с прямым углом лежит на одной из координатных осей (или вообще в точке (0,0)).
    Теперь посчитаем все остальные треугольники.
    Пусть (a,b) - координаты вершины с прямым углом, 0 < a <= N, 0 < b <= N.
    Если c=НОД(a,b), a1=a/c, b1=b/c, то оставшаяся вершина должна иметь координаты (x,y)=(a+t*b1,b-t*a1), где t - ненулевое целое число.
    Должны выполняться условия 0 <= x,y <= N. Перепишем их в виде условий на t:
    -a/b1 <= t <= (N-a)/b1, -(N-b)/a1 <= t <= b/a1 (заметим, что a1, b1 больше нуля, так что делить можно). Учитывая, что t должно быть целым, оно лежит на отрезке от
    t0 = -floor(min(a/b1,(N-b)/a1))
    до
    t1 = floor(min((N-a)/b1,b/a1))
    И, поскольку запрещённое значение 0 всегда принадлежит этому отрезку, получаем, что число треугольников с вершиной (a,b) равно t1-t0.
    Перебираем все точки (a,b), считаем t1-t0 и суммируем.
    Всё. Сложность N^2*log(N), основное время тратится на вычисление НОД.
    Если надо быстрее - надо будет думать. Скорее всего, надо будет перебирать взаимно простые пары (a1,b1), считать, сколько точек попало в перекошенный квадрат (переведённый в базис (a1,b1), (-b1,a1)), искать для них формулу и суммировать. Может быть, получится, может быть, нет. Какого порядка N?
    Ответ написан
    Комментировать
  • Как в линуксе запускать команду по расписанию автоматически (мне нужно каждые 15 минут)?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ответ написан
    Комментировать
  • Как расписать циклы через goto, а потом преобразовать в state-машину?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Возьмём программу, в которой есть и циклы, и goto. Например, проверка, есть ли в матрице нулевая строка:
    void Check(int M[5][5]){
      for(int a=0;a<5;a++){
        for(int b=0;b<5;b++){
          if(M[a][b]!=0) goto L1;
       }
       goto L2;
    L1: continue;
      }
      printf("No\n"); return;
    L2:
      printf("Yes\n"); 
    }

    Опишем все переменные в начале, а циклы распишем прямо по определению.
    Кроме того, return превратим в goto на метку Return в конце функции:
    void Check(int M[5][5]){
      int a,b;
      a=0;
      goto Loop1_Check;
    Loop1_Body:
      b=0;
      goto Loop2_Check;
    Loop2_Body:
          if(M[a][b]!=0) goto L1;
          b++;
    Loop2_Check:
          if(b<5) goto Loop2_Body;  
       goto L2;
    L1: 
    Loop1_End:
       a++;
    Loop1_Check:  
      if(a<5) goto Loop1_Body;
      printf("No\n"); goto Return;
    L2:
      printf("Yes\n"); 
    Return: ;
    }

    Теперь между любыми двумя метками у нас находится линейная последовательность, в которой могут встретиться конструкции if(condition) goto label;
    Заводим переменную state.
    Каждой метке присваиваем какое-нибудь значение этой переменной, и вместо goto label пишем state=label; а вместо if(condition) goto label; - if(condition) state=label; else{ остаток кода до следующей метки }. Если перед какой-нибудь меткой label не было безусловного goto, пишем перед ней state=label;
    void Check(int M[5][5]){
      const int Return=0;
      const int Loop1_Check=1;
      const int Loop1_Body=2;
      const int Loop2_Check=3;
      const int Loop2_Body=4;
      const int L1=5;
      const int L2=6;
    
      int state;
      int a,b;
      a=0;
      state=Loop1_Check;
    Loop1_Body:
      b=0;
     state=Loop2_Check;
    Loop2_Body:
          if(M[a][b]!=0) state=L1;
          else{
             b++;
             state=Loop2_Check;
          }
    Loop2_Check:
          if(b<5) state=Loop2_Body;  
          else state=L2;
    L1: 
          a++;
          state=Loop1_Check;
    Loop1_Check:  
      if(a<5) state=Loop1_Body;
      else{
          printf("No\n"); 
          state=Return;
      }
    L2:
      printf("Yes\n"); 
      state=Return;
    Return: ;
    }

    (это преобразование было неэквивалентным).
    Теперь перед первой меткой вставляем while(state!=Return){ switch(state){
    а каждую метку label: заменяем на break; case label:
    break; перед первой меткой убираем, а case Return: меняем на } }
    void Check(int M[5][5]){
      const int Return=0;
      const int Loop1_Check=1;
      const int Loop1_Body=2;
      const int Loop2_Check=3;
      const int Loop2_Body=4;
      const int L1=5;
      const int L2=6;
    
      int state;
      int a,b;
      a=0;
      state=Loop1_Check;
      while(state!=Return){
        switch(state){
          case Loop1_Body:
            b=0;
            state=Loop2_Check;
            break;
          case Loop2_Body:
            if(M[a][b]!=0) state=L1;
            else{
              b++;
              state=Loop2_Check;
            }
            break;
          case Loop2_Check:
            if(b<5) state=Loop2_Body;  
            else state=L2;
            break;
          case L1: 
            a++;
            state=Loop1_Check;
            break;
          case Loop1_Check:  
             if(a<5) state=Loop1_Body;
             else{
                printf("No\n"); 
                state=Return;
             }
             break;
           case L2:
              printf("Yes\n"); 
              state=Return;
              break;
         }
      }
      ;
    }

    Всё.
    Ответ написан
    4 комментария
  • Как установить CURL?

    @inkvizitor68sl
    Linux-сисадмин с 8 летним стажем.
    С sources.list своими разберитесь, у вас там говно.

    А так:
    apt-get install curl=7.38.0-3 libcurl3=7.38.0-3
    или
    apt-get install curl=7.35.0-1ubuntu2.5 libcurl3=7.35.0-1ubuntu2.5
    Ответ написан
    Комментировать
  • Как защиить содержимое VM?

    edinorog
    @edinorog
    Троллей не кормить!
    никак )
    Ответ написан
    Комментировать
  • Почему в некоторых ноутбуках и компьютерах процессор Core i5?

    @bondbig
    Потому, что смотреть нужно не только (и не столько) на циферку после i, а на фактические характеристики процессоров. Иной i3 будет шустрее, чем некоторые i7.
    cpubenchmark.net/cpu_list.php, в качестве примера.
    Ответ написан
    Комментировать
  • Как отредактировать множество текстовых файлов?

    @pcdesign
    perl -pi~ -e 's/foo/bar/g' *.html

    Ну вот например однострочник.
    Подменяет foo на bar во всех файлах с расширением .html.

    Ваша задача решается в 3 однострочника.

    P.S. И этот однострочник так же сохраняет оригиналы файлов с именами html~.
    Ответ написан
    Комментировать
  • Как правильно запускать приложения в терминале Ubuntu 14.10?

    begemot_sun
    @begemot_sun
    Программист в душе.
    Это не особенность, а фича.
    По умолчанию поиск проходит по всем путям из переменной PATH + текущий каталог.
    Вот только обозначение текущего каталога нужно писать ./
    Например:
    ./project3
    тогда система поймет что вы запускаете программу (скрипт) из текущего каталога.
    Ответ написан
    1 комментарий
  • Как правильно запускать приложения в терминале Ubuntu 14.10?

    @FireGM
    Надо запускать
    ./myprogramm
    В вашем случае
    ./project3
    Ответ написан
    Комментировать
  • Какой набор ПО нужен для удобной работы на vps?

    nazarpc
    @nazarpc
    Open Source enthusiast
    Зачем?????
    Вы ставьте что вам нужно, зачем вам куча софта, который кто-то посоветует?
    Ну бредовый же вопрос.
    Ответ написан
    Комментировать
  • Как расшарить папку для смартфона(android)?

    berezuev
    @berezuev
    #define TRUE FALSE
    Если внутри локали, то просто расшарить папку по SMB протоколу, если на расстоянии, то ssh/sftp
    Ответ написан
    Комментировать
  • Где можно рассказать о своей игре большой аудитории?

    @rakro
    На тостере расскажи
    Ответ написан
    Комментировать
  • Перейдет ли ПС по ссылке если страница в robots.txt?

    Nikolaos
    @Nikolaos
    Запретить никак, захочет так зайдёт куда угодно. nofollow - запрещает ссылку к индексу. robots.txt - запрещает индексацию страницы.

    Я задавал вопрос когда то в Яндекс:

    Здравствуйте!

    У меня есть страница на сайте, которую я не хочу видеть в поиске, я её закрыл от индексации в robots.txt.
    Но на эту страницу ссылается много других страниц, как внешних так и внутренних.

    Вопросы:

    1) Если количество ссылок будет увеличиваться, то робот в какой то момент решит её добавить в индекс или он всё таки будет всегда руководствоваться запретом в robots.txt ?

    2) Нужно ли ссылки ведущие на страницу закрытую в robots.txt окружать тегами или не нужно или это роли не играет ?

    Ответ:

    1. Наш робот не индексирует запрещённые в robots.txt страницы ни при отсутствии на них ссылок, ни при наличие какого бы то ни было количества таковых.

    2. Никакой существенной роли это не играет. Есдинственное, на что влияют ссылки на запрещённые к обходу страницы - это на хранение информации об этих страницах в базе робота. При отсутствии ссылок информация о них полностью удаляется из базы робота. При наличии ссылок, робот помнит о страницах, чтобы в случае снятия запрета быстро их проиндексировать.
    Ответ написан
    Комментировать
  • Заменил процессор на ноутбуке. Пропал звук. Что делать?

    MykolaPr
    @MykolaPr Автор вопроса
    Думал что дрова. Потом решил раскрутить все обратно, и оказалось что не подключил переднюю панель с входами под наушники и микрофон. Все подключил и заработало.
    Ответ написан
    Комментировать
  • От какого компьютера клавиатура?

    Moskus
    @Moskus
    Наличие обозначений цветов в верхнем ряду и кнопка Symbol Shift - это, безусловно, Spectrum.
    Кнопка Ext Mode - это уже точно не модель с 48Кб памяти, она появилась на модели 128K.
    Далее, непродолжительный поиск по картинкам дает результат - Квант-БК МС0530, он же - "Pentagon".
    Точно такая же клавиатура использовалась и в других моделях, производившихся уже не серийно, а всякими кооперативами, в том числе, использовалась в моделях с 512К памяти, где уже был системный блок и отдельная клавиатура.
    Ответ написан
    Комментировать
  • В чем преимущества Ubuntu LTS(Long Time Support)?

    Adamos
    @Adamos
    Фактические преимущества - как раз в том, что в этом выпуске не экспериментируют с новинками, и софт в нем обкатанный.
    Если вам действительно нужен новый софт и вы готовы к некоторым неувязкам, которые могут с ним быть - наплюйте на LTS.
    Мне обычно хватает софта LTS-свежести и самостоятельной установки того, что действительно нужно свежим, руками или из ppa.
    Ответ написан
    Комментировать
  • Нормально ли, что чистая Ubuntu Server использует почти 400Мб оперативки?

    Никуда ваша память не делась. Прочитать подробнее о том, что конкретно происходит, можно здесь - linuxatemyram.ru (оригинал)
    dd70bf360bec4fa29393b49bb148b46e.png
    Ответ написан
    Комментировать
  • Зачем на linux mint по дефолту стоит apache2?

    gbg
    @gbg Куратор тега Linux
    Любые ответы на любые вопросы
    Знать бы еще, о каком представителе зоопарка вы говорите (на момент написания ответа про Mint уточнения не было):
    Linux_Distribution_Timeline.svg
    Ничего не будет.
    Ответ написан
    Комментировать