41

(13 відповідей, залишених у C++)

steamwater написав:
Teg Miles написав:

Від мене там тільки count_if:) У мене не дуже з побітовими операціями поки що.

Я так i думав. А чи зрозумiли ви, що саме робить алгоритм у циклах? Це вже те, другу питання, пiсля якого можна було б перейти до std::count_if. Поки що, можу наперед сказати, що count_if реалiзовано як прямий послiдовний проход по заданому iтераторами, iнтервалу з перевiркою унарного предiкату на кожному елементi, пiдвищуючи лiчильник для true, який потiм повертається як результат. У складних випадках, таких як текучий, вiн не кращий за цикл, а враховуючи нетрiвiальнiсть задачи написання предiкату, - цикл гнучкіший, тому у цьому я пiдтримую позицiю koala.

Зрозумів, там, де я брав код, було пояснення.

42

(13 відповідей, залишених у C++)

steamwater написав:

Teg Miles, в мене поки що два питання. Перше: Чи рiшення що ви привели, написанi вами власноруч? Друге буде потiм.

Від мене там тільки count_if:) У мене не дуже з побітовими операціями поки що.

43

(13 відповідей, залишених у C++)

steamwater написав:

Здається, знайшов: https://leetcode.com/problems/largest-c … scription/
Teg Miles, чи це саме воно?

Так, воно.

44

(13 відповідей, залишених у C++)

steamwater написав:
Teg Miles написав:

Треба знайти максимальну кількість чисел із наданих кандидатів, bitwise AND яких не дорівнює нулю.

Teg Miles, я знов не буду оригінальним: дайте будь ласка, пряме посилання на завдання, чи скопiюйте його тест дослівно.

Не пам'ятаю його назви. Та й воно давно вже вирішене.

45

(13 відповідей, залишених у C++)

koala написав:

Я в таких випадках віддаю перевагу простому циклу. І так видно, що відбувається. count_if дає перевагу лише з політикою виконання (execution policy) при досить великих вхідних даних.
Єдине що я б іншу послідовність операцій обрав: (item>>i)&1 виглядає природніше, бо повертає конкретно 0 або 1. Або навіть

for (int i = 1, end = 1 << 24; i < end; i <<= 1) {
    ... item & i ...
}

Утім, підозрюю, що оптимізатор і так витисне з коду більше, ніж усі ці фокуси (хоча це треба тестувати).

Ваша пропозиція працює швидше з простим циклом, ніж з count_if.
Але не набагато швидше за те, що було раніше.
Я на їхньому сайті перевіряв.

46

(13 відповідей, залишених у C++)

Треба знайти максимальну кількість чисел із наданих кандидатів, bitwise AND яких не дорівнює нулю.
Це сьогоднішнє завдання з Leetcode.
Ось два рішення:
Перше зі звичайним циклом.

int largestCombination(const vector<int> &candidates) {
    if (candidates.size() == 1) return 1;
    int answer { 0 };
    for (int i = 0; i < 24; ++i) {
        int count {0};
        for (const auto& item: candidates){
            if (item & (1 << i)){
                ++count;
            }
        }
        answer = max(answer, count);
    }
    return answer;
}

Друге з count_if.

int largestCombination(const vector<int> &candidates) {
    if (candidates.size() == 1) return 1;
    int answer { 0 };
    for (int i = 0; i < 24; ++i) {
        auto same_bit = [i](auto number) { return number & (1 << i); };
        int count = count_if(candidates.begin(), candidates.end(), same_bit);
        answer = max(answer, count);
    }
    return answer;
}

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

47

(6 відповідей, залишених у C++)

steamwater написав:

Teg Miles, знов жеж незрозумiло, до чого список до парсiнгу. Парсити можна будь-куди. Хоч у вектор чи навiть масив. Той хто пише таки кати є кат. Це причина щоб його за це катувати. Бо вчити список таким чином, це марна витрата часу. От код, який не дуже жвавий та короткий, але - для наглядностi:

#include <iostream>
#include <string>
 
using std::cout;

struct Node
{
    Node(int a)
    :data(a)
    {
    }

    int data;
    Node *next;
};

struct nb_list
{
    nb_list()
    :head(nullptr)
    {
    }

    ~nb_list()
    {
        if(head){
        Node *next_head;
        while(next_head=head->next)
        {
            delete head;
            head=next_head;
        }
        }
    }

    Node *head;

    Node *insert_after(int a, Node *targ=nullptr)
    {
        Node *ins=new Node(a);
        Node *ret=nullptr;
        if(!head){
           head=ins;
           head->next=nullptr;
           ret=head;
        }else{
            if(!targ){
             Node *current=head;
                do
                {
                   targ=current;
                }while((current=current->next)!=nullptr);

            }
            ins->next=targ->next;
            targ->next=ins;

            ret=ins;
        }
        return ret;
    }

    void prn()
    {
        if(!head) return;
        Node *current=head;
        do
        {
            cout<<current->data<<' ';
        }while(current=current->next);
        cout<<'\n';
    }

};

int main()
{
    std::string test_str("12 -> 2346 -> 315 -> nullptr");
    nb_list lst;

    std::string::size_type n_beg(0),
                           n_left(n_beg),
                           n_right(n_beg),
                           n_end(std::string::npos),
                           shift_after_terminal_str=4;//3+1
    const char *terminal_str=" -> ";
    const char *final_terminal_str="nullptr";
    std::string subs;
    Node *node_target=nullptr;
    while(true)
    {
         n_right=test_str.find_first_of(terminal_str, n_left);
             subs=test_str.substr(n_left,n_right-n_left);
                 if(subs==final_terminal_str)break;
                     int extracted_int=std::stoi(subs);
                         node_target=lst.insert_after(extracted_int, node_target);
                            n_left=n_right+shift_after_terminal_str;
    }

    lst.prn();
    return 0;
}


Але що у ньому стосується списку? Один метод вставки елементу? А тодi навiщо воно? Задачи геть непов'язанi якоюсь логiкою.

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

48

(6 відповідей, залишених у C++)

koala написав:

У ванній дивилися? Може, забилося щось?

Будь ласка, замість своїх висновків описуйте те, що ви бачите. Якщо в у вас на столі вода - це один симптом, якщо на підлозі - то інший, якщо є повідомлення про протікання пам'яті від системи тестування - то третій, а якщо просто вам не подобається, скільки пам'яті виділяється - то четвертий. Ну а якщо повідомлення взагалі не про протікання, але ви собі нафантазували, що "десь протікає" без жодних на те підстав, то п'ятий, і я ставлю саме на нього.
Так, і ще:
- ви не присвоюєте nullptr next-у новостворених вузлів; може, воно так і треба, але в кінці там же має бути nullptr, чи не так?
- нащо ви видаляєте останній елемент?

Навіть без видалення останнього елемента виходить ось таке:
SUMMARY: AddressSanitizer: 48 byte(s) leaked in 3 allocation(s).

49

(6 відповідей, залишених у C++)

Потрібно перетворити рядок (наприклад, "1 -> 2 -> 3 -> nullptr") на зв'язаний список.
Це звідси https://www.codewars.com/kata/582c5382f000e535100001a7
Зробив ось так:

class Node {
public:
    int data;
    Node* next;
    Node(int data, Node* next = nullptr)
        : data(data)
        , next(next)
    {
    }
};

Node* parse(const std::string& s)
{
    Node* head { nullptr };
    Node* cur { nullptr };

    stringstream ss;
    ss << s;
    string temp { "" };
    int number;
    while (!ss.eof()) {
        ss >> temp;

        if (stringstream(temp) >> number) {
            if (!head) {
                head = new Node(number);
                cur = head;
            } else {
                cur->next = new Node(number);
                cur = cur->next;
            }
        }

        temp = "";
    }
    cur = cur->next;
    delete cur;
    return head;
}

Але десь протікає, не можу зрозуміти де.
Клас Node — це їхній клас, з яким треба працювати.

50

(4 відповідей, залишених у C++)

Оновлений файл налаштувань:

;;Підсвічування пар дужок відповідним кольором
(add-hook 'c++-mode-hook #'rainbow-delimiters-mode)

;;Налаштування для відкривання останнього робочого файлу
(recentf-mode 1)
(setq recentf-max-menu-items 5
      recentf-max-saved-items 5
      recentf-exclude '("~/.emacs.d/.cache/treemacs-persist")
)

;;Автодоповнення дужок
(electric-pair-mode 1)
(setq electric-pair-preserve-balance nil)

;;Company — програма, що є основою для автодоповнення
(add-hook 'after-init-hook 'global-company-mode)

;;Показати нумерацію рядків
(add-hook 'prog-mode-hook 'display-line-numbers-mode)

;;Налаштування швидкого автодоповнення
(setq gc-cons-threshold (* 100 1024 1024)
      read-process-output-max (* 1024 1024)
      company-idle-delay 0.0
      company-minimum-prefix-length 1
      lsp-idle-delay 0.1
      )

;;Налаштування автопрокручування вікна компіляції до першої помилки
(setq compilation-scroll-output 'first-error)

;;Налаштування розміру табуляції
(setq-default tab-width 4)

;;Налаштування максимальної кількості символів у рядку
(setq-default fill-column 80)

;;Налаштування використання готових сніппетів
;;(наприклад, автоматичне додавання дужок для функції С++)
(add-hook 'c++-mode-hook #'yas-minor-mode)

;;Налаштування автоматичного копіювання до clipboard
(xclip-mode 1)

;;Налаштування lsp-mode
(use-package lsp-mode
  :init
  ;; set prefix for lsp-command-keymap (few alternatives - "C-l", "C-c l")
  (setq lsp-keymap-prefix "C-c l"
        lsp-enable-symbol-highlighting nil
        lsp-ui-sideline-enable t
        lsp-ui-sideline-show-code-actions t
        lsp-ui-sideline-show-hover nil
        lsp-modeline-code-actions-enable nil
        lsp-diagnostics-provider :none
        lsp-ui-sideline-show-diagnostics t
        ;lsp-completion-provider :none
        lsp-completion-show-detail nil
        lsp-completion-show-kind nil
        lsp-completion-sort-initial-results t
        lsp-clients-clangd-args '("--header-insertion=never"
                                  "--fallback-style=WebKit"
                                  )
    )

  :hook (;; Прив'язка lsp-mode до певного режиму роботи
         (c++-mode . lsp)
         ;; Інтеграція з which-key
         (lsp-mode . lsp-enable-which-key-integration))
  :commands lsp)

;;Налаштування lsp-ui
(use-package lsp-ui
  :commands lsp-ui-mode)

;;Налаштування doom-themes
(use-package doom-themes
  :ensure t
  :config
  ;; Global settings (defaults)
  (setq doom-themes-enable-bold t    ; if nil, bold is universally disabled
        doom-themes-enable-italic t) ; if nil, italics is universally disabled
  (load-theme 'doom-one t)

  ;;Corrects (and improves) org-mode's native fontification.
  (doom-themes-org-config)
  )

;;Налаштування treemacs
(use-package treemacs
  :ensure t
  :defer t
  :config
  (progn
    (setq treemacs-show-hidden-files nil)

    (treemacs-follow-mode t)
    (treemacs-filewatch-mode t)
    (treemacs-fringe-indicator-mode 'always)

    (treemacs-hide-gitignored-files-mode nil))
  :bind
  (:map global-map
        ("M-0"       . treemacs-select-window)
        ("C-x t 1"   . treemacs-delete-other-windows)
        ("C-x t t"   . treemacs)
        ("C-x t d"   . treemacs-select-directory)
        ("C-x t B"   . treemacs-bookmark)
        ("C-x t C-t" . treemacs-find-file)
        ("C-x t M-t" . treemacs-find-tag)))

(use-package treemacs-projectile
  :after (treemacs projectile)
  :ensure t)

;;Налаштування lsp-treemacs
(lsp-treemacs-sync-mode 1)

;;Перевірка синтаксису flycheck
(use-package flycheck
  :ensure t
  :init
  (global-flycheck-mode)
  :config
    ;; Показувати індикатори помилок в крайньому лівому стовпчику
    (setq flycheck-indication-mode 'left-margin
          ;; Затримка показу помилок
          flycheck-display-errors-delay 0.1
          ;; Перевірка згідно певного стандарту мови С++
          flycheck-clang-language-standard "c++20"
    )
    ;; Налаштування ширини стовпчика з індикаторами помилок
    (defun my/set-flycheck-margins ()
      (setq left-fringe-width 8 right-fringe-width 8
        left-margin-width 1 right-margin-width 0)
      (flycheck-refresh-fringes-and-margins))
    ;; Поява індикаторів щоразу при відкритті нового буфера
    (add-hook 'flycheck-mode-hook #'my/set-flycheck-margins)
    ;; Додавання перевірки синтаксису clang в чергу після cppcheck
    (flycheck-add-next-checker 'c/c++-cppcheck 'c/c++-clang)
  )

(use-package flycheck-clang-tidy
  :after flycheck
  :hook
  (flycheck-mode . flycheck-clang-tidy-setup)
  )

(use-package flycheck-clang-analyzer
  :ensure t
  :after flycheck
  :config (flycheck-clang-analyzer-setup))

(with-eval-after-load 'flycheck
  (require 'flycheck-flawfinder)
  (flycheck-flawfinder-setup)
  ;; chain after cppcheck since this is the last checker in the upstream
  ;; configuration
  (flycheck-add-next-checker 'c/c++-cppcheck '(warning . flawfinder)))

;;Налаштування керування проєктами Projectile
(projectile-mode +1)
;; Recommended keymap prefix on Windows/Linux
(define-key projectile-mode-map (kbd "C-c p") 'projectile-command-map)

;;Налаштування автодоповнення команд which-key
(which-key-mode)
(add-hook 'c-mode-hook 'lsp)
(add-hook 'c++-mode-hook 'lsp)

;;Налаштування clang-format при збереженні
(defun clang-format-save-hook-for-this-buffer ()
  "Create a buffer local save hook."
  (add-hook 'before-save-hook
            (lambda ()
              (when (locate-dominating-file "." ".clang-format")
                (clang-format-buffer))
              ;; Continue to save.
              nil)
            nil
            ;; Buffer local hook.
            t))

;; Run this for each mode you want to use the hook.
(add-hook 'c++-mode-hook (lambda () (clang-format-save-hook-for-this-buffer)))

;;Налаштування програми автодоповнення команд Helm
(helm-mode)
(require 'helm-xref)
(define-key global-map [remap find-file] #'helm-find-files)
(define-key global-map [remap execute-extended-command] #'helm-M-x)
(define-key global-map [remap switch-to-buffer] #'helm-mini)

;;Налаштування cmake-mode
(require 'cmake-mode)

;;Налаштування прив'язки клавіш клавіатури
;;Прив'язка клавіші F2 до збереження файлу
(global-set-key [f2] 'save-buffer)

;;Прив'язка показу нещодавніх файлів до клавіші F3
(global-set-key [f3] 'recentf-open-files)

;;Прив'язка компіляції С++ до F5
(define-key global-map [f5] 'compile)
;;Автоматичне натискання Enter при компіляції
(setq compilation-read-command nil)

;;Налаштування команди компіляції
(require 'compile)
  (add-hook 'c++-mode-hook
    (lambda ()
      (unless (file-exists-p "Makefile")
        (set (make-local-variable 'compile-command)
        (let ((file (file-name-nondirectory buffer-file-name)))
          (format "%s %s"
            (or (getenv "CC") "cmake")
            (or (getenv "CPPFLAGS") "-Bbuild/Debug -DCMAKE_BUILD_TYPE=Debug && cd build/Debug && make")
            ))))))

;;Прив'язка виклику менеджера файлів treemacs до F7
(define-key global-map [f7] 'treemacs)

;;Прив'язка виклику переліку функції та класів у treemacs
(define-key global-map [f8] 'lsp-treemacs-symbols)

Якщо використовувати lsp-mode і flycheck,
краще вимкнути перевірку синтаксису в lsp-mode(lsp-diagnostics-provider :none),
бо налаштування lsp-mode для перевірки синтаксису будуть перебивати налаштування flycheck.
Хіба що вам більше подобаються налаштування саме lsp-mode.
Як все зараз виглядає можна побачити на знімку(це для текстового Emacs Manjaro OS).
https://replace.org.ua/misc.php?action=pun_attachment&amp;item=2233

51

(2 відповідей, залишених у C++)

Треба обійти дерево і зібрати все листя.
Зробив ось так:

void check_trees(TreeNode *root, vector<int> &leafs) {
    stack<TreeNode *> root_nodes;
    root_nodes.push(root);

    while (!root_nodes.empty()) {
        const auto node = root_nodes.top();
        root_nodes.pop();
        if (!node->left && !node->right) {
            leafs.push_back(node->val);
        }
        if (node->left) {
            root_nodes.push(node->left);
        }
        if (node->right) {
            root_nodes.push(node->right);
        }
    }
}

Але спочатку я використав посилання на вказівник, ось тут:

const auto &node = root_nodes.top();

І в такому варіанті збиралася лише частина листя в деяких випадках.
Чому так?

52

(11 відповідей, залишених у Обговорення)

Якщо мінімальних вимог немає, то як визначаються дедлайни?
Бо так можна не один десяток років розповідати — ось зараз, ще трошки, ну майже...:)
Мають же замовники хоча б приблизно уявляти строки виконання проєкту.

53

(41 відповідей, залишених у C++)

steamwater написав:

Teg Miles, ваша активнисть знились i це прикро. Не зважайте на те що тут сталось, - не варто. Продовжуйте. Доречи, якщо ви вiдкриєте тему про написання контейнеру у термiнах C++, я б спробував накидати легкий каркас. Це було б кориснiше для вектора, тому що вiн легше для розумiння з боку новачка. Але можна й лист. Односкерований трохи легше. Тут важливо зрозумiти ази техницi шаблоннiв, перегруз операторiв (++, *, ->, що найменше), та iдiому iтераторiв. То ж сам контейнер не має буди складним. А вже вiд, хоча б зверхнього  розумiння загальних концепцiй можна буде легше читати таки речi як cppreference. Щоб не тонути, я б порадив вам не намагатись зрозумiти того що ви читаєте, в глибину. Це неможливо. Навчання це iтеративний процес, якщо йдеться про складнi речи. Сконцентруйтесь на тому, що з тим можна зробита у якомусь простому випадку. Спробуйте, перевiрте. Потiм, можна ускладнювати, але поволi. А C-стайл кодiнг, можна продовжувати незалежно вiд цього. У тому на початку теж є користь. Але не треба змiшувати такий код iз абстракцiями рiвня unique_ptr. Воно тiльки нашкодить. Тож чекаю на вашi повiдомлення.

Активність не знизилася, просто питань поки що немає.

Які вимоги щодо обсягу виконаної роботи за добу для програмістів?
Наприклад, для перекладачів англійської мови —  5 сторінок на день
для звичайного тексту і 20 хвилин для субтитрів. Це мінімальні вимоги.
Мене цікавлять мінімальні вимоги для середньостатистичного проєкту С++.

55

(6 відповідей, залишених у *nix)

У Manjaro є програма Redshift. Можливо, в репозиторіях Lubuntu вона теж є.

56

(41 відповідей, залишених у C++)

steamwater написав:
P.Y. написав:

ur_naz дав ліспівський код замість сіплюсплюсного, а ЛІСП, як відомо, є мовою, спеціально зробленою для роботи зі списками, тому програма в нього максимально коротка.

Ну поперше, ви у роздiлi С++, шановний. Тому ваша зневага у виглядi недо сіплюсплюсного висловлювання, не доречна. Я колись трохи кодив на auto-lisp, що є дiалектом Лiспу для AutoCAD. Це дивовижна мова, так. Але якщо казати про списки, то я б вже визначив LUA, тим бiшлше, що вона, iнколи зустрiчається у промислових С++ проектах.
Teg Miles, я все ж зроблю спробу розштурхати вас, до руху у корисному напрямку. Подивiться класс std::forward_list. Якщо спочатку буде незручно (iндусський дiалект англiйскої, навiгацiя по сайту, тощо), чи будуть питання з семантiки, - звертайтесь, - я вiдповiм. Але спочатку по-експерементуйте у кодi. Якщо, ви не вiдгукнентеся, менi доведеться самому продемонструвати, тi виправлення, що покращили б код, про який йшлося вище. Але, на жаль, тодi iнтрига буде втрачена, а моя спроба буде марною.

Я бачив ваше посилання на спеціалізований зв'язаний список зі стандартної бібліотеки.
Застосую його за нагоди, а зараз моя мета просто виконання завдань.
Наберу достатньо базових навичок, почну працювати з вдосконаленням.
Зарано мені на глибину, втоплюся:).

57

(41 відповідей, залишених у C++)

steamwater написав:
Teg Miles написав:

Вони дають вже готову структуру для зв'язаного переліку.

Ну, по-перше, в мене iї не було. А по-друге, менi std бiльш до вподоби. Вам теж раджу. Там iнтерфейс не дає доступу до таких речей як покажчики на ноди. Тобто дивлячись на С-шний код у плюсовiй обгортцi, ви не вчитеся програмувати на плюсах. Ще й можуть бути рецiдиви взяти й застосувати uniqe-ptr у такому кодi... Тут я вам не допоможу.
Ще цiкавiше, той факт, що вiд таких завданнь є бiльш небезпечна шкода. Це не сумiснiсть умов по логицi та складностi. Список не має вiдношення до задачи перекодування чисел залежно вiд порядку цифр. Це схоже на завдання злiтати на Мiсяць i вирiшити там на пiску дрючком рiвняння x-5 = 1-x.

Просто на LeetCode багато математиків, тому така несумісність.
Їм подобається літати на Місяць, бо доводиться багато розрахунків робити:).

58

(41 відповідей, залишених у C++)

steamwater написав:

Вхiднi cписки можуть бути рiзного розмiру?
Не вiдповiдаєте. Ну тодi для загального випадку, може бути так:

#include <iostream>
#include <forward_list>
using std::cout;
using std::forward_list;

int main()
{
    using LS = forward_list<int>;
    using l_it = LS::iterator;

    //LS ls1{8, 7, 6, 9};//also works just fine
    LS ls1{8, 7, 6, 1};
    LS ls2{7, 6, 5};


    auto ls1_sz=std::distance(ls1.begin(), ls1.end());
    auto ls2_sz=std::distance(ls2.begin(), ls2.end());

    LS &ls_first=ls1_sz<ls2_sz? ls1:ls2;
    LS &ls_second=&ls_first==&ls1? ls2:ls1;

    LS ls_res;

    int remind(0), res(0);

    l_it it_frst=ls_first.begin();
    l_it it_end=ls_first.end();
    l_it it_sec=ls_second.begin();
    l_it it2_end=ls_second.end();

    res= *it_frst+*it_sec;
    remind=res/10;
    res%=10;

    ls_res.push_front(res);
    l_it it_res=ls_res.begin();

        ++it_frst;
        ++it_sec;

    for(;it_frst!=it_end;)
    {
        res= *it_frst+*it_sec+remind;

        remind=res/10;
        res%=10;
        it_res=ls_res.insert_after(it_res, res);
        ++it_frst;
        ++it_sec;
    }

     for(;it_sec!=it2_end;)
     {
        res=*it_sec+remind;
        remind=res/10;
        res%=10;
        it_res=ls_res.insert_after(it_res, res);
        ++it_sec;
     }

    if(remind)
    ls_res.insert_after(it_res, remind);     

    for(auto el:ls_res)cout<<el<<' ';

    return 0;
}

Так, бувають різного розміру. Вони дають вже готову структуру для зв'язаного переліку.

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        
    }
};

59

(41 відповідей, залишених у C++)

steamwater написав:

Тобто, цифри. Вже краще. Але як воно стосується списку, незрозумiло. Це може бути масив, вектор, тощо. Ну гаразд. Тож,  якщо маємо, скажiмо:
{1, 2, 3}
{3, 4, 5}
то матимемо:
{4, 6, 8}
?

Так.

60

(41 відповідей, залишених у C++)

steamwater написав:
Teg Miles написав:

Завдання звідси:

Teg Miles, там треба рееструватись, а я не хочу. Може скопуєте текст завдання? Вiн не має бути великим?

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