En este desafío, debes analizar los archivos de la morgue del juego roguelike Dungeon Crawl Stone Soup y enviarlos a STDOUT.
¿Qué son estos archivos de la morgue?
Cuando mueres, se genera un archivo de texto con los datos de ese personaje dentro. Puedes ver qué equipo tenía el personaje, qué sucedió durante los últimos turnos y cuántos monstruos ha matado.
Puede encontrar un ejemplo de archivo de la morgue aquí
El reto
Su trabajo es crear un programa que tome uno de esos archivos de STDIN, lo analice y envíe los datos a STDOUT.
Para hacer este desafío un poco más fácil, solo tiene que analizar el primer bloque de texto. (hastaThe game lasted <time> (<turns> turns).
Debe analizar y generar la siguiente información:
- El número de versión.
- El marcador.
- El nombre del personaje, título, raza y clase.
- El nivel del personaje.
- La causa de la muerte / victoria.
- La cantidad de turnos que duró la carrera.
Ejemplo:
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 prueba
Caso de prueba 1 - Victoria
Ejemplo de salida - Victoria:
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 prueba 2 - Muerte
Ejemplo de salida - Muerte:
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
Reglas
- Este es el código de golf, por lo que gana el código más corto.
- En caso de empate, gana la respuesta más antigua.
- No hay lagunas estándar.
- La entrada del archivo debe tomarse de STDIN
- La salida debe enviarse a STDOUT
- Las etiquetas antes de la salida (ej.
Turns:
) Son opcionales.
Version:
o es suficiente para generar los datos en el mismo orden, uno por línea?Respuestas:
Perl, 151 bytes
148 código + 3 interruptores (
-0, -l, -p
). Estoy seguro de que esto se puede mejorar :)Toma información de STDIN e imprime el resultado al recibir EOF.
Sin golf:
ideone.com
fuente
F #, 377 bytes
fuente
Javascript (ES6),
297230 bytesPor ahora, esta es una expresión regular basada en pruebas.
Simplemente reemplaza la información no deseada y mantiene las cosas importantes.
Crea una función anónima que simplemente devuelve el texto deseado.
¿No es una bestia?
Gracias por el consejo de sysreq sobre que las etiquetas son opcionales. ¡Eso me salvó 67 bytes !
Puede probar la expresión resultante en: https://regex101.com/r/zY0sQ0/1
fuente
_=>_.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} ?)?/,' ')
es una solución aceptable a solo 230 bytesPython3, 472 bytes
Pensé que sería capaz de acortarme mucho más. Sin embargo, no me sorprende que haya superado mi propia sumisión. Ejecútalo como
python3 dcss.py morgue-file.txt
.fuente
Ir,
589502489487 bytesdespues de correr
go fmt
,go fix
ygo vet
aquí está la versión "sin golf":Editar: usar punto-importaciones ayuda mucho.
Bastante claro, pero puedo explicar si es necesario. Este es mi primer programa Go 'real' y todavía soy un principiante en codegolf, ¡así que los consejos son bienvenidos!
Editar: usted dijo "tomar un archivo de STDIN", y puede ejecutar este script (si tiene instalado) ejecutando
go install <foldername>
y luego<binaryname> morgue-file.txt
ogo run main.go morgue.txt
fuente