Każdy zawsze chce wdrożyć grę życia Conwaya. To jest nudne! Zamiast tego zróbmy gliniarzy i złodziei!
Będziesz miał dwie drużyny: gliny i złodziei. Każda drużyna ma 5 członków o 50 zdrowiu. Program będzie się powtarzał w sposób ciągły. Po każdej iteracji wystąpią:
Dla każdej drużyny wydrukuj pierwszą literę (
Cdla gliniarzy,Rdla złodziei), spację, rozdzieloną spacjami listę HP członków i nową linię. To jest status zespołów. Po zakończeniu obu wydrukuj kolejny nowy wiersz. Na przykład, oto jak może to wyglądać w pierwszej rundzie:C 50 50 50 50 50 R 50 50 50 50 50Wybierz losową liczbę od 1 do 10 (w tym zarówno 1, jak i 10). Zadzwonimy pod ten numer
N. JeśliNjest parzysty, złodzieje przegrywają tę rundę; jeśli dziwne, gliny przegrywają.Wybierz losowego członka przegranej drużyny, którego HP jest większe niż 0 i odejmij
NHP. Punkty życia członków nigdy nie powinny pojawiać się poniżej statusu 0.Uruchom ponownie pętlę.
Gra kończy się, gdy wszyscy członkowie jednej drużyny stracą całe swoje HP. Następnie, jeśli policjanci wygrają, zostaną wydrukowane następujące informacje:
C+
R-
a jeśli złodzieje wygrają:
R+
C-
To jest golf golfowy, więc wygrywa najmniejsza liczba znaków.
Oto przykładowa implementacja w Python 2:
import random
cops = [50]*5
robbers = [50]*5
while any(cops) and any(robbers):
# print the status
print 'C', ' '.join(map(str, cops))
print 'R', ' '.join(map(str, robbers))
print
# pick N
N = random.randint(1, 10)
# pick the losing team (robbers if N is even, else cops)
losers = robbers if N % 2 == 0 else cops
# pick a member whose HP is greater than 0
losing_member = random.choice([i for i in range(len(losers)) if losers[i]])
losers[losing_member] -= N
# make sure the HP doesn't visibly drop below 0
if losers[losing_member] < 0: losers[losing_member] = 0
if any(cops):
# robbers lost
print 'C+'
print 'R-'
elif any(robbers):
# cops lost
print 'C-'
print 'R+'
cops-and-robbers!
game-of-life.