Dice Cricket to gra, do której zostałem wprowadzony jako dziecko i od tamtej pory wykorzystałem ją jako sposób na spędzenie czasu. Nie mogłem znaleźć strony w Wikipedii, więc wyjaśnię poniższe zasady.
Zasady gry w krykieta kości
Przesłanka
Dice Cricket to gra podobna do oceniania gry w krykieta podczas oglądania, ale zamiast oglądać i rejestrować wynik, rzucasz kością i rejestrujesz wynik.
Wyniki są zapisywane w tabeli, jak pokazano na dole.
Pokaz
Dice Cricket używa specjalnego wyświetlacza, aby pokazać wszystkie informacje.
Tabela ma 11 rzędów. Każdy rząd przedstawia ciasto. Układ wiersza wyjaśniono poniżej.
+------+------------------------------+---------+-----+
| Name | Runs | How Out |Score|
+------+------------------------------+---------+-----+
- Nazwa: nazwa musi być ciągiem złożonym w całości z liter, wielkich lub małych liter
- Uruchamia: Pałkarz może zmierzyć się z 30 piłkami. Każda piłka może być jedną z nich
1 2 4 6 . /
. Zostanie to wyjaśnione bardziej szczegółowo poniżej - How Out: Sposób, w jaki ciasto się wydostało. Może być dowolny
Bowled, LBW (Leg Before Wicket), Caught, Retired or Not Out
- Wynik: suma wszystkich liczb w
Runs
Jak działa gra
W grze na boisku są zawsze 2 pałkarze. Pierwszy gracz jest domyślnie aktualnym pałkarzem, a drugi w cieście „wyłączonym”.
Gra składa się z „piłek”: każda piłka w meczu krykieta jest reprezentowana przez rzut kostką. Każdy rzut wykonuje inne polecenie:
- 1,2,4 i 6 sprawiają, że pałkarz tyle punktów. Jeśli wyrzuci się 1, obecny pałkarz staje się pałką „wyłączoną”, a pałkarz „wyłączony” staje się prądem
- 3 to „kropka”, co oznacza, że nic się nie dzieje. Jest reprezentowany w
Runs
sekcji jako a,.
a wyniki 0. A0
nie może być użyte do jego przedstawienia. - 5 to furtka. Jeśli wyrzuci się 5, bieżący pałkarz zostaje „wyrzucony”, co oznacza, że a
/
dodaje się do serii i od tego momentu pałkarz nie może już zdobywać punktów. Pałkarz jest następnie zamieniany na następnego pałkarza, który nie uderzył. TaHow Out
sekcja to losowy wybór możliwych sposobów na wydostanie się:Bowled, LBW, Caught
Przykład furtki (jest to tylko dla jasności, nie jest to sposób, w jaki jest generowany)
player a is on 4,6,2,6,4
player b is on 6,4,2,6,6
player c hasn't batted
player a is current batter
WICKET!!!
player a is on 4,6,2,6,4,/
player b in on 6,4,2,6,6
player c is on NOTHING
player c is current batter
Co 6 piłek dwa pałki się zmieniają; obecny pałkarz staje się pałką „wyłączoną”, a pałkarz „wyłączony” staje się pałką bieżącą
Jeśli Runs
sekcja jest wypełniona (30 kulek), ciasto jest wyjęte, a How Out
sekcja jest ustawiona na Retired
. /
Nie jest umieszczony na końcu Runs
pudełka.
Rzeczywiste wyzwanie (tak, to były zasady gry)
Wyzwanie polega na wygenerowaniu kompletnej tabeli (takiej jak na końcu) z podaniem listy nazwisk. Zawartość danych wyjściowych powinna zawierać tylko tabelę i / lub początkowe lub końcowe białe znaki.
Zasady
- Standardowe luki są niedozwolone
- Wszystkich 11 graczy powinno mieć coś w
Runs
sekcji. - Może być tylko 1 gracz
Not Out
. Każdy inny gracz na emeryturze nie powinien mieć wyboru[Bowled, LBW, Caught]
- Nazwy mogą mieć dowolną długość od 1 do 6, która pasuje do wyrażenia regularnego
A-Za-z
- Ostatnia linia w tabeli powinna być linią całkowitą (patrz przykład)
- Nie musisz wyrównywać tekstu w tabeli w żaden sposób, ale separatory wierszy i kolumn muszą być wyrównane.
Przykład
Input:
['Fred', 'Sonya', 'David', 'Ben', 'Cody', 'Hazel', 'Nina', 'Kim', 'Cath', 'Lena', 'Will']
Output:
+------+------------------------------+---------+-----+
| Name | Runs | How Out |Total|
+------+------------------------------+---------+-----+
|Fred |.662/ | Caught | 14 |
+------+------------------------------+---------+-----+
|Sonya |1164/ | Caught | 12 |
+------+------------------------------+---------+-----+
|David |/ | LBW | 0 |
+------+------------------------------+---------+-----+
|Ben |424/ | LBW | 10 |
+------+------------------------------+---------+-----+
|Cody |62/ | Bowled | 8 |
+------+------------------------------+---------+-----+
|Hazel |/ | LBW | 0 |
+------+------------------------------+---------+-----+
|Nina |161.6226166..44261442/ | Caught | 64 |
+------+------------------------------+---------+-----+
|Kim |11/ | Caught | 2 |
+------+------------------------------+---------+-----+
|Cath |6.21/ | LBW | 9 |
+------+------------------------------+---------+-----+
|Lena |/ | Bowled | 0 |
+------+------------------------------+---------+-----+
|Will |2 | Not Out | 2 |
+------+------------------------------+---------+-----+
| Total Runs | 121 |
+-----------------------------------------------+-----+
Odpowiedzi:
Python 3 ,
650621582572588 bajtówWypróbuj online!
Cóż, minęło ponad 24 godziny i zajęło mi to około godziny, więc mam nadzieję, że nie jestem nikim FGITW i nie grałem w Pythona od dłuższego czasu, więc było fajnie (chociaż to jest za drugim razem odpowiedziałem na jedno z moich pytań długą odpowiedzią w języku Python)
Wyślij sugestie dotyczące golfa, Python nie jest moim najlepszym językiem do gry w golfa.
-68 bajtów dzięki FlipTack !
-8 bajtów dzięki Mr. Xcoder
+16 bajtów z powodu błędu
źródło
print
zamiastP
. 2)sum
może bezpośrednio wziąćmap
obiekt, bez potrzeby konwertowania go na listę. 3) Zamiast pisaćyield x
dwa razy, dlaczego nie,yield x
a potem przerwać, jeśli to konieczne? 4)T=0
może być umieszczony w nagłówku funkcji. 5) W swojej ostatniej funkcji użyłeś kilku nowych linii, w których możesz po prostu użyć jednej linii ze średnikami, na przykład pierwsze trzy instrukcje, ostatnie trzy instrukcje i instrukcje w pętli for.s
znacznie golfa ...def s(i=30):
a potemwhile i:x=choice('12.4/6');yield x;i=('/'!=x)*~-i
. Dzwonisz tylkoo()
raz, więc nie musisz nawet go deklarować, wystarczy użyć instrukcji bezpośrednio.b
^^Węgiel drzewny ,
277255 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Wczytaj 11 nazw (dane wejściowe są elastyczne: JSON, spacja lub separacja nowego wiersza) i utwórz tablicę
q
11 bitew reprezentowanych przez ich kule (jako tablicę), status (jako liczbę całkowitą) i nazwę.Utwórz odwróconą kopię bitew
h
. To reprezentuje pałkarzy, którzy nie zostali wyeliminowani. Ostatnie dwa elementy to wyłączeni i obecni pałkarze.Powtarzaj, dopóki dostępne są co najmniej dwa pałki.
Wyodrębnij bieżące ciasto do
i
.Wygeneruj losową piłkę
z
.Dodaj go do ogólnej listy piłek, używając wstępnie zdefiniowanej pustej listy
u
.Dodaj go do kulek aktualnego pałkarza.
Jeśli piłka jest a
/
, wygeneruj losowy status2..4
, w przeciwnym razie, jeśli jest to 30 piłka pałkarza, ustaw status na1
inny0
.Jeśli pałkarz jest na zewnątrz, zapisz status pałkarza, w przeciwnym razie ponownie włóż pałkarz do pałki.
Jeśli pozostały co najmniej dwa pałkarze, a ciasto zostało wyrzucone, lub zagrano 6 piłek, wtedy ...
... zdejmij aktualnych pałkarzy i ułóż je w odwrotnej kolejności.
Wydrukuj nagłówek.
Pętla nad pałkarzami.
Wydrukuj nazwę pałkarza.
Wydrukuj kule ciasta.
Wydrukuj status pałkarza, indeksując w łańcuch
Not OutRetiredBowled Caught LBW
podzielony na podciągi o długości 7.Wydrukuj wynik pałkarza.
Przejdź na początek następnego wiersza, ale jeden.
Wydrukuj sumę.
Narysuj pola wokół wszystkiego.
źródło