Найти тему
Николай Сталин

D. Автоматизируй это — Yandex Cup 2020 Frontend — Пробный раунд

Оглавление

На государственном портале предоставления услуг сделали возможность подавать заявление на получение документов полностью автоматически, для этого надо только заполнить таблицу с персональными данными.Эти данные затем передаются на проверку в несколько инстанций, включая МВД. После начала тестирования выяснилось, что МВД принимает данные в формате markdown, а ГосУслуги пользуются html-форматом. Помогите написать скрипт миграции одного формата в другой, чтобы ребята поскорее запустились.Вам нужно написать функцию, которая на вход принимает HTML-таблицу и преобразует ее в markdown-подобную разметку.В качестве решения этого задания отправьте файл .js, в котором объявлена функция solution:

function solution(input) {  
    // ...  
}

Формат ввода

HTML-таблица приходит в виде строки:

<table>  
    <colgroup>  
        <col align="right" />  
        <col />  
        <col align="center" />  
    </colgroup>  
    <thead>  
        <tr>  
            <td>Command         </td>  
            <td>Description     </td>  
            <th>Is implemented  </th>  
        </tr>  
    </thead>  
    <tbody>  
        <tr>  
            <th>git status</th>  
            <td>List all new or modified    files</td>  
            <th>Yes</th>  
        </tr>  
        <tr>  
            <th>git diff</th>  
            <td>Show file differences that haven’t been  
 staged</td>  
            <td>No</td>  
        </tr>  
    </tbody>  
</table>

В таблице могут содержаться теги colgroup, thead и tbody в фиксированном порядке.

Все эти теги опциональны, но всегда будет присутствовать как минимум thead либо tbody.colgroup содержит теги col, у которых может быть опциональный атрибут align с одним из трех значений (left|center|right)

thead и tbody содержат 1 или более tr

tr, в свою очередь, содержат как td, так и th

В таблице всегда будет хотя бы одна строка.

В строке всегда будет хотя бы одна ячейка.

В ячейке всегда присутствует хотя бы один не-whitespace символ.Количество элементов th/td в строках всегда совпадает между всеми строками и с количеством элементов col в colgroup, при наличии colgroup.Пробелы и переносы строк в исходном HTML могут встречаться в любом месте, не нарушающем валидность HTML.

Формат вывода

На выходе должна получиться строка с markdown-разметкой:

| Command | Description | **Is implemented** |  
| ---: | :--- | :---: |  
| **git status** | List all new or modified files | **Yes** |  
| **git diff** | Show file differences that haven’t been staged | No |


Первая встретившаяся строка в таблице должна всегда превращаться в строку-заголовок в markdown-разметке.

Все остальные строки идут в тело таблицы.

Разделитель заголовка выводится всегда.Содержимое td вставляется как есть, содержимое th как **bold**.

Между содержимым ячейки в markdown-разметке и разделителями ячеек (|) всегда один пробел.Пробелы по краям содержимого тегов td и th должны быть удалены.

Переносы строк в содержимом ячеек должны быть удалены.

Более одного пробела подряд в содержимом ячеек должны быть заменены одним пробелом.За выравнивание в ячейках столбцов markdown-таблицы отвечает форматирование разделителя заголовка:
| :--- | значит выравнивание по левому краю
| :---: | значит выравнивание по центру
| ---: | значит выравнивание по правому краю

При отсутствии заданного в теге col атрибута align выравнивание должно быть задано влево.

Примечания

Для перевода строки нужно использовать символ \n.

Решение будет проверяться в браузерном окружении (Chrome 78) с доступом к объектам document и window.

Можно использовать синтаксис до es2018 включительно.