Dungeon Master to jedna z pierwszych gier fabularnych czasu rzeczywistego, pierwotnie wydana w 1987 roku na Atari ST. Wśród innych ekscytujących rzeczy na ten czas oferował dość wyrafinowany system zaklęć oparty na runach.
Twoim zadaniem dzisiaj jest napisanie programu lub funkcji, która ocenia liczbę punktów many wymaganych do rzucenia danego zaklęcia w Dungeon Master.
System „rzucania zaklęć” jest prawym górnym cyjanem na powyższym obrazku.
Czary, runy i many
Czary Mistrza Lochów składają się z 2 do 4 run, wybranych spośród następujących kategorii, w dokładnie takiej kolejności:
- Moc (obowiązkowe)
- Wpływ żywiołów (obowiązkowy)
- Formularz (opcjonalnie)
- Klasa / wyrównanie (opcjonalnie)
Oznacza to, że prawidłowe zaklęcia to:
- Moc + Wpływ Żywiołów
- Moc + Wpływ Żywiołów + Forma
- Moc + Wpływ Żywiołów + Forma + Klasa / Wyrównanie
Każda kategoria zawiera 6 run, a każda runa ma powiązany podstawowy koszt many:
=============================================================================
| Power | Rune | Lo | Um | On | Ee | Pal | Mon |
| +-----------+------+------+------+------+------+------+
| | Base cost | 1 | 2 | 3 | 4 | 5 | 6 |
=============================================================================
| Elemental Influence | Rune | Ya | Vi | Oh | Ful | Des | Zo |
| +-----------+------+------+------+------+------+------+
| | Base cost | 2 | 3 | 4 | 5 | 6 | 7 |
=============================================================================
| Form | Rune | Ven | Ew | Kath | Ir | Bro | Gor |
| +-----------+------+------+------+------+------+------+
| | Base cost | 4 | 5 | 6 | 7 | 7 | 9 |
=============================================================================
| Class / Alignment | Rune | Ku | Ros | Dain | Neta | Ra | Sar |
| +-----------+------+------+------+------+------+------+
| | Base cost | 2 | 2 | 3 | 4 | 6 | 7 |
=============================================================================
Ocena kosztu many
Koszt many zaklęcia to suma kosztu many wszystkich run:
Koszt runy Mocy zawsze jest równy jej kosztowi podstawowemu (od 1 do 6).
W przypadku innych run obowiązuje następująca formuła:
gdzie moc jest kosztem podstawowym runy Mocy.
Przykłady
Spell: Lo Ful
Cost : 1 + floor((1 + 1) * 5 / 2) = 1 + 5 = 6
Spell: Um Ful
Cost : 2 + floor((2 + 1) * 5 / 2) = 2 + 7 = 9
Spell: Pal Vi Bro
Cost : 5 + floor((5 + 1) * 3 / 2) + floor((5 + 1) * 7 / 2) = 5 + 9 + 21 = 35
Wyjaśnienia i zasady
- Twój wkład będzie się składał z 2 do 4 łańcuchów oznaczających runy zaklęcia. Możesz wziąć je w dowolnym rozsądnym formacie, takim jak 4 różne parametry, tablica ciągów znaków (np.
['Lo', 'Ful']
) Lub tylko jeden ciąg znaków z wybranym separatorem jednoznakowym (np'Lo Ful'
.). Podaj wybrany format wejściowy w swojej odpowiedzi. - Runy mają gwarancję ważności.
- Kolejność kategorii musi być przestrzegana. Niewykorzystane kategorie mogą być brakujące lub zastąpione pewną wartością fałszowania.
- Możesz zaakceptować runy w dowolnym z następujących formatów: 1. Wielka litera, po której następuje mała litera (
'Ful'
) 2. Wszystkie małe litery ('ful'
) 3. Wszystkie wielkie litery ('FUL'
). Ale nie można mieszać różnych formatów. - Oczywiście nie dbamy o to, czy zaklęcie rzeczywiście ma jakiś wpływ na grę (bo ciekawe, przydatne zaklęcia są wymienione tutaj ).
- To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach.
- I pamiętaj: Lord Chaos cię obserwuje!
Przypadki testowe
Spell | Output
---------------+-------
Lo Ful | 6
Um Ful | 9
On Ya | 7
Lo Zo Ven | 12
Pal Vi Bro | 35
Ee Ya Bro Ros | 31
On Ful Bro Ku | 31
Lo Zo Kath Ra | 20
On Oh Ew Sar | 35
Ee Oh Gor Dain | 43
Mon Zo Ir Neta | 68
Mon Des Ir Sar | 75
źródło
Odpowiedzi:
SOGL V0.12 ,
11078 bajtówWypróbuj tutaj!
Prawdopodobnie mógłby golfa bajt lub dwa z przerobić wszystko
Wyjaśnienie:
źródło
Python 2 ,
135119115 bajtówWypróbuj online!
Dane wejściowe to lista ciągów ze standardowego wejścia
źródło
05AB1E ,
8382 bajtyWypróbuj online!
-1 dzięki Emignie .
SOOOOOOO bez golfa :(
Wyjaśnienie:
źródło
.•Y<εΔ•
na początku, nie musisz zwiększać indeksu.JavaScript (ES6),
1571561161121009997 bajtówPobiera dane wejściowe jako tablicę ciągów.
Wypróbuj online!
Wyjaśnienie
Hoo, chłopcze, będzie fajnie - moje objaśnienia do trywialnych rozwiązań są do bani! Spróbujmy ...
Anonimowa funkcja przyjmująca tablicę jako argument za pomocą parametru
a
.Zmniejsz elementy w tablicy, przepuszczając każdy przez funkcję;
t
parametrem jest uruchomiony sumie wc
parametrem jest prąd i łańcuch0
jest wartość początkowat
.Konwertuj bieżący element z ciągu podstawowego 36 na liczbę całkowitą dziesiętną.
Wykonaj na nim kilka operacji modulo.
Chwyć znak z ciągu o tym indeksie i przekonwertuj go na liczbę.
Przypisz tę liczbę do zmiennej
v
.Sprawdź, czy zmienna
a
jest liczbą. Pierwszym elementema
będzie tablica ciągów, próba konwersji tego na liczbę zwróciNaN
, co jest falsey. Przy każdym kolejnym przejściua
będzie dodatnia liczba całkowita, co jest zgodne z prawdą.Jeśli
a
jest liczbą, mnożymy ją przez wartośćv
, dodajemy wartośćv
i przesuwamy bity wyniku o 1 bit w prawo, co daje taki sam wynik jak dzielenie przez 2 i podłogę.Jeśli
a
nie jest liczbą, przypisujemy jej wartośćv
, co da nam również0
dodanie do naszej sumy przy pierwszym przejściu.Na koniec dodajemy wynik z trójki powyżej do naszej sumy bieżącej.
Oryginalny, 156 bajtów
źródło
a=>a.reduce((t,c)=>t+(v=+'27169735020045670435262'[parseInt(c,36)%141%83%50%23],+a?a*v+v>>1:a=v),0)
(EDYCJA: usunął nieistotny komentarz na temat liczb całkowitych przekazany w danych wejściowych - wygląda na to, że nie bardzo dobrze rozumiałem własne wyzwanie ^^)JavaScript,
212210207206 bajtówProsty algorytm wyszukiwania, ciągi wyszukiwania po prostu przyczyniają się do całkowitej liczby bajtów.
Kod
Format wejściowy
Tablica ciągów, każdy element jest ciągiem wielkich liter. Przykład: [„Pon”, „Zo”, „Ir”, „Neta”]
Wyjaśnienie
To pytanie o podstawowe koszty.
Inicjuje 2 zmienne pierwszym elementem z powyższego wyniku tablicy i usuwa ten element. Najpierw musi być rzutowany na numer, w przeciwnym razie będzie traktowany jako konkatenacja łańcucha w następnej części.
Dodaje koszty run innych niż moc do mocy podstawowej. Przesunięcie stosuje się zamiast podłogi (bla) / 2.
Oceń ostatni wynik. (Źródło: Step Hen)
Przypadki testowe
Edycja 1: 212> 210 - Usunięto parę aparatów ortodontycznych
Edycja 2: 210> 207 - Dziękuję Krok Hen za przypomnienie zasad JS i podpowiedź na temat korzystania z funkcji eval (). Ponieważ AS3 zabrania używania eval (), nie używałem tego przez długi czas
Edytuj 3: 207> 206 - Dzięki Shaggy za pomysł zamiany indexOf () na search ()
źródło
g
wewnątrzg
, zezwalamy JS na usunięcieg=
. Możesz także zaoszczędzić kilka bajtów, przełączając go na eval i usuwającreturn
: Fiddlesearch
zaoszczędzi ci bajtów ponadindexOf
.Haskell ,
159156148133130127 bajtówWypróbuj online!
źródło
Python 2 ,
320 318 314 311307 bajtówFormat wejściowy - lista ciągów. Pełny program:
Wypróbuj online!
źródło
Excel, 339 bajtów
Wprowadzone dane wejściowe
A1
za pośrednictwemD1
. Formuła w dowolnej innej komórce.Alternatywnie, importowanie jako CSV:
Excel i CSV, 228 bajtów
Dane wejściowe wprowadzone w pierwszym wierszu
SPACE
dla wartości null. Wynik wyświetlany w A3.źródło
SCALA, 1106 znaków, 1106 bajtów
To jest dość długie, prawdopodobnie możliwe do zoptymalizowania, ale fajnie było to zrobić :)
Format wejściowy : runy rozdzielone spacjami w ciągu. Jeśli są tylko 2 dane wejściowe (np. „Lo Ful”), mój kod uzupełnia je
while(k.length<4)k:+=""
(dzięki czemu mogę zapisać 24 bajty , zmieniając parametry, jeśli wymagam, aby było to „ABC D”).while(k.length<4)k:+=""
Dzięki za to wspaniałe wyzwanie. Wypróbuj online!
źródło
Język programowania Szekspira , 4420 bajtów
Pobiera dane wejściowe jako ciąg wielkich liter.
Wyjaśnienie już wkrótce ... Zabawny fakt:
Microsoft
to rzeczownik przeczący w języku SPL. Wszystkie inne przyjęte słowa pojawiły się w dziełach Szekspira.Wypróbuj online!
źródło
Java (OpenJDK 8) , 252 bajty
Wypróbuj online!
Runy są wprowadzane jako
String[]
(tablicaString
), w pierwszej formie (pierwsza litera to duża litera, reszta to małe litery).Jest to standard „znaleźć n-tej litery” metoda, przy skręcie, że zarówno
Ros
iRa
występują w 4 segmencie. Traktowałem to z bezpośrednim zastąpieniemRa
doX
.źródło
Siatkówka ,
124123 bajtyWypróbuj online! Link zawiera przypadki testowe. Wykonuje runy rozdzielone spacjami. Objaśnienie: Początkowe etapy po prostu zamieniają każdą runę na cyfrę, która jest następnie konwertowana na unarną. Liczby po pierwszym są pomnożone przez jeden więcej niż pierwszy numer, po czym pierwsza liczba zostaje podwojona. Liczba całkowita z ostatniego etapu dzieli wynik przez 2 i przyjmuje sumę.
źródło
C 274
Więcej nie golfistów:
Musisz podać cztery argumenty wiersza poleceń - więc w pierwszym przypadku testowym musisz uruchomić
./a.out Lo Ful "" ""
źródło
Idź, 205 bajtów
Jest to funkcja wywoływalna, pobiera runy jako kawałek ciągów znaków, np
[]string{"Um", "Ful"}
.Wypróbuj na Play Playground .
źródło
Haskell, 623 bajty
Używanie narzędzi ADT zamiast numerycznego voodoo.
UWAGA: Dodaj 36 dla
{-# LANGUAGE GADTs,ViewPatterns #-}
-XGADTs -XViewPatterns
Dane wejściowe: pojedynczy czar jako zwykły ciąg znaków, np
Lo Ful
Um Ful
Multilinowanie można wykonać, zamieniając ostatni wiersz na
Ale to dodałoby bajty do liczby
źródło