Кожен завжди хоче реалізувати «Гра життя» Конвей. Це нудно! Давайте замість цього робимо копів та грабіжників!
У вас буде дві команди: поліцейські та грабіжники. Кожна команда має 5 членів з 50 здоров'ям у кожному. Програма буде циклічно постійно. Кожна ітерація відбуватиметься наступним чином:
Для кожної команди надрукуйте перший лист (
C
для поліцейських,R
для грабіжників), пробіл, розділений пробілом список членів HP та новий рядок. Це статус команд. Після того як обидва зроблені, надрукуйте ще один новий рядок. Наприклад, ось як це може виглядати перший тур:C 50 50 50 50 50 R 50 50 50 50 50
Виберіть випадкове число від 1 до 10 (включаючи як 1, так і 10). Ми зателефонуємо на номер
N
. ЯкщоN
це рівно, грабіжники програють цей раунд; якщо дивно, поліцейські програють.Виберіть випадкового члена команди, яка програла, чий HP більший за 0, і відрахуйте
N
HP. HP членів ніколи не повинен з’являтися нижче 0 за статусом.Перезапустіть цикл.
Гра закінчується, коли всі члени однієї команди втрачають весь свій HP. Потім, якщо поліцейські переможуть, буде надруковано наступне:
C+
R-
і якщо розбійники переможуть:
R+
C-
Це кодовий гольф, тому виграє найменша кількість символів.
Ось приклад реалізації в 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
.