From 638c4cc6ef6c60ce7360c63fa26eb92f26a989b9 Mon Sep 17 00:00:00 2001 From: Aleksey Lobanov Date: Fri, 3 Jul 2015 18:12:48 +0300 Subject: [PATCH] New article --- archives.html | 2 + author/aleksei-lobanov.html | 14 ++ authors.html | 2 +- categories.html | 1 + category/proekty.html | 82 +++++++++++ feeds/all.atom.xml | 2 +- feeds/all.rss.xml | 2 +- feeds/feed.atom.xml | 2 +- feeds/feed.rss.xml | 2 +- feeds/proekty.atom.xml | 2 + feeds/tag-proekt.atom.xml | 2 + index.html | 14 ++ pages/about.html | 8 +- .../index.html | 130 ++++++++++++++++++ tag/proekt.html | 82 +++++++++++ tags.html | 1 + 16 files changed, 342 insertions(+), 6 deletions(-) create mode 100644 category/proekty.html create mode 100644 feeds/proekty.atom.xml create mode 100644 feeds/tag-proekt.atom.xml create mode 100644 posts/eshche-odno-vychislenie-vyrazhenii/index.html create mode 100644 tag/proekt.html diff --git a/archives.html b/archives.html index ff651a1..7ac73ff 100644 --- a/archives.html +++ b/archives.html @@ -30,6 +30,8 @@

Archives for Ещё один матблог

+
Пт. 03 Июль 2015
+
Еще одно вычисление выражений
Пт. 17 Апрель 2015
Мой первый пост
diff --git a/author/aleksei-lobanov.html b/author/aleksei-lobanov.html index d6f545f..d76d52b 100644 --- a/author/aleksei-lobanov.html +++ b/author/aleksei-lobanov.html @@ -49,6 +49,20 @@
    +
  1. +
    +
    + +

    Еще одно вычисление выражений

    +
    +
    +

    На хабре когда-то увидел статью про то, что в Яндексе двум сотрудникам дали задачу на написание приложения, для вычисления выражений. Менеджер справился за 4 часа, а программист за два. Я решил попробовать свои силы.

    +
    +
    +
  2. +
  3. diff --git a/authors.html b/authors.html index 7a7d3e2..801b288 100644 --- a/authors.html +++ b/authors.html @@ -29,7 +29,7 @@

    Authors on Ещё один матблог

    -
    diff --git a/categories.html b/categories.html index 412b63e..83fc1f4 100644 --- a/categories.html +++ b/categories.html @@ -29,6 +29,7 @@ diff --git a/category/proekty.html b/category/proekty.html new file mode 100644 index 0000000..cc02469 --- /dev/null +++ b/category/proekty.html @@ -0,0 +1,82 @@ + + + + + + + + + Ещё один матблог - Проекты + + + + + + + + + + + + + + + + + + + + +
    + +
    +
      +
    1. +
      +
      + +

      Еще одно вычисление выражений

      +
      +
      +

      На хабре когда-то увидел статью про то, что в Яндексе двум сотрудникам дали задачу на написание приложения, для вычисления выражений. Менеджер справился за 4 часа, а программист за два. Я решил попробовать свои силы.

      +
      +
      +
    2. +
      +
    +
    + Page 1 / 1 +
    + +
    +
    + + + + + \ No newline at end of file diff --git a/feeds/all.atom.xml b/feeds/all.atom.xml index 62267f6..7f1c930 100644 --- a/feeds/all.atom.xml +++ b/feeds/all.atom.xml @@ -1,2 +1,2 @@ -Ещё один матблогhttp://likemath.ru/2015-04-17T13:35:00+03:00Мой первый пост2015-04-17T13:35:00+03:00Алексей Лобановtag:likemath.ru,2015-04-17:posts/moi-pervyi-post/<p>Кратко о том, почему я сделал&nbsp;блог.</p> \ No newline at end of file +Ещё один матблогhttp://likemath.ru/2015-07-03T17:40:00+03:00Еще одно вычисление выражений2015-07-03T17:40:00+03:00Алексей Лобановtag:likemath.ru,2015-07-03:posts/eshche-odno-vychislenie-vyrazhenii/<p>На хабре когда-то увидел статью про то, что в Яндексе двум сотрудникам дали задачу на написание приложения, для вычисления выражений. Менеджер справился за 4 часа, а программист за два. Я решил попробовать свои&nbsp;силы.</p>Мой первый пост2015-04-17T13:35:00+03:00Алексей Лобановtag:likemath.ru,2015-04-17:posts/moi-pervyi-post/<p>Кратко о том, почему я сделал&nbsp;блог.</p> \ No newline at end of file diff --git a/feeds/all.rss.xml b/feeds/all.rss.xml index e90d9d4..b9435c5 100644 --- a/feeds/all.rss.xml +++ b/feeds/all.rss.xml @@ -1,2 +1,2 @@ -Ещё один матблогhttp://likemath.ru/Project Euler и остальноеFri, 17 Apr 2015 13:35:00 +0300Мой первый постhttp://likemath.ru/posts/moi-pervyi-post/<p>Кратко о том, почему я сделал&nbsp;блог.</p>Алексей ЛобановFri, 17 Apr 2015 13:35:00 +0300tag:likemath.ru,2015-04-17:posts/moi-pervyi-post/блог \ No newline at end of file +Ещё один матблогhttp://likemath.ru/Project Euler и остальноеFri, 03 Jul 2015 17:40:00 +0300Еще одно вычисление выраженийhttp://likemath.ru/posts/eshche-odno-vychislenie-vyrazhenii/<p>На хабре когда-то увидел статью про то, что в Яндексе двум сотрудникам дали задачу на написание приложения, для вычисления выражений. Менеджер справился за 4 часа, а программист за два. Я решил попробовать свои&nbsp;силы.</p>Алексей ЛобановFri, 03 Jul 2015 17:40:00 +0300tag:likemath.ru,2015-07-03:posts/eshche-odno-vychislenie-vyrazhenii/проектМой первый постhttp://likemath.ru/posts/moi-pervyi-post/<p>Кратко о том, почему я сделал&nbsp;блог.</p>Алексей ЛобановFri, 17 Apr 2015 13:35:00 +0300tag:likemath.ru,2015-04-17:posts/moi-pervyi-post/блог \ No newline at end of file diff --git a/feeds/feed.atom.xml b/feeds/feed.atom.xml index 1df9dfc..a10a86b 100644 --- a/feeds/feed.atom.xml +++ b/feeds/feed.atom.xml @@ -1,2 +1,2 @@ -Ещё один матблогhttp://likemath.ru/2015-04-17T13:35:00+03:00Мой первый пост2015-04-17T13:35:00+03:00Алексей Лобановtag:likemath.ru,2015-04-17:posts/moi-pervyi-post/<p>Кратко о том, почему я сделал&nbsp;блог.</p> \ No newline at end of file +Ещё один матблогhttp://likemath.ru/2015-07-03T17:40:00+03:00Еще одно вычисление выражений2015-07-03T17:40:00+03:00Алексей Лобановtag:likemath.ru,2015-07-03:posts/eshche-odno-vychislenie-vyrazhenii/<p>На хабре когда-то увидел статью про то, что в Яндексе двум сотрудникам дали задачу на написание приложения, для вычисления выражений. Менеджер справился за 4 часа, а программист за два. Я решил попробовать свои&nbsp;силы.</p>Мой первый пост2015-04-17T13:35:00+03:00Алексей Лобановtag:likemath.ru,2015-04-17:posts/moi-pervyi-post/<p>Кратко о том, почему я сделал&nbsp;блог.</p> \ No newline at end of file diff --git a/feeds/feed.rss.xml b/feeds/feed.rss.xml index a7806b4..ca24ff0 100644 --- a/feeds/feed.rss.xml +++ b/feeds/feed.rss.xml @@ -1,2 +1,2 @@ -Ещё один матблогhttp://likemath.ru/Project Euler и остальноеFri, 17 Apr 2015 13:35:00 +0300Мой первый постhttp://likemath.ru/posts/moi-pervyi-post/<p>Кратко о том, почему я сделал&nbsp;блог.</p>Алексей ЛобановFri, 17 Apr 2015 13:35:00 +0300tag:likemath.ru,2015-04-17:posts/moi-pervyi-post/блог \ No newline at end of file +Ещё один матблогhttp://likemath.ru/Project Euler и остальноеFri, 03 Jul 2015 17:40:00 +0300Еще одно вычисление выраженийhttp://likemath.ru/posts/eshche-odno-vychislenie-vyrazhenii/<p>На хабре когда-то увидел статью про то, что в Яндексе двум сотрудникам дали задачу на написание приложения, для вычисления выражений. Менеджер справился за 4 часа, а программист за два. Я решил попробовать свои&nbsp;силы.</p>Алексей ЛобановFri, 03 Jul 2015 17:40:00 +0300tag:likemath.ru,2015-07-03:posts/eshche-odno-vychislenie-vyrazhenii/проектМой первый постhttp://likemath.ru/posts/moi-pervyi-post/<p>Кратко о том, почему я сделал&nbsp;блог.</p>Алексей ЛобановFri, 17 Apr 2015 13:35:00 +0300tag:likemath.ru,2015-04-17:posts/moi-pervyi-post/блог \ No newline at end of file diff --git a/feeds/proekty.atom.xml b/feeds/proekty.atom.xml new file mode 100644 index 0000000..8de8be8 --- /dev/null +++ b/feeds/proekty.atom.xml @@ -0,0 +1,2 @@ + +Ещё один матблогhttp://likemath.ru/2015-07-03T17:40:00+03:00Еще одно вычисление выражений2015-07-03T17:40:00+03:00Алексей Лобановtag:likemath.ru,2015-07-03:posts/eshche-odno-vychislenie-vyrazhenii/<p>На хабре когда-то увидел статью про то, что в Яндексе двум сотрудникам дали задачу на написание приложения, для вычисления выражений. Менеджер справился за 4 часа, а программист за два. Я решил попробовать свои&nbsp;силы.</p> \ No newline at end of file diff --git a/feeds/tag-proekt.atom.xml b/feeds/tag-proekt.atom.xml new file mode 100644 index 0000000..08941a6 --- /dev/null +++ b/feeds/tag-proekt.atom.xml @@ -0,0 +1,2 @@ + +Ещё один матблогhttp://likemath.ru/2015-07-03T17:40:00+03:00Еще одно вычисление выражений2015-07-03T17:40:00+03:00Алексей Лобановtag:likemath.ru,2015-07-03:posts/eshche-odno-vychislenie-vyrazhenii/<p>На хабре когда-то увидел статью про то, что в Яндексе двум сотрудникам дали задачу на написание приложения, для вычисления выражений. Менеджер справился за 4 часа, а программист за два. Я решил попробовать свои&nbsp;силы.</p> \ No newline at end of file diff --git a/index.html b/index.html index c572575..968343e 100644 --- a/index.html +++ b/index.html @@ -49,6 +49,20 @@
      +
    1. +
      +
      + +

      Еще одно вычисление выражений

      +
      +
      +

      На хабре когда-то увидел статью про то, что в Яндексе двум сотрудникам дали задачу на написание приложения, для вычисления выражений. Менеджер справился за 4 часа, а программист за два. Я решил попробовать свои силы.

      +
      +
      +
    2. +
    3. diff --git a/pages/about.html b/pages/about.html index 26b4a49..0923d9d 100644 --- a/pages/about.html +++ b/pages/about.html @@ -35,7 +35,7 @@

      -

      В данный момент школьник, учусь в СУНЦ МГУ. Немного занимаюсь фрилансом.

      +

      В данный момент школьник, закончивший СУНЦ МГУ. Немного занимаюсь фрилансом.

      Увлекаюсь математикой, информатикой и тем, что находится между ними.

      Навыки: C++, Python, wxWidgets.


      diff --git a/posts/eshche-odno-vychislenie-vyrazhenii/index.html b/posts/eshche-odno-vychislenie-vyrazhenii/index.html new file mode 100644 index 0000000..6c565ef --- /dev/null +++ b/posts/eshche-odno-vychislenie-vyrazhenii/index.html @@ -0,0 +1,130 @@ + + + + + + + + + Еще одно вычисление выражений + + + + + + + + + + + + + + + + + + + + + +
      + +
      +
        +
      1. +
        +
        + +

        Еще одно вычисление выражений

        +
        + +
        +

        Задачка кажется не очень сложной, даже, если не знать как её делать (я не знал). Целью является быстрое вычисление чего-то типа 4 * ( 5 + 7 ^ 4). Для это я парсил исходную строку в список токенов, а затем непосредственно вычислял, что получится.

        +

        Я решил, что проще всего будет реализовать (а мне потом и понять) алгоритм, когда после каждого действия будет выполняться некий “хороший” инвариант. Первое что приходит в голову — это то, что истинность выражение после выполнения операции не меняется (TITO соблюдается). То есть выражение 3 + 5 можно заменить на 8 или хотя бы на 4 * 2.

        +

        Непосредственно сама обработка является несколькими проходами, так что в каждом проходе мы избавляемся от операций одного приоритета. 4 + 5 * 3 заменяется на 4 + 15, 7 - 5 * 2^3 заменяется на 7 - 5*8. Таким образом, каждый цикл тривиален, и легко задавать приоритеты операций.

        +

        Если использовать один список как контейнер для токенов и при работе изменять непосредственно его, сохраняя указанные инварианты, то сложность получается \(O\left( N \right)\), где \(N\) — число токенов.

        +

        Времени на непосредственно кодирование ушло часа три-четыре, но в это время не входит продумывание мелких деталей.

        +

        Всё написано на C++11. Исходники лежат на GitHub и BitBucket.

        + +
        +
        + +
        +
        +
        + + + comments powered by Disqus +
        +
        +
      2. +
      +
      +
      + + + + + \ No newline at end of file diff --git a/tag/proekt.html b/tag/proekt.html new file mode 100644 index 0000000..ab4eb08 --- /dev/null +++ b/tag/proekt.html @@ -0,0 +1,82 @@ + + + + + + + + + Ещё один матблог - проект + + + + + + + + + + + + + + + + + + + + +
      + +
      +
        +
      1. +
        +
        + +

        Еще одно вычисление выражений

        +
        +
        +

        На хабре когда-то увидел статью про то, что в Яндексе двум сотрудникам дали задачу на написание приложения, для вычисления выражений. Менеджер справился за 4 часа, а программист за два. Я решил попробовать свои силы.

        +
        +
        +
      2. +
        +
      +
      + Page 1 / 1 +
      + +
      +
      + + + + + \ No newline at end of file diff --git a/tags.html b/tags.html index 4812030..9bf062e 100644 --- a/tags.html +++ b/tags.html @@ -28,6 +28,7 @@

      Tags for Ещё один матблог

    4. блог (1)
    5. +
    6. проект (1)