Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/python3
- import os
- import sys
- import math
- import random
- import time
- def check(n):
- count=0
- while True:
- count+=1
- if n%2==0:
- n=n/2
- else:
- n=(n*3)+1
- if n == 1:
- break
- return count
- def get_d(x_val,k_val):
- safe=False
- if x_val%2==0:
- safe=True
- if safe==True:
- #print("safe==true")
- if k_val == 2:
- return 0
- elif k_val == 1:
- return 0
- else:
- d=0
- c=2
- for i in range(0, k_val-2):
- d+=c
- c=((c*2)*2)
- return d
- else:
- #print("safe==false")
- if k_val == 2:
- return 0
- elif k_val == 1:
- return 0
- elif k_val == 3:
- return 1
- else:
- d=1
- c=4
- for i in range(0, k_val-3):
- d+=c
- c=(c*2)*2
- return d
- def get_nth(x_val, k_val):
- v=int(pow(2, x_val))
- if k_val == 1:
- return v
- d=get_d(x_val,k_val)
- v = math.floor(((v-2)/2)/3)
- v = v - d
- return v
- def get_k(x_val):
- return math.ceil(x_val/2)-1
- def run():
- x_value=int(input("Enter sequence termination length (e.g: 5):: "))
- k=get_k(x_value)
- k_value=int(input("Enter nth number from 1 - "+str(k)+":: "))
- if k_value < 1 or k_value > k:
- return False
- n=get_nth(x_value, k_value)
- check_n=check(n)
- print("Termination Length: "+str(x_value))
- print("k-nth-set-size: "+str(k))
- #print("kv: "+str(k_value))
- print("k-nth("+str(k_value)+") == "+str(n))
- if check_n == x_value:
- print("Termination get_nth("+str(x_value)+", "+str(k_value)+") == check_n("+str(n)+") == "+str(check_n))
- print("PASSED TEST")
- else:
- print("FAILED TEST")
- return True
- def start():
- ran=run()
- if ran==False:
- start()
- start()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement