diff options
Diffstat (limited to 'challenge-048/user-person/python/ch-1.py')
| -rwxr-xr-x | challenge-048/user-person/python/ch-1.py | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/challenge-048/user-person/python/ch-1.py b/challenge-048/user-person/python/ch-1.py new file mode 100755 index 0000000000..47285428ff --- /dev/null +++ b/challenge-048/user-person/python/ch-1.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python + +########################################################################### +# script name: ch-1.py # +# # +# https://perlweeklychallenge.org/blog/perl-weekly-challenge-048/ # +# # +# Survivor # +# There are 50 people standing in a circle in position 1 to 50. # +# The person standing at position 1 has a sword. He kills the next person # +# i.e. standing at position 2 and pass on the sword to the immediate next # +# i.e. person standing at position 3. Now the person at position 3 does # +# the same and it goes on until only one survives. # +# # +# Write a script to find out the survivor. # +# # +########################################################################### + +from optparse import OptionParser + +parser = OptionParser() + +parser.add_option("-v","--verbose",action="store_true", dest="verbose") +(options, args) = parser.parse_args() + +circle = list(range(1,51)) + +i = 1 + +while len(circle) > 1: + + if options.verbose: + print ("i : ",i) + + victim = circle.pop(i) + + if options.verbose: + print(circle[i-1], " killed ", victim) + print(*circle, sep =" ") + print() + + # When the end of the array is reached, + # roll back the index to go back around the circle for another iteration. + # In odd cases the next victim will be 0. In even cases it will be 1. + # These have to be adjusted due to the for loop's incrementing -1 for odd, 0 for even. + + if (len(circle)-1) - i == 0: + i = -1 + + elif (len(circle)-1) - i == -1 : + i = 0 + + i += 1 + +print(*circle, " survives") + +# output: +# +# 37 survives |
