W tym wyzwaniu musisz przeanalizować pliki kostnicy z roguelike gry Dungeon Crawl Stone Soup i wysłać ją do STDOUT.
Co to za pliki kostnicy?
Po śmierci generowany jest plik tekstowy z danymi tego znaku. Możesz zobaczyć, jakie wyposażenie posiadał bohater, co wydarzyło się w ciągu ostatnich kilku tur i ile potworów zabił.
Przykładowy plik kostnicy można znaleźć tutaj
Wyzwanie
Twoim zadaniem jest stworzenie programu, który pobierze jeden z tych plików ze STDIN, przeanalizuje go i wyśle dane do STDOUT.
Aby to wyzwanie było trochę łatwiejsze, musisz przeanalizować tylko pierwszy blok tekstu. (aż doThe game lasted <time> (<turns> turns).
Musisz przeanalizować i wydrukować następujące informacje:
- Numer wersji.
- Wynik.
- Nazwa postaci, tytuł, rasa i klasa.
- Poziom postaci.
- Przyczyna śmierci / zwycięstwa.
- Liczba obrotów trwała bieg.
Przykład:
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).
Przypadki testowe
Przypadek testowy 1 - zwycięstwo
Przykładowy wynik - Zwycięstwo:
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
Przypadek testowy 2 - śmierć
Przykładowy wynik - Śmierć:
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
Zasady
- To jest golf-golf więc wygrywa najkrótszy kod.
- W przypadku remisu wygrywa najstarsza odpowiedź.
- Brak standardowych luk.
- Dane wejściowe pliku należy pobrać ze STDIN
- Dane wyjściowe należy wysłać do STDOUT
- Etykiety przed wyjściem (np.
Turns:
) Są opcjonalne.
Version:
lub wystarczają do wydrukowania informacji w tej samej kolejności, po jednej w wierszu?Odpowiedzi:
Perl, 151 bajtów
Kod 148 + 3 przełączniki (
-0, -l, -p
). Jestem pewien, że można to poprawić :)Pobiera dane wejściowe ze STDIN i drukuje wynik po otrzymaniu EOF.
Nie golfowany:
ideone.com
źródło
F #, 377 bajtów
źródło
JavaScript (ES6),
297230 bajtówNa razie jest to wyrażenie regularne sterowane testem.
Po prostu zastępuje niechciane informacje i zachowuje ważne rzeczy.
Tworzy anonimową funkcję, która po prostu zwraca poszukiwany tekst.
Czy to nie jest bestia?
Dzięki za wskazówkę sysreq na temat opcjonalności etykiet. To zaoszczędziło mi 67 bajtów !
Możesz przetestować wyrażenie resulgar na: https://regex101.com/r/zY0sQ0/1
źródło
_=>_.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} ?)?/,' ')
jest to akceptowalne rozwiązanie przy zaledwie 230 bajtachPython3, 472 bajtów
Myślałem, że będę w stanie być o wiele krótszy. Jednak nie jestem zaskoczony, że pokonałem własne zdanie. Uruchom to jak
python3 dcss.py morgue-file.txt
.źródło
Idź,
589502489487 bajtówpo uruchomieniu
go fmt
,go fix
ago vet
tutaj jest wersja „bez golfa”:Edytować: użycie importu kropkowego bardzo pomaga.
Dość oczywiste, ale w razie potrzeby mogę wyjaśnić. To mój pierwszy „prawdziwy” program Go i wciąż jestem początkującym w codegolf, więc napiwki są mile widziane!
Edycja: powiedziałeś „weź plik ze STDIN” i możesz uruchomić ten skrypt (jeśli masz zainstalowany), uruchamiając,
go install <foldername>
a następnie<binaryname> morgue-file.txt
lubgo run main.go morgue.txt
źródło