``````# From L and S input by the user as two relatively prime numbers,
# generates a linked list of length L, and reorders the list by
# starting with the Sth element (numbering elements of the list from 1),
# at each step jumping over S-1 elements, and looping around when needed.
# Eventually the original will have a new head and consist
# of the same nodes, but linked differently.

import sys
from random import seed, randrange

def gcd(a, b):
if b == 0:
return a
return gcd(b, a % b)

def collect_references(L, length):
references = set()
for i in range(length):
node = node.next_node
return references

provided_input = input('Enter 3 integers: ')
try:
provided_input = [int(arg) for arg in provided_input.split()]
except ValueError:
print('Incorrect input (not all integers), giving up.')
sys.exit()

if len(provided_input) != 3:
print('Incorrect input (not 3 arguments), giving up.')
sys.exit()
for_seed, length, step = provided_input
if length <= 0 or step <= 0:
print('Incorrect input (2nd or 3rd integers not strictly positive, '
'giving up.')
sys.exit()
if gcd(length, step) != 1:
print('List length and step should be relatively prime, giving up.')
sys.exit()
seed(for_seed)

L =  * length
for i in range(length):
L[i] = randrange(100)

LL.print()
references = collect_references(LL, length)
LL.rearrange(step)
if collect_references(LL, length) != references:
print('You cheated!')
sys.exit()
else:
LL.print()

``````

Resource created Thursday 17 September 2015, 12:13:50 AM, last modified Saturday 19 September 2015, 09:37:42 AM.

file: quiz_7.py