aboutsummaryrefslogtreecommitdiff
path: root/challenge-048/user-person/python/ch-1.py
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-048/user-person/python/ch-1.py')
-rwxr-xr-xchallenge-048/user-person/python/ch-1.py59
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