W Dungeons & Dragons prawie o wszystkim decyduje rzut kostką. Zazwyczaj, jeśli rzut jest większy lub równy określonej wartości, próba zrobienia tego, co chcesz, kończy się powodzeniem, a w przeciwnym razie kończy się niepowodzeniem. Najczęściej do rzutu używana jest 20-stronna kostka (aka d20).
Innym razem stosuje się system wyzwań umiejętności. Jest podobny do prostego systemu opisanego powyżej, ale o sukcesie decyduje to, czy gracz (ci) odniesie sukces w poszczególnych rzutach określoną liczbę razy, zanim nie odniesie pewnej liczby porażek. Na przykład gracz (-y) może próbować wybrać wiele zamków do drzwi z ograniczoną liczbą wytrychów. Poszczególne udane rzuty oznaczają pomyślne wybranie jednego z zamków, a poszczególne nieudane rzuty oznaczają zerwanie wytrycha. Ogólny sukces oznaczałby pomyślne wybranie wszystkich zamków przed zerwaniem wszystkich wytrychów.
Ponadto niektóre rzuty mogą być rzutami krytycznymi. Na k20 rzut 1 jest krytyczną porażką, co powoduje natychmiastowe niepowodzenie całego wyzwania (w powyższym przykładzie gracz (y) może przypadkowo zaalarmować strażnika). Rzut 20 jest krytycznym sukcesem, skutkującym natychmiastowym zakończeniem całego wyzwania (w powyższym przykładzie gracz (gracze) mogą znaleźć zestaw kluczy do zamków, eliminując potrzebę ich wybierania). W przypadku rzutu krytycznego wyzwanie jest natychmiast kończone, a wynik decyduje, niezależnie od poprzedniej liczby sukcesów i porażek.
W tym wyzwaniu otrzymasz trudność, liczbę potrzebnych sukcesów i liczbę niepowodzeń, w których wyzwanie się nie powiodło. Musisz zasymulować gracza podejmującego wyzwanie i przedstawić wynik.
Wejście
3 liczby całkowite, reprezentujące wartość, która musi zostać osiągnięta lub przekroczona, aby odnieść sukces przy pojedynczym rzucie, liczbę sukcesów potrzebnych do odniesienia sukcesu w wyzwaniu oraz liczbę niepowodzeń, w których wyzwanie nie powiodło się. Kolejność i format danych wejściowych nie ma znaczenia, o ile określisz, jakiej kolejności będziesz używać. Poziom trudności będzie wynosił od 1 do 20 włącznie, a liczba sukcesów i porażek będzie wynosić od 1 do 100 włącznie.
Wynik
Wyniki każdego z rzutów d20 (liczby całkowite, w kolejności) oraz ogólny wynik wyzwania (wartość true / falsey). Format nie ma znaczenia, o ile poszczególne wyniki są w porządku, ogólny wynik pojawia się przed lub po wszystkich pojedynczych rolkach (na przykład nie można wyprowadzić ogólnego wyniku w środkowej części rolek) i określasz używany format wyjściowy i konsekwentnie go używasz.
Przykłady (wartości w nawiasach podano w celu wyjaśnienia i nie trzeba ich włączać):
Wejście:
12 5 3 (difficulty successes failures)
Wynik:
15 (success, 1-0)
10 (failure, 1-1)
5 (failure, 1-2)
16 (success, 2-2)
12 (success, 3-2)
15 (success, 4-2)
19 (success, 5-2)
True (overall success)
Wejście:
15 2 3 (difficulty failures successes)
Wynik:
0 (overall failure)
15 (success, 1-0)
12 (failure, 1-1)
13 (failure, 1-2)
Wejście:
5 5 10 (successes failures difficulty)
Wynik:
11 (success, 1-0)
5 (failure, 1-1)
20 (critical success)
1 (overall success)
Wejście:
3 10 3 (failures difficulty successes)
Wynik:
12 (success, 1-0)
11 (success, 2-0)
1 (critical failure)
False (overall failure)
Zasady
- To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach
- Musisz losowo wybrać wartość całkowitą od 1 do 20 (włącznie) dla każdego rzutu. Każda wartość powinna mieć jednakowe prawdopodobieństwo wyboru (lub tak bliska, jak to możliwe).
the number of successes and failures will both be between 1 and 100, inclusive.
Tak, istnieje możliwość, że pojedyncza awaria zakończy się niepowodzeniem całego wyzwania.Odpowiedzi:
JavaScript,
83787675 bajtówTen kod rekurencyjnie odlicza sukcesy i porażki. Kiedy odliczone są albo sukcesy (
s
), albo porażki (f
)0
, kończymytrue
wartością!s
kiedys
jest0
lub wartością fałszuf
kiedyf
jest0
.Dane wyjściowe mają postać wyrażeń regularnych
/^(-\d{1,2})+(0|true)$/
(lub ściślej/^(-[1-9]|-1[0-9]|-20)+(0|true)$/
). Oznacza to, że wejście ma wiodący łącznik, następnie wartości rzutu określone przez łączniki, a na końcu ostateczny wynik (0
lubtrue
), który nie jest wyznaczony z ostatniego rzutu. Jest to jednak nadal jednoznaczna gramatyka, ponieważ zawsze można rozróżnić wynik wykorzystania i rzut końcowy: ostatni znak wyniku (albo0
alboe
) zawsze wskazuje wynik, a wynik końcowy0
zawsze odczytuje się oddzielnie od liczby (liczb) ostatniego rzutu.Przykładowe dane wyjściowe dla
F(11,3,4)
:Wyjaśnienie:
Ten kod działa poprzez rzutowanie ujemnego d20 i (ab) przy użyciu znaków ujemnych jako ograniczników.
Wyrażenia numer-minus-logiczna pracy, bo
true
ifalse
odlewa się1
i0
w kontekście numerycznym. W takim przypadkud>-r
będzie,1
jeśli rzut jest porażką i0
jeśli był sukcesem.źródło
Python, 134 bajty
Dzięki Pietu1998 za zapisane bajty
Całkiem proste, prawdopodobnie można nieco bardziej zagrać w golfa, ale potrzebowaliśmy czegoś, aby to rozpocząć. Wypróbuj online .
źródło
from random import*
i upuśćrandom.
, użycierandint(1,20)
zamiastrandrange(20)+1
wymienićand
z*
. Możesz także umieścić wynik końcowy na początku wyjścia, oszczędzając miejsce.Python 2,
123121 bajtów(Ta odpowiedź miesza spacje i tabulatory , więc pierwszy poziom wcięcia to pojedyncza spacja, a drugi to pojedyncza tabulator.)
Funkcja
f
przyjmuje następujące argumenty:a
, próg dla pojedynczego rzutu kostką liczony jako sukces,b
, liczba sukcesów potrzebnych do ogólnego sukcesu,c
, liczba awarii potrzebnych do ogólnej awarii.Na każdym rzucie rzuć albo
b
alboc
jest zmniejszany (ale nie oba). Dopóki oba są dodatnie, pętla ponownie, z wyjątkiem krytycznej awarii lub krytycznego sukcesu.Zakładając brak krytycznych sukcesów lub niepowodzeń, kiedy kończy się pętla albo
b
czyc
będzie zero, ale nie jednocześnie. W takim przypadku funkcja zwraca tylko bieżącą wartośćc
, która wynosi zero (Falsey), jeśli wyczerpiemy wszystkie nasze awarie, i dodatnia (Prawda), jeśli nam się uda.Jako bonus, dane wyjściowe informują o tym, ile błędów pozostało, co jest miłe w przypadku, gdy (powiedzmy) więcej blokad do wyboru później. (Chyba że zakończy się krytycznym niepowodzeniem lub sukcesem, w którym to przypadku wyjście będzie wartością logiczną zamiast int.)
źródło
Pip , 39 bajtów
Ktoś powiedział, że chce znaleźć rozwiązanie w języku golfowym.
Jestem prawie pewien, że nie używa żadnych funkcji językowych nowszych niż pytanie. Pobiera dane jako argumenty wiersza poleceń w następującej kolejności: trudność, wymagane sukcesy, wymagane niepowodzenia. Wyjście 0 dla ogólnego niepowodzenia lub niezerowe dla ogólnego sukcesu. Wypróbuj online!
Podejście to jest dość prostą strategią pętli podczas, z jedną lub dwiema sztuczkami zaczerpniętymi z innych rozwiązań. Oto wersja z komentarzami, białymi znakami i dodatkowymi danymi wyjściowymi:
źródło
Ruby 2.2, 75 bajtów
Podstawowe iteracyjne rozwiązanie. Przykładowy przebieg:
Moc wyjściowa:
Można zobaczyć go w ruchu na IDEONE tutaj .
źródło
VBA 180 bajtów
Przykładowy wynik
Ostatnia cyfra wyjściem będzie
0
dlaFalse
lub1
zaTrue
. Każdy rzut jest oddzielony nową linią. Korzysta z VBA wbudowanego w RNG,rnd()
który jest znany z tego, że nie jest tak przypadkowy , ale powinno to najlepiej spełniać wymagania.źródło
SpecBAS - 165 bajtów
Dane wejściowe należy wprowadzać według poziomu trudności, sukcesów, awarii.
Nowa wersja SpecBAS umożliwia teraz „?” zamiast
PRINT
i eliminuje potrzebęLET
przed przypisywaniem zmiennych, więc był to dobry sposób na ich wypróbowanie.Ponieważ tablice są domyślnie oparte na 1, linia 6 zwraca 0/1, jeśli rzut przewyższa trudność i dodaje 1, aby zaktualizować właściwy indeks.
źródło
Perl 6 ,
10199 bajtówDane wejściowe to zmienna tablica zawierająca trudność, sukcesy i niepowodzenia
Dane wyjściowe to lista dwóch elementów, pierwszy element to lista walcowanych wartości, drugi element to liczba pozostałych awarii.
Stosowanie:
źródło