모든 사람은 항상 Conway의 게임 게임을 구현하기를 원합니다. 그건 지루해! 대신 경찰과 강도를하자!
경찰과 강도라는 두 팀이 있습니다. 각 팀에는 50 명의 건강을 가진 5 명의 멤버가 있습니다. 프로그램이 계속 반복됩니다. 반복 할 때마다 다음이 발생합니다.
각 팀마다 첫 번째 문자 (
C경찰,R강도), 공백, 공백으로 구분 된 회원 HP 목록 및 줄 바꿈을 인쇄하십시오. 이것이 팀의 상태입니다. 둘 다 완료되면 다른 줄 바꿈을 인쇄하십시오. 예를 들어 다음은 첫 번째 라운드처럼 보일 수 있습니다.C 50 50 50 50 50 R 50 50 50 50 501에서 10 사이의 난수를 선택하십시오 (1과 10 모두 포함). 우리는 번호를 호출합니다
N. 경우N짝수의 강도는이 라운드를 잃게; 홀수이면 경찰이 패배합니다.HP가 0보다 큰 패배 팀의 무작위 멤버를 선택하고 HP를 공제하십시오
N. 회원의 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.