Neste desafio, você precisa analisar os arquivos do necrotério do jogo roguelike Dungeon Crawl Stone Soup e enviá-lo para STDOUT.
O que são esses arquivos do necrotério?
Quando você morre, um arquivo de texto é gerado com os dados desse personagem. Você pode ver que equipamento o personagem tinha, o que aconteceu nos últimos turnos e quantos monstros ele matou.
Você pode encontrar um exemplo de arquivo do necrotério aqui
O desafio
Seu trabalho é criar um programa que pegue um desses arquivos do STDIN, analise-o e envie os dados para o STDOUT.
Para facilitar um pouco esse desafio, você só precisa analisar o primeiro bloco de texto. (atéThe game lasted <time> (<turns> turns).
Você precisa analisar e gerar as seguintes informações:
- O número da versão
- A pontuação.
- O nome do personagem, título, raça e classe.
- O nível do personagem.
- A causa da morte / vitória.
- A quantidade de voltas que a corrida durou.
Exemplo:
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).
Casos de teste
Caso de teste 1 - Vitória
Exemplo de saída - Vitória:
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
Caso de teste 2 - Morte
Exemplo de saída - Morte:
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
Regras
- Isso é código-golfe, então o código mais curto vence.
- Em caso de empate, a resposta mais antiga vence.
- Sem brechas padrão.
- A entrada do arquivo deve ser obtida no STDIN
- A saída deve ser enviada para STDOUT
- As etiquetas antes da saída (ex.
Turns:
) São opcionais.
Version:
ou é suficiente para gerar as informações na mesma ordem, uma por linha?Respostas:
Perl, 151 bytes
148 código + 3 interruptores (
-0, -l, -p
). Tenho certeza que isso pode ser melhorado :)Pega a entrada de STDIN e imprime o resultado ao receber EOF.
Ungolfed:
ideone.com
fonte
F #, 377 bytes
fonte
Javascript (ES6),
297230 bytesPor enquanto, essa é uma expressão regular orientada a testes.
Ele simplesmente substitui as informações indesejadas e mantém as coisas importantes.
Ele cria uma função anônima que simplesmente retorna o texto desejado.
Não é um animal?
Obrigado pela dica do sysreq sobre os rótulos serem opcionais. Isso me salvou 67 bytes !
Você pode testar a expressão resulgar em: https://regex101.com/r/zY0sQ0/1
fonte
_=>_.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} ?)?/,' ')
é uma solução aceitável em apenas 230 bytesPython3, 472 bytes
Eu pensei que seria capaz de ficar tão mais curto. Não surpreende que eu tenha vencido minha finalização. Execute como
python3 dcss.py morgue-file.txt
.fonte
Go,
589502489487 bytesapós a execução
go fmt
,go fix
ego vet
aqui é a versão "ungolfed":Editar: o uso de importações de pontos ajuda muito.
Bastante auto-explicativo, mas posso explicar se necessário. Este é o meu primeiro programa Go "real" e ainda sou iniciante no codegolf, portanto, dicas são bem-vindas!
Editar: você disse "pegue um arquivo do STDIN" e pode executar este script (se você estiver instalado) executando
go install <foldername>
e, em seguida,<binaryname> morgue-file.txt
ougo run main.go morgue.txt
fonte