Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
16
Task/Hofstadter-Q-sequence/Python/hofstadter-q-sequence-1.py
Normal file
16
Task/Hofstadter-Q-sequence/Python/hofstadter-q-sequence-1.py
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
def q(n):
|
||||
if n < 1 or type(n) != int: raise ValueError("n must be an int >= 1")
|
||||
try:
|
||||
return q.seq[n]
|
||||
except IndexError:
|
||||
ans = q(n - q(n - 1)) + q(n - q(n - 2))
|
||||
q.seq.append(ans)
|
||||
return ans
|
||||
q.seq = [None, 1, 1]
|
||||
|
||||
if __name__ == '__main__':
|
||||
first10 = [q(i) for i in range(1,11)]
|
||||
assert first10 == [1, 1, 2, 3, 3, 4, 5, 5, 6, 6], "Q() value error(s)"
|
||||
print("Q(n) for n = [1..10] is:", ', '.join(str(i) for i in first10))
|
||||
assert q(1000) == 502, "Q(1000) value error"
|
||||
print("Q(1000) =", q(1000))
|
||||
19
Task/Hofstadter-Q-sequence/Python/hofstadter-q-sequence-2.py
Normal file
19
Task/Hofstadter-Q-sequence/Python/hofstadter-q-sequence-2.py
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
from sys import getrecursionlimit
|
||||
|
||||
def q1(n):
|
||||
if n < 1 or type(n) != int: raise ValueError("n must be an int >= 1")
|
||||
try:
|
||||
return q.seq[n]
|
||||
except IndexError:
|
||||
len_q, rlimit = len(q.seq), getrecursionlimit()
|
||||
if (n - len_q) > (rlimit // 5):
|
||||
for i in range(len_q, n, rlimit // 5):
|
||||
q(i)
|
||||
ans = q(n - q(n - 1)) + q(n - q(n - 2))
|
||||
q.seq.append(ans)
|
||||
return ans
|
||||
|
||||
if __name__ == '__main__':
|
||||
tmp = q1(100000)
|
||||
print("Q(i+1) < Q(i) for i [1..100000] is true %i times." %
|
||||
sum(k1 < k0 for k0, k1 in zip(q.seq[1:], q.seq[2:])))
|
||||
13
Task/Hofstadter-Q-sequence/Python/hofstadter-q-sequence-3.py
Normal file
13
Task/Hofstadter-Q-sequence/Python/hofstadter-q-sequence-3.py
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
def q(n):
|
||||
l = len(q.seq)
|
||||
while l <= n:
|
||||
q.seq.append(q.seq[l - q.seq[l - 1]] + q.seq[l - q.seq[l - 2]])
|
||||
l += 1
|
||||
return q.seq[n]
|
||||
q.seq = [None, 1, 1]
|
||||
|
||||
print("Q(n) for n = [1..10] is:", [q(i) for i in range(1, 11)])
|
||||
print("Q(1000) =", q(1000))
|
||||
q(100000)
|
||||
print("Q(i+1) < Q(i) for i [1..100000] is true %i times." %
|
||||
sum([q.seq[i] > q.seq[i + 1] for i in range(1, 100000)]))
|
||||
Loading…
Add table
Add a link
Reference in a new issue