Фон
Вы работаете программистом в компании по продаже автомобилей. Ваша задача на этой неделе - запрограммировать парсер XML, который получает данные о доступных моделях от разных производителей автомобилей и печатает информацию о новейших моделях. К счастью для вас, отдел тестирования предоставил только один тестовый пример! Чем быстрее вы сможете написать код, который его передает, тем больше у вас будет времени на промедление в течение остальной части недели.
вход
Ваш вклад - это именно тот фрагмент XML-данных, который предоставляется отделом тестирования. Он содержит данные о некоторых производителях автомобилей, их серии автомобилей и моделях этих серий. Вы можете принять завершающий символ новой строки.
<?xml version="1.0" ?>
<products>
<manufacturer name="Test Manufacturer 1">
<series title="Supercar" code="S1">
<model>
<name>Road Czar</name>
<code>C</code>
<year>2011</year>
</model>
<model>
<name>Ubervehicle</name>
<code>U</code>
<year>2013</year>
</model>
<model>
<name>Incredibulus</name>
<code>I</code>
<year>2015</year>
</model>
<model>
<name>Model 1</name>
<code>01</code>
<year>2010</year>
</model>
</series>
<series title="Test series 22" code="Test">
<model>
<name>Test model asdafds</name>
<code>TT</code>
<year>2014</year>
</model>
</series>
</manufacturer>
<manufacturer name="Car Corporation">
<series title="Corporation Car" code="CC">
<model>
<name>First and Only Model</name>
<code>FOM</code>
<year>2012</year>
</model>
</series>
</manufacturer>
<manufacturer name="Second Test Manufacturer">
<series title="AAAAAAAAAAAAAA" code="D">
<model>
<name>Some older model</name>
<code>O</code>
<year>2011</year>
</model>
<model>
<name>The newest model</name>
<code>N</code>
<year>2014</year>
</model>
</series>
<series title="BBBBBBBBBBBBBBB" code="asdf">
<model>
<name>Another newest model here</name>
<code>TT</code>
<year>2015</year>
</model>
</series>
</manufacturer>
</products>
Выход
Ваш вывод - эта строка В нем перечислены производители автомобилей в алфавитном порядке, за ними следуют двоеточие и количество серий, которые они производят. Для каждого производителя указывается название серии, название модели и код каждой из их моделей, начиная с самой новой и начиная с года назад. Конечный пробел и разрывы строк допустимы, если ваш вывод при печати выглядит примерно так.
Car Corporation: 1 series
Corporation Car, First and Only Model (CC-FOM)
Second Test Manufacturer: 2 series
BBBBBBBBBBBBBBB, Another newest model here (asdf-TT)
AAAAAAAAAAAAAA, The newest model (D-N)
AAAAAAAAAAAAAA, Some older model (D-O)
Test Manufacturer 1: 2 series
Supercar, Incredibulus (S1-I)
Test series 22, Test model asdafds (Test-TT)
Supercar, Ubervehicle (S1-U)
Supercar, Road Czar (S1-C)
Supercar, Model 1 (S1-01)
Правила и оценки
Вы можете написать либо функцию, либо полную программу. Побеждает меньшее количество байтов, и стандартные лазейки запрещены.
Обратите внимание, что ввод является фиксированным: вам не нужно поддерживать какие-либо другие входы, кроме приведенного здесь. Ваша программа может возвращать бессмыслицу или даже сбой, если входные данные изменены каким-либо образом. При желании вы также можете игнорировать ввод и жестко закодировать вывод. Однако вы не можете использовать библиотеки или встроенные библиотеки синтаксического анализатора XML или HTML.
Ответы:
CJam,
109107 байтОбратите внимание, что четыре символа в строке в начале непечатаемы.
Попробуйте онлайн в интерпретаторе CJam .
идея
Это в основном жесткий код, который разделяет ввод при всех вхождениях < , > и " , выбирает определенные чанки и чередует их с остальными частями выходных данных.
После разделения входных данных порциями с индексами 110 , 114 и 122 являются автомобильная корпорация , автомобильная корпорация и первая и единственная модель . Коды для серии и имени можно найти в индексах 116 и 126, которые можно рассчитать, добавив 2 и 4 к индексам имен. Наконец, количество серий - это длина строки Car Corporation, деленная на 9 (очевидно).
Таким образом, мы кодируем ту часть вывода, которая соответствует данному производителю
[114 122 110]
, в виде строки"rzn"
.Код
источник
Жевательная резинка ,
227225 байтЭто не очень конкурентоспособно, но я просто не мог удержаться, чтобы опубликовать свой первый Bubblegum ответ на реальный вызов колмогоровской сложности .
Hexdump можно поменять местами
xxd -r -c 18 > xml.bg
.Код полностью игнорирует ввод. Сжатие выполнено с помощью zopfli , который использует формат DEFLATE, но получает лучшее соотношение, чем (g) zip.
Спасибо @ Sp3000 за -2 байта!
источник
sed, 449 байт
Предполагается, что sed будет работать с
-nr
параметрами.Безголовая версия:
источник
Баш,
388368365Небольшой тест потому что:
источник
car_manufacturer.txt
. 2. Здесь строка будет на 3 байта короче. 3. Использование zopfli вместо vanilla gzip экономит еще 12 байтов.<<L
на<<<(base encoded stuff)
.