Как развернуть список
От: Arsen.Shnurkov  
Дата: 01.05.16 05:06
Оценка:
Из задач на собеседование,
http://rsdn.ru/forum/job/6423376.1
Автор: mgu
Дата: 21.04.16


using System;
using System.Xml.Linq; // add System.Xml.Linq.dll to references
using System.Linq;

class MainClass
{
    public static void Main (string[] args)
    {
        // 
        var doc = XDocument.Parse(@"<ul>
                <li>Coffee</li>
                <li>Tea</li>
                <li>Milk</li>
                </ul>");
        var list = doc.Root.Elements("li")
            .Select(element => element.Value)
            .ToList();            
        var reversed_list = list.AsEnumerable().Reverse();
        XElement xmlElements = new XElement("ul", reversed_list.Select(i => new XElement("li", i)));
        System.Console.Write(xmlElements);
    }
}


http://stackoverflow.com/questions/1542073/xdocument-or-xmldocument
http://stackoverflow.com/questions/747554/populate-xdocument-from-string
http://stackoverflow.com/questions/956749/how-can-i-transform-xml-into-a-liststring-or-string
http://stackoverflow.com/questions/19102021/how-to-reverse-a-generic-list-without-changing-the-same-list
http://stackoverflow.com/questions/17043663/how-to-serialize-a-listt-into-xml


моё время решения — 40 минут
Отредактировано 01.05.2016 5:15 Arsen.Shnurkov . Предыдущая версия . Еще …
Отредактировано 01.05.2016 5:12 Arsen.Shnurkov . Предыдущая версия .
Re: Как развернуть список
От: Sinix  
Дата: 01.05.16 05:31
Оценка: +4
Здравствуйте, Arsen.Shnurkov, Вы писали:


AS>Из задач на собеседование,

AS>http://rsdn.ru/forum/job/6423376.1
Автор: mgu
Дата: 21.04.16


CreatorCray в ветке правильный ответ дал. Ну и вообще это свинство, первые 5 минут положено выносить мозг заказчику вопросом "ну допустим, я этот список разверну. И таки что вы будете с ним делать дальше?".

Позволяет сэкономить тонну времени, особенно если клиент из разряда "сначала просит, потом думает".


AS>моё время решения — 40 минут

Нюанс: надо бы ещё закинуть элементы в XDocument обратно.
Re[2]: Как развернуть список
От: Arsen.Shnurkov  
Дата: 01.05.16 06:02
Оценка:
S>Нюанс: надо бы ещё закинуть элементы в XDocument обратно.

doc.Root.ReplaceWith(xmlElements);
System.Console.Write(doc.ToString());

http://stackoverflow.com/questions/12956454/how-to-replace-elements-in-one-xdocument-with-elements-from-another-xdocument
http://stackoverflow.com/questions/4533609/how-to-get-xml-as-string-from-xdocument

ну сейчас ещё требований будет на два месяца доработок...
схема XML должна быть конфигурируемой, IoC должен быть применён...

И вообще такие вещи надо писать на XSLT
http://stackoverflow.com/questions/5882519/how-to-do-an-xslfor-each-in-reverse-order
Отредактировано 01.05.2016 6:28 Arsen.Shnurkov . Предыдущая версия . Еще …
Отредактировано 01.05.2016 6:05 Arsen.Shnurkov . Предыдущая версия .
Отредактировано 01.05.2016 6:03 Arsen.Shnurkov . Предыдущая версия .
Re[3]: Как развернуть список
От: #John Европа https://github.com/ichensky
Дата: 01.05.16 07:44
Оценка: +1
Здравствуйте, Arsen.Shnurkov, Вы писали:

AS>Из задач на собеседование,

AS>http://rsdn.ru/forum/job/6423376.1
Автор: mgu
Дата: 21.04.16


AS>"<ul>

AS><li>Coffee</li>
AS><li>Tea</li>
AS><li>Milk</li>
AS></ul>"

Это список из 'li' эллементов или char?
\ Это html(для броузера?) или xml?
Надо развернуть конкретный список или сделать универсальную(на сколько?) функцию?
\ Для чего будет юзаться этот список(для репортов/как промежуточный степ в бл/..)?
\ Есть ли ограничения на оперативку?
Для решения какой пробемы в продукте надо развернуть это список?
Підтримати Україну у боротьбі з країною-терористом.

https://prytulafoundation.org/
https://u24.gov.ua/

Слава Збройним Силам України!!! Героям слава!!!
Re[3]: Как развернуть список
От: Sinix  
Дата: 01.05.16 08:03
Оценка:
Здравствуйте, Arsen.Shnurkov, Вы писали:

S>>Нюанс: надо бы ещё закинуть элементы в XDocument обратно.


AS>ну сейчас ещё требований будет на два месяца доработок...

Не, только это
Re[4]: Как развернуть список
От: Arsen.Shnurkov  
Дата: 01.05.16 10:48
Оценка:
J>Для решения какой пробемы в продукте надо развернуть это список?

Я думаю, что это как-то связано с политикой:
http://www.tvc.ru/news/show/id/47100Copyright
там в статье как раз молоко фурами возят.
только относится не к автотранспорту, а к железнодорожным составам.

К примеру, подготовка к блокировке импорта из Турции.
Надо будет отправлять составы обратно, для этого цеплять локомотив с другой стороны,
а значит вагоны прибудут обратно в обратном порядке.

в системе межстранового взаимодействия по архитектуре SOA,
тогда это скорее XML чем HTML
Если написано на русском языке, значит с русской стороны (нотификация об отправке)
и со стороны получения развёрнутый список должен быть на турецком языке.

Требование автоматизации перевода с русского на турецкий
как раз приводит к использованию C#, а не XSLT
причём нельзя опираться на вражеские сервисы (google и bing):
http://stackoverflow.com/questions/9746595/free-net-translation-libraries
Отредактировано 01.05.2016 11:27 Arsen.Shnurkov . Предыдущая версия . Еще …
Отредактировано 01.05.2016 11:03 Arsen.Shnurkov . Предыдущая версия .
Отредактировано 01.05.2016 11:01 Arsen.Shnurkov . Предыдущая версия .
Отредактировано 01.05.2016 10:53 Arsen.Shnurkov . Предыдущая версия .
Re[5]: Как развернуть список
От: Sinix  
Дата: 01.05.16 13:11
Оценка: -1
Здравствуйте, Arsen.Shnurkov, Вы писали:

AS>Я думаю, что это как-то связано с политикой:


Не-не-не, с этой субстанцией в прополитику плиз. Вне зависимости от убеждений.

Нефиг портить приличный форум
Re[6]: Как развернуть список
От: Arsen.Shnurkov  
Дата: 01.05.16 14:01
Оценка:
S> Не-не-не

Ну ок, придумайте хоть один реалистичный сценарий
в котором надо разворачивать физические предметы, а не абстракции
и где требуется автоматизация процесса.
Отредактировано 01.05.2016 14:22 Arsen.Shnurkov . Предыдущая версия . Еще …
Отредактировано 01.05.2016 14:02 Arsen.Shnurkov . Предыдущая версия .
Re[2]: Как развернуть список
От: mgu  
Дата: 01.05.16 20:34
Оценка: +1
Здравствуйте, Sinix, Вы писали:

AS>>Из задач на собеседование,

AS>>http://rsdn.ru/forum/job/6423376.1
Автор: mgu
Дата: 21.04.16


S>CreatorCray в ветке правильный ответ дал.


Вот именно, учитывая контекст обсуждения.

S>Нюанс: надо бы ещё закинуть элементы в XDocument обратно.


А почему в XDocument? Контекст же не обозначен. А вдруг это упрощённый вариант сортировки на веб-странице? Тогда JavaScript для выполнения задачи -- самое то.
Re: Как развернуть список
От: mgu  
Дата: 02.05.16 00:15
Оценка: 28 (2) :))
Здравствуйте, Arsen.Shnurkov, Вы писали:

AS>Из задач на собеседование,

AS>http://rsdn.ru/forum/job/6423376.1
Автор: mgu
Дата: 21.04.16


Меня заинтересовал этот вопрос, и вот что получилось:

test.html
<!DOCTYPE html>
<html>
<body>

<ul>
    <li>04/30/2016</li>
    <li>05/01/2016</li>
    <li>06/23/2016</li>
</ul>

<button onclick="reverseList()">Reverse</button>

<script>
function reverseList() {
    var ul = document.getElementsByTagName("UL")[0];
    var newUL = document.createElement("UL");
    
    while (ul.children.length) 
        newUL.appendChild(ul.children[ul.children.length - 1]);    
    
    ul.innerHTML = newUL.innerHTML;
}
</script>
</body>
</html>


Решение на ДжаваСкрипте; конечно, возможны и серверные случаи применения, но для приближения к реальности я выбрал задачу сортировки на клиенте по датам.

AS>моё время решения — 40 минут


Моё -- 2 часа. При этом моё решение масштаба "ХэллоуУорлд"; в реальной же задаче с десятками элементов списка как раз надо копировать все данные в дополнительный буфер (слышу, как вопят кадровые си-плюс-плюсники), ибо каждое изменение элемента ДОМа вызывает перерисовку страницы.

Или вот задача присвоить один указатель другому:

ul.children = newUL.children;


Это вам не С++, тут думать надо, см. соответствующий срач здесь:
http://stackoverflow.com/questions/3955229/remove-all-child-elements-of-a-dom-node-in-javascript

В реале нужен благословенный jQuery, но ведь на интервью требуется только хардкор.

З.Ы. Написал и подумал: ведь найдётся же какой-нибудь щелкопёр, который скопирует это решение и будет его использовать на собеседованиях.
Re[2]: Как развернуть список
От: Arsen.Shnurkov  
Дата: 02.05.16 06:46
Оценка:
я это всё к чему — задача определённо решается методом индусокодинга (копированием со stackoverflow),
поэтому для её выполнения можно нанимать каждого.

собеседование тогда может выглядеть так:
— Покажите Ваш аккаунт на SO.
— он есть, смотрите как логинюсь.
— ок, Вы приняты.
Re[3]: Как развернуть список
От: Sinix  
Дата: 02.05.16 09:29
Оценка:
Здравствуйте, mgu, Вы писали:


mgu>А почему в XDocument? Контекст же не обозначен. А вдруг это упрощённый вариант сортировки на веб-странице? Тогда JavaScript для выполнения задачи -- самое то.

Угу. Я про код топикстартера говорил, не про код для решения задачи — там надо сначала детали уточнить, потом с шашкой на код бросаться
Re[2]: Как развернуть список
От: #John Европа https://github.com/ichensky
Дата: 02.05.16 11:38
Оценка:
Здравствуйте, mgu, Вы писали:


mgu>Решение на ДжаваСкрипте; конечно, возможны и серверные случаи применения, но для приближения к реальности я выбрал задачу сортировки на клиенте по датам.


Решение явно не дотягивает до энетерпрайз уровня.
Да жс. Да броузер возгорается от диких манипуляция с DOM.
Но где все йоба фреймверки? Где ангулар, реакт, ноде жс?
Где плагин, в конце-концов, для жля жквери: "Revert elements"?
Підтримати Україну у боротьбі з країною-терористом.

https://prytulafoundation.org/
https://u24.gov.ua/

Слава Збройним Силам України!!! Героям слава!!!
Re[3]: Как развернуть список
От: mgu  
Дата: 02.05.16 22:30
Оценка:
Здравствуйте, Arsen.Shnurkov, Вы писали:

AS>я это всё к чему — задача определённо решается методом индусокодинга (копированием со stackoverflow),


StackOverflow -- это часто только начало пути; даже в одной теме там приводятся разные работающие решения.
AS>поэтому для её выполнения можно нанимать каждого.

AS>собеседование тогда может выглядеть так:

AS>- Покажите Ваш аккаунт на SO.
AS>- он есть, смотрите как логинюсь.
AS>- ок, Вы приняты.

У членов SO разные роли -- одни спрашивают, другие газируют лужи, а третьи выдают заплатки различного уровня качества.
Re[3]: Как развернуть список
От: mgu  
Дата: 02.05.16 22:33
Оценка:
Здравствуйте, #John, Вы писали:

J>Решение явно не дотягивает до энетерпрайз уровня.


Обсуждали уровень интервью, где пользоваться библиотечными функциями запрещено.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.