Myślę, że każdy zna rzutki, niektórzy ludzie nie rozumieją wyniki więc dla tych ludzi, tutaj jest link przydatne w tej sprawie.
Tablica
Tarcza do gry w rzutki można porównać do kawałka ciasta podzielonego na 20 części. Każdy kawałek jest podzielony na 4 sekcje.
- mały pierścień zewnętrzny zwany podwójnym (punkty x2)
- duży pierścień zwany singlem (punkty x1)
- kolejny mały pierścień o nazwie potrójny (punkty x3)
- kolejny duży pierścień zwany singlem (punkty x1)
Na środku planszy są jeszcze 2 pierścienie, zielony i czerwony (klasyczna tablica)
- Czerwony pierścień, środek planszy zwany bullseye lub double bull i jest dobry na 50 punktów. Ten jest liczony jako podwójny i dlatego może się przy nim kasować.
- Zielony pierścień, zwany bykiem, pojedynczym bykiem lub po prostu 25 i liczy się jako pojedynczy.
Wyzwanie
Znajdź wszystkie możliwości realizacji transakcji za pomocą 3 rzutek lub mniej.
Użytkownik może wprowadzić liczbę całkowitą i będziesz musiał sprawdzić, czy to możliwe, aby uzyskać wynik do 0 za pomocą 3 rzutek (lub mniej).
Przykłady
Przykład 1:
Input: 170
Output: T20, T20, Bullseye
Przykład 2:
Input: 6
Output: D3;
S3,S1,D1;
S2,D2;
S2,S2,D1;
D2,D1;
S4,D1;
D1,D1,D1;
S1,S1,D2;
T1,S1,D1;
Przykład 3:
Input: 169
Output: No possible checkout!
Zasady
- Podstawowa zasada rzutki, musisz zakończyć podwójną (zewnętrzny pierścień planszy lub dziesiątkę)
- Brak wykorzystania zasobów zewnętrznych.
- Dozwolone jest twarde kodowanie możliwych transakcji, ale pamiętaj, że to kodegolf, nie spowoduje to, że Twój kod będzie krótki;)
- Komórki do trafienia zostaną wyświetlone w formacie C + N, gdzie C = T dla potrójnego, D dla podwójnego i S dla pojedynczego.
- bullseye można nazwać bullseye lub DB, DBull lub coś podobnego.
Możliwe kasy
Na początek najwyższa możliwa kasa to 170.
169 38,166,165,163,162,159 nie jest możliwe w 3 rzutkach.
Najniższa możliwa kasa to 2.
Dodatkowo
Nie jest to wymagane, dodaj możliwość pokazania wszystkich możliwych transakcji dla wszystkich wyników. Po prostu zastanawiam się, ile kombinacji jest możliwych: P
Zwycięzcą zostanie ten z najkrótszym kodem.
Szczęśliwego kodowania.
Odpowiedzi:
Znaki C ++
248/228230/214Rev 0:
Rev 1. Zapisano niektóre znaki, deklarując wszystkie zmienne na raz i eliminując niepotrzebne nawiasy. Okazuje się, że w C ++ cała logika i bitowa i / lub mają niższy priorytet niż porównania.
Zrobiłem funkcję, a nie program, jak inni. Zwraca całkowitą liczbę znalezionych możliwości. Można go zmniejszyć z 230 do 214 znaków, eliminując funkcję sumowania.
Wyjściowa próbka, wynik 6:
Liczę różne pierwsze i drugie strzałki jako tę samą kombinację, jak zrobiła PO (przykład:
T1 S1 D1 = S1 T1 D1), chociaż kosztuje to dodatkowe 7 znaków. Zawsze najpierw wypisuję wyższy wynik (ignorując podwojenie i potrzaskiwanie), ponieważ uważam, że jest to bardziej odpowiednie dla gracza (który może zmienić swoją strategię, jeśli spudłuje z pierwszą rzutką.) Z tego samego powodu wymieniam rzutki w kolejności zgodnie z druga strzałka. Uważam, że trzecia strzałka jest całkowicie odmienna od pozostałych dwóch, dlatego uważam D1 D2 i D2 D1 za różne przypadki, podczas gdy PO ma je wymienione jako takie same.
Dzięki temu systemowi liczenia otrzymuję 42336 całkowitych możliwości , takich samych jak mmumboss. Licząc różne pierwsze i drugie strzałki jako różne kombinacje, liczba ta wzrasta do 83349.
Nie użyłem pętli for z zestawami, jak zrobili to inni (jestem całkiem nowy w C ++ i nawet nie wiem, czy to możliwe). Zamiast tego nadużywam warunku przyrostu pętli, aby skakać z 20 do 25 Używam zmiennej z pojedynczej pętli, aby zakodować wszystkie możliwe wyniki dla pojedynczej strzałki, takie jak: S1 D1 T1 S2 D2 T2 itd. Z modułem i podziałem do dekodowania. Pozwala to zaoszczędzić na szczegółowości deklarowania większej liczby pętli, chociaż komplikuje to wyrażenia.
Wynikiem tego jest to, że nieużywana strzałka jest wyświetlana jako T0, ale myślę, że jasne jest, co to znaczy, zwłaszcza że (biorąc pod uwagę różne pierwszą i drugą strzałkę jako tę samą kombinację) byłem w stanie zgrupować je wszystkie na początku mojej produkcji.
Wersja bez golfa tutaj. Kilka innych funkcji polega na selektywnym korzystaniu z operatorów & i && z | w taki sposób, aby nadać porządek pierwszeństwa bez nawiasów.
źródło
MATLAB (
299249241 znaków)To moja pierwsza poważna gra w golfa. Moja pierwsza próba (136 znaków) daje poprawny wynik, ale nie z poprawnym formatowaniem. Daje wszystkie możliwości, patrząc na liczbę punktów dla każdej strzałki. Oznacza to, że pojedyncze 20 i podwójne 10 mają osobne wpisy, jednak oba są wyświetlane jako 20. Oczywiście ostatnia rzutka jest zawsze podwójna.
W drugiej próbie poprawiono formatowanie, co oczywiście zwiększyło liczbę znaków:
Poprawiono z 299 do 249 znaków, jednocześnie poprawiając formatowanie wyjściowe. W tej ulepszonej wersji dane wyjściowe dla przykładowych przypadków to:
f (170):
f (6):
f (169):
Dodatkowy:
Według moich umiejętności obliczeniowych istnieje 42336 możliwości zakończenia gry w rzutki.
źródło
60 60 50
powinno byćT20 T20 Bullseye
. Wyjaśnię to bardziej w pytaniu. Fajnie się dzieje, prawie tam :)Rubin (260 znaków)
„Ten ostatni powinien być podwójny” to brakujący element - nie mogłem zrozumieć, dlaczego 168 nie powinno mieć wyników ...:
c. (170)
c. (6)
źródło
Python 2.7 (270 znaków)
Nie jestem pewien, czy python zezwoli na jedną linijkę, ale on ma trzy.
Lub 278+ znaków z odpowiednim komunikatem „No Checkout” (np. 290 tutaj):
No to ruszamy:
f (170)
f (6)
f (169)
Rzeczy, z których nie jestem zadowolony:
To ponad 10% całości. Czy istnieje bardziej kompaktowy sposób bez narzędzi itert itp?
Służy to do zapobiegania duplikatom w przypadku wykończenia dwoma rzutkami (np. [”,„ S1 ”,„ D1 ”] i [„ S1 ”,„ ”,„ D1 ”]). Uważam, że kolejność ma znaczenie (hej - ostatnia strzałka musi być podwójna, więc jasne jest, że kolejność ma znaczenie), ale rzut nie jest specjalnym przypadkiem.
źródło
05AB1E , 43 bajty
Dość powolny. Wyjście jako lista list lub pusta lista, jeśli nie jest możliwe zakończenie. Moje byki to
S25
iD25
; jeśli nie jest to dozwolone, mogę to zmienić.Wypróbuj online lub zweryfikuj kilka przypadków testowych jednocześnie .
Wyjaśnienie:
Istnieje kilka kroków:
1) Utwórz listę wszystkich możliwych pojedynczych, podwójnych i potrójnych rzutek:
2) Zdobądź wszystkie możliwe finiszery (kończące się podwójnym) maksymalnie 3 rzutkami:
3) Zachowaj tylko te, dla których całkowity wynik jest równy całkowitej liczbie wejściowej:
4) Konwertuj dane na ładnie wydrukowaną listę wyników (tzn.
[[20,3],[5,1],[1,2]]
Stanie się["T20","S5","D2"]
):źródło
Kotlin , 254 bajty
Uwaga: algorytm oparty jest na odpowiedzi C ++ na poziomie River St.
Wypróbuj online!
źródło