Posted by Oleksandr Golovatyi on

The Rules of Attraction (2002)

В цілому дуже дивне враження. Місцями – фіговенька і слабенька молодіжна комедія. А іноді – аж ого-го.

Таке враження що одна людина написала первісний психоделічний (в стилі Твін Піксу) сюжет, а потім хтось спробував переробити його і на півдорозі махнув рукою.

Помічено пару непоганих акторів, на яких через їх невідомість публіці ще не встигли повісити шаблони ролей.

В ціло – варто подивитися хоча б один раз.

http://www.imdb.com/title/tt0292644/

[youtube=http://www.youtube.com/watch?v=2C8v_0F4Km0&fs=1&hl=en_US]

Posted by Oleksandr Golovatyi on

Складення чисел у списках

Задача

Є два списки в яких кожен елемент містить одну цифру числа. Числа зберігаються у зворотньому порядку, тобто йде найвагоміша цифра, останньою цифра що позначає одиниці. Треба написати функцію що складає ці списки і повертає новий список як результат складення.

Наприклад (9->3->5) + (8->7) повенно давати результат (1->0->2->2).

Рішення

    1. list* AddLists(list *l1, list *l2)
    2. {
    3.   list *r = new list();
    4.   int carry = 0, val = 0;
    5.   for (; l1 || l2 || carry; l1 = l1->next, l2 = l2->next)
    6.   {
    7.     val = carry + l1 ? l1->val : 0 + l2 ? l2->val : 0;
    8.     carry = val / 10;
    9.     val %= 10;
    10.     r->AddItem(val);
    11.   }
    12.   return r;
    13. }

 

* This source code was highlighted with Source Code Highlighter.

Posted by Oleksandr Golovatyi on

Dogma: Festen / The Celebration (1998)

З’омки в стилі аматорської камери (які модно називаються арт-хаусом), всі розпонтовані мистецькі непересічні діла…

А взагалі фільм класний. Дуже і дуже. Треба дивитися, треба знати таке.

http://www.imdb.com/title/tt0154420/

[youtube=http://www.youtube.com/watch?v=vKe_AxTFGXc&fs=1&hl=en_US]

Posted by Oleksandr Golovatyi on

Вилучити елемент зі списку за вказівником на нього

Задача

Написати функцію яка приймає вказівник на елемент і вилучає цей елемент зі списку.

Рішення

Скопіювати значення з наступного елемента у поточний, модифікувати вказівник на наступний елемент і видалити наступний елемент.

    1. void RemoveItem(list* item)
    2. {
    3.   if (!item ||!item->next) return;
    4.   list *next = item->next;
    5.   item->data = next->data;
    6.   item->next = next->next;
    7. }

 

* This source code was highlighted with Source Code Highlighter.

Зауваження

Алгоритм неможливо реалізувати для вказівника на останній елемент. В цьому випадку такий елемент можна позначити якимось чином щоб сигналізувати що його видалено.

Posted by Oleksandr Golovatyi on

Dead Man (1995)

Фільм у своєму темпі, який він швидко починає диктувати глядачеві, говорить про те що всі ми з народження мерці які ненадовго випали з іншого світу і повертаємося в нього, кожен своїм шляхом.

Так само подорож головного героя з такою простою і зрозумілою метою на самому початку поступово перетворюється у плутанину і питання “чи живий я”, “чи живі всі люди навколо”, “чи не є це вже царство мертвих”?

http://www.imdb.com/title/tt0112817/

 

Posted by Oleksandr Golovatyi on

Повернути N-тий елемент з кінця списку

Задачу можна розв’язати рекурсивно, але можна і за допомогою наступного простого алгоритму:

  1. Всановлюємо вказівника р1 та р2 на початок списку.
  2. Переміщуєма р2 на Н-1 позицій вперед.
  3. Переміщуємо обидва вказівника на одну позицію вперед.
  4. Якщо р2 не досягнув кінця списку то йдемо до кроку 3.
  5. р1 містить результат.
    1. list* NthToLastelement(list* head, int n)
    2. {
    3.   if (head == NULL || n < 1) return NULL;
    4.   list *p1 = head, *p2 = head;
    5.   for (int i = 0; i < n - 1 && p2; ++i, p2 = p2->next);
    6.   if (p2 == NULL) retun NULL;
    7.   for (; p2->next; p1 = p1->next, p2 = p2->next);
    8.   return p1;
    9. }

 

* This source code was highlighted with Source Code Highlighter.

Posted by Oleksandr Golovatyi on

The Blind Swordsman: Zatoichi (2003)

Особисто у мене склалося таке враження що Такєши Кітано у цьому фільмі жорстоко стьобає з голівудських бойовиків.

Особливо це видно у фінальних сценах, де навіть незацікавлені у кіно люди мають відчути що “щось тут не так” Smile

І тим не менше це кльовий, хоча і мало правдоподібний екшн.

http://www.imdb.com/title/tt0363226/

[youtube=http://www.youtube.com/watch?v=_3WNmW5X8dI&fs=1&hl=en_US]

Posted by Oleksandr Golovatyi on

Вилучення дублікатів з невідсортованого списку

Задача

Вилучити елементи що повторюються з невідсортованого списку. Як це можна зробити якщо нема пам’яті для додаткового буфера?

Рішення з додатковим буфером

Достатньо просто зберігати елементи в хеш-таблиці і прибирати дублікати якщо елемент з поточним значенням вже є у хешу.

Рішення без додаткового буфера

У цьому випадку можна працювати з двома вказівниками: одни вказує на поточний елемент що ми його перевіряємо, другий – для порівняння з усіма попкркдніми елементами.

В списку з одного елемента всі елементи унікальні, тому перевірку можна почати з другого елемента. Якщо другий елемент є унікальним то тепер у нас 2 елементи з якими можна порівнювати. І так далі…

    1. void RemoveDups(list* head)
    2. {
    3.    if (head == NULL) return;
    4.    list* prev = head;
    5.    list* cur = prev->next;
    6.    while (cur)
    7.    {
    8.      for (list *run = head; run != cur; run = run->next)
    9.     {
    10.       if (run->data == cur->data)
    11.       {
    12.         // remove current item
    13.         list *tmp = cur->next;
    14.         prev->next = tmp;
    15.         delete cur;
    16.         cur = tmp;
    17.       }
    18.     }
    19.     if (run == cur)
    20.     {
    21.       prev = cur;
    22.       cur = cur->next;
    23.     }
    24.   }
    25. }

 

* This source code was highlighted with Source Code Highlighter.

Також дивись Як прибрати символи-дублікати з С-рядка

Posted by Oleksandr Golovatyi on

Visual Studio: Watch Window Pseudo registers

Watch Window Pseudo registers

Pseudo register

Description

@ERR

Last error value (GetLastError result)

@TIB

Thread information block for current thread

@CLK

Clock register

Trick: enter @CLK and @CLK=0.the second zeroes out the timer after continuing debugging.

@EAX, @EBX, @ECX, @EDX, @ESI, @EDI, @EIP, @ESP, @EBP, @EFL

CPU registers

@CS, @DS, @ES, @SS, @FS, @GS

CPU segment registers

@ST0, @ST1, @ST2, @ST3, @ST4, @ST5, @ST6, @ST7

CPU floating-point registers