В этом задании вам нужно проанализировать файлы морга из игры-мошенника Dungeon Crawl Stone Soup и вывести ее в STDOUT.
Что это за файлы морга?
Когда вы умираете, генерируется текстовый файл с данными этого персонажа внутри. Вы можете увидеть, какое снаряжение было у персонажа, что произошло за последние несколько ходов и сколько монстров он убил.
Вы можете найти пример файла морга здесь
Соревнование
Ваша задача - создать программу, которая берет один из этих файлов из STDIN, анализирует его и выводит данные в STDOUT.
Чтобы облегчить эту задачу, вам нужно только разобрать первый блок текста. (доThe game lasted <time> (<turns> turns).
Вам необходимо проанализировать и вывести следующую информацию:
- Номер версии.
- Счет.
- Имя персонажа, звание, раса и класс.
- Уровень персонажа.
- Причина смерти / победы.
- Количество ходов продолжалось.
Пример:
Dungeon Crawl Stone Soup version <version number> character file.
<score> <name> the <title> (level <level>, 224/224 HPs)
Began as a <race> <class> on Mar 16, 2015.
Was the Champion of the Shining One.
<cause of death/victory>
The game lasted 16:11:01 (<turns> turns).
Тестовые случаи
Тестовый пример 1 - Победа
Пример вывода - Победа:
Version: 0.16.0-8-gd9ae3a8 (webtiles)
Score: 16059087
Name: Ryuzilla the Conqueror
Character: Gargoyle Berserker
Level: 27
Cause of Death/Victory: Escaped with the Orb and 15 runes on Mar 17 2015!
Turns: 97605
Тестовый пример 2 - Смерть
Пример вывода - Смерть:
Version: 0.16-a0-3667-g690a316 (webtiles)
Score: 462
Name: 8Escape the Ruffian
Character: Bearkin Transmuter
Level: 6
Cause of Death/Victory: Slain by an orc wielding a +0 trident (3 damage) on level 4 of the Dungeon.
Turns: 3698
правила
- Это Код-гольф поэтому выигрывает самый короткий код.
- В случае ничьей побеждает самый старый ответ.
- Нет стандартных лазеек.
- Ввод файла должен быть взят из STDIN
- Вывод должен быть отправлен в STDOUT
- Метки перед выводом (напр.
Turns:
) Являются необязательными.
Version:
или достаточно для вывода фрагментов информации в том же порядке, по одному на строку?Ответы:
Perl, 151 байт
148 кодов + 3 переключателя (
-0, -l, -p
). Я уверен, что это можно улучшить :)Принимает ввод из STDIN и печатает результат при получении EOF.
Ungolfed:
ideone.com
источник
F #, 377 байт
источник
Javascript (ES6),
297230 байтовНа данный момент это регулярное выражение, управляемое тестом.
Он просто заменяет нежелательную информацию и сохраняет важные вещи.
Он создает анонимную функцию, которая просто возвращает нужный текст.
Разве это не зверь?
Спасибо за подсказку sysreq о том, что ярлыки необязательны. Это спасло меня 67 байтов !
Вы можете проверить выражение resulgar на: https://regex101.com/r/zY0sQ0/1
источник
_=>_.replace(/^.+version(.*) character file\.([\n\r]+)(\d+)([^\(]+) \([^\d]+( \d+),.+\n\s+.+as a(.+) on.+\n\s+(?:Was.+One\.\n)?((?:.|\n)+[!.])\n(?:.|\n)+\((\d+)(?:.|\n)+$/,'$1\n$3\n$4\n$6\n$5\n$7\n$8').replace(/\s+(\.{3} ?)?/,' ')
приемлемое решение всего за 230 байтовPython3, 472 байта
Я думал, что смогу получить это намного короче. Не удивлен, что я побил свое собственное представление, все же. Запустите это как
python3 dcss.py morgue-file.txt
.источник
Go,
589502489487 байтпосле запуска
go fmt
,go fix
иgo vet
вот версия "ungolfed":Редактировать: использование многоточечного импорта очень помогает.
Довольно очевидно, но я могу объяснить, если это будет необходимо. Это моя первая «настоящая» программа Go, и я все еще новичок в Codegolf, поэтому советы приветствуются!
Изменить: вы сказали «взять файл из STDIN», и вы можете запустить этот скрипт (если вы установили), запустив
go install <foldername>
и затем<binaryname> morgue-file.txt
илиgo run main.go morgue.txt
источник