Twoim zadaniem jest zsumowanie i wyprowadzenie wyniku jednego gracza w grze w kręgle z 10 pinami po maksymalnie 21 rzutach .
Rolki są reprezentowane jako sekwencja liczb całkowitych w preferowanej metodzie wprowadzania . Każda liczba całkowita odpowiada liczbie wyrzuconych szpilek w tym rzucie.
Punktacja
Po każdej rundzie liczba szpilek powalonych w tej rundzie jest liczona do końcowego wyniku. Jeśli gracz przewróci wszystkie dziesięć szpilek w pierwszym rzucie rundy, jest to uderzenie i runda się kończy. W przeciwnym razie runda trwa jeszcze jeden rzut. Jeśli drugi rzut rundy powali wszystkie pozostałe szpilki, jest to zapasowy .
Za każde uderzenie przysługuje premia równa sumie szpilek powalonych w dwóch kolejnych rzutach. Za każdą część zapasową przysługuje premia równa liczbie szpilek powalonych w następnym rzucie.
W 10. i ostatniej rundzie gracz może otrzymać dodatkowe rzuty: w przypadku strajku gracz otrzymuje dwa kolejne rzuty w celu uzupełnienia premii za uderzenie. W przypadku rezerwy gracz otrzymuje jeszcze jeden rzut.
Przykłady
Input: 4 3 8 2 7 1 10 7 3 0 10 2 2 10 10 5 4
Output: 131
Input: 10 10 9 1 7 3 2 7 10 1 9 10 7 1 10 10 10
Output: 183
Zasady
- Możesz założyć, że dane wejściowe są prawidłowe.
- Zgodnie z komentarzem Mego poluzowałem wymagania dotyczące metod wejścia / wyjścia, aby spełnić nasz obecny standard .
- Dozwolone są odpowiedzi w językach nowszych niż wyzwanie
- Najkrótszy kod wygrywa!
space separated integers
?Odpowiedzi:
GolfScript,
5041 znakówKolejna próba w GolfScript ( uruchom go online ).
Poniżej wyjaśniono kod. Rozwiązanie wykorzystuje naturę problemu stosu (konsumuje rolki jeden po drugim), ale w związku z tym dane wejściowe należy odwrócić.
Poprzednia wersja:
źródło
Python,
11611010510310099 znakówWydawanie 30 znaków na wejściu jest uciążliwe. Sugestie mile widziane.
Ogromne podziękowania dla Howarda za ulepszenia.
źródło
1+(z[i]!=10)
z2-(z[i]>9)
uratować jeden char.i
całkowicie usuniesz (ustaw na 0) i zamiast tegoi+=...
użyjeszz=z[2-(z[0]>9)::];
z=input()
powinny być w porządku (efektywnie biorąc ciąg znaków reprezentujący listęint
s i wprowadzająceval
ją). Jednak gdzieś powinny wypisywać się pełne programy (myślę, że wtedy też tak było). Jako taki, wierzę, że można to zmienić na 78-bajtowy programR, 101 bajtów
Nie jestem pewien, dlaczego to wyzwanie zostało zderzone, ale podoba mi się, więc i tak spóźnię się z odpowiedzią.
Wypróbuj online!
Nie golfowany:
Funkcja rekurencyjna. Pobiera
x
jako dane wejściowe, które przechowuje wyniki. Inicjujes
rdzenie ic
zlicza liczbę wyrzuconych rund.Instrukcja if sprawdza, czy wyrzucono 10 rund lub czy
x
jest pusta. W takim przypadku wynik jest zwracany. W przeciwnym razie funkcja wywoła się w następujący sposób:Usuwa rzuty
x
, sprawdzając, czy to strajk, czy nie. Jeśli tak, pierwszy wpis jest usuwany, w przeciwnym razie dwa pierwsze.(S=x[1]!=10)
sprawdza strajki. Usuwamy-
indeks ( )0:S
, gdzieS
wynosi 1, jeśli jest to ostrzeżenie, a 0, jeśli nie. A następnie dodajemy jeden:-(0:(x[1]!=10)+1)
. Skrócone przekazujemyx
do następnego połączenia.Jeśli chodzi o wynik, można to stwierdzić, biorąc pod uwagę,
x[1:2]
czy jest to zwykła tura ix[1:3]
czy jest to strajk czy zapasowy. Sprawdzamy, czysum(x[1:2])
jest większy czy równy 10. Jeśli jest to strajk, oczywiście tak jest. Jeśli jest to zapasowe, to również działa. Więc jeśli jest to PRAWDA, dodajemyx[3]
do sumy. To jest następnie dodawane dos
.źródło
CoffeeScript (
234215170)EDYCJA : Mocne przepisywanie, bezwstydnie plagiatujące podejście Howarda oparte na stosie. Jestem pewien, że można uzyskać więcej, aby uzyskać dostęp do ostatniego elementu tablicy bez niszczenia go ...
źródło
Rubinowy, 252 bajtów
Akceptuje dane wejściowe do tablicy, najpierw dodaj wszystkie elementy, a następnie wyszukuje zapasową i uderzającą premię
źródło
PHP, 82 bajty
pobiera dane wejściowe z argumentów wiersza poleceń; Biegnij z
-nr
lub przetestuj online .awaria
źródło
Perl 5 , 65 + 2 = 67 bajtów
Wymaga
-ap
flagWypróbuj online!
źródło
Galaretka ,
3635 bajtówŁącze monadyczne przyjmujące listę liczb całkowitych i zwracające liczbę całkowitą.
Wypróbuj online!
W jaki sposób?
Oblicza wynik każdego nakładającego się przebiegu trzech misek, tak jakby był to ten, który zaczął się na początku ramki i opcjonalnie dołącza identyfikator uderzenia (
-1
), spłaszcza tę wynikową listę, dzieli ją na identyfikatory uderzenia, a następnie odrzuca co drugi wynik z każda porcja (usuwanie wyników tych przebiegów, które tak naprawdę nie zaczęły się od początku ramki).Aby zaspokoić ostateczną klatkę, najpierw do wejścia dołączane jest zero (aby umożliwić 3-mądre krojenie, aby umożliwić ramie rozpoczęcie od tego, co było przedostatnią misą), a wynikowe wyniki są obcinane do pierwszej dziesiątki (aby usunąć teraz możliwa fałszywa 11. rama) przed ich zsumowaniem.
źródło
Perl, 140?
Pierwsze podejscie:
Niestety w niektórych przypadkach zawodzi. Przyjdę i powtórzę to później.
źródło