Skip to content

Instantly share code, notes, and snippets.

@cashlo
Created August 6, 2025 14:11
Show Gist options
  • Select an option

  • Save cashlo/d63afd8949c947597c142c6d2dbad783 to your computer and use it in GitHub Desktop.

Select an option

Save cashlo/d63afd8949c947597c142c6d2dbad783 to your computer and use it in GitHub Desktop.
from collections import defaultdict, Counter
import csv
def loadnums(filename):
nums = []
with open(filename) as csvfile:
reader = csv.reader(csvfile, delimiter=':')
for r in reader:
nums.extend([int(i) for i in r])
return nums
def ave(nums, i):
sum = nums[i-3] + nums[i-2] + nums[i-1] + nums[i] + nums[i+1] + nums[i+2] + nums[i+3]
return sum/7
def q1():
nums = loadnums("infections.txt")
ave_list = [ave(nums, i) for i in range(3, len(nums)-3)]
print( max(ave_list) )
print( min(ave_list) )
print( sum(ave_list) )
def s(x, y):
mindiff = float("inf")
if len(y) > len(x):
tmp = y
y = x
x = tmp
for i in range(0, len(x) - len(y) + 1):
sum = 0
for k in range(0, len(y)):
sum += (x[k+i] - y[k])**2
#print(f"sum {sum}")
mindiff = min(sum, mindiff)
return -mindiff
def q2():
from os import listdir
from os.path import isfile, join
onlyfiles = [f for f in listdir("data") if isfile(join("data", f))]
print(onlyfiles)
scores = []
for i in range(0, len(onlyfiles)-1):
for j in range(i+1, len(onlyfiles)):
numsx = loadnums(join("data", onlyfiles[i]))
numsy = loadnums(join("data", onlyfiles[j]))
sscore = s(numsx, numsy)
scores.append( (sscore, onlyfiles[i], onlyfiles[j]) )
scores.sort(reverse=True)
print(scores)
def find_ak(nums):
n = len(nums)
sum_x = sum(nums)
sum_i = sum(i for i in range(len(nums)))
sum_ix = sum(i*nums[i] for i in range(len(nums)))
sum_i2 = sum(i**2 for i in range(len(nums)))
a = (n*sum_ix - sum_i*sum_x) / (n*sum_i2-sum_i**2)
k = (sum_i2*sum_x - sum_ix*sum_i) / (n*sum_i2-sum_i**2)
return (a, k)
def q3():
nums = loadnums("infections2.txt")
n = len(nums)
sum_x = sum(nums)
sum_i = sum(i for i in range(len(nums)))
sum_ix = sum(i*nums[i] for i in range(len(nums)))
sum_i2 = sum(i**2 for i in range(len(nums)))
a = (n*sum_ix - sum_i*sum_x) / (n*sum_i2-sum_i**2)
k = (sum_i2*sum_x - sum_ix*sum_i) / (n*sum_i2-sum_i**2)
print(a, k)
import math
def q4():
nums = loadnums("infections2.txt")
logx = [math.log(x+1) for x in nums]
maxa = float("-inf")
for s in range(0, len(nums)-30):
a, k = find_ak(logx[s:s+30])
if a >= maxa:
maxa = a
print(a ,k, math.e**a, math.e**k, s)
q1()
q2()
q3()
q4()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment