# HG changeset patch # User Madhusudan.C.S # Date 1255008587 -19800 # Node ID 333092b6892650b7f5376b8234cc28f4ef8c9658 # Parent f5eac04a00feca38817f32b9f8a415a310fcfd4d Added quiz tex file and all exercise problems Madhu worked out. diff -r f5eac04a00fe -r 333092b68926 day1/exercise/aliquot.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/exercise/aliquot.py Thu Oct 08 18:59:47 2009 +0530 @@ -0,0 +1,8 @@ +def aliquot(n): + sum = 0 + for i in range(1, (n/2)+1): + if n % i == 0: + sum += i + return sum + +print aliquot(14) diff -r f5eac04a00fe -r 333092b68926 day1/exercise/amicable.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/exercise/amicable.py Thu Oct 08 18:59:47 2009 +0530 @@ -0,0 +1,18 @@ +import math + +def aliquot(n): + sum = 0 + for i in range(1, int(math.sqrt(n))+1): + if n % i == 0: + sum += i + n/i + return sum + +amicable = [] +for n in range(10000, 100000): + m = aliquot(n) + if aliquot(m) == n: + amicable.append((m, n)) + +print amicable + +# please please please profile this. diff -r f5eac04a00fe -r 333092b68926 day1/exercise/amicable_debug.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/exercise/amicable_debug.py Thu Oct 08 18:59:47 2009 +0530 @@ -0,0 +1,18 @@ +import math + +def aliquot(n): + sum = 0 + for i in range(1, math.sqrt(n)+1): + if n % i == 0: + sum += i + n/i + return sum + +amicable = [] +for n in range(10000, 100000): + m = aliquot(n) + if aliquot(m) == n: + amicable.append((m, n)) + +print amicable + +# please please please profile this. diff -r f5eac04a00fe -r 333092b68926 day1/exercise/arm.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/exercise/arm.py Thu Oct 08 18:59:47 2009 +0530 @@ -0,0 +1,10 @@ +cubes = [] +for i in range(10): + cubes.append(i ** 3) + +for i in range(100, 1000): + a = i % 10 + b = (i / 10) % 10 + c = (i / 100) % 10 + if i == cubes[a] + cubes[b] + cubes[c]: + print "Armstrong Number: ", i diff -r f5eac04a00fe -r 333092b68926 day1/exercise/bishop.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/exercise/bishop.py Thu Oct 08 18:59:47 2009 +0530 @@ -0,0 +1,7 @@ +r, c = 5, 4 +for i in range(1, 9): + for j in range(1, 9): + a = r - i + b = c - j + if a and b and a == b or a == -b: + print i, j diff -r f5eac04a00fe -r 333092b68926 day1/exercise/collatz.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/exercise/collatz.py Thu Oct 08 18:59:47 2009 +0530 @@ -0,0 +1,7 @@ +a = -1 +while a > 1: + print a + if a % 2: + a = a * 3 + 1 + else: + a /= 2 diff -r f5eac04a00fe -r 333092b68926 day1/exercise/datestring.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/exercise/datestring.py Thu Oct 08 18:59:47 2009 +0530 @@ -0,0 +1,23 @@ +def get_date_from_str(date_str): + month2mm = { + 'January': 1, + 'February': 2, + 'March': 3, + 'April': 4, + 'May': 5, + 'June': 6, + 'July': 7, + 'August': 8, + 'September': 9, + 'October': 10, + 'November': 11, + 'December': 12, + } + + dd, month, yyyy = date_str.split() + + mm = month2mm[month] + return int(yyyy), int(dd.strip(',')), mm + +date_str = raw_input('Enter a date string? ') +print get_date_from_str(date_str) diff -r f5eac04a00fe -r 333092b68926 day1/exercise/duplicate_marks.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/exercise/duplicate_marks.py Thu Oct 08 18:59:47 2009 +0530 @@ -0,0 +1,13 @@ +students = { + 'Madhu': 12, + 'Shantanu':45, + 'Puneeth': 54, + 'Vattam': 35, + 'KD': 50, + } + +all_marks = students.values() +unique_marks = set(all_marks) + +print "Number of Duplicate marks: ", len(all_marks) - len(unique_marks) +print "Duplicate marks: ", set(all_marks - list(unique_marks)) diff -r f5eac04a00fe -r 333092b68926 day1/exercise/even_perfect_4.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/exercise/even_perfect_4.py Thu Oct 08 18:59:47 2009 +0530 @@ -0,0 +1,17 @@ +def is_perfect_square(n): + i = 1 + while i * i < n: + i += 1 + return i * i == n + +def all_digits_even(n): + if n < 0: n = -n + while n > 0: + if n % 2 == 1: + return False + n /= 10 + return True + +for i in range(2222, 8888): + if all_digits_even(i) and is_perfect_square(i): + print i diff -r f5eac04a00fe -r 333092b68926 day1/exercise/find_pow_2.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/exercise/find_pow_2.py Thu Oct 08 18:59:47 2009 +0530 @@ -0,0 +1,29 @@ +def is_pow_2(n): + bin_count = 0 + while n > 0: + if n % 2 == 1: + bin_count += 1 + if bin_count > 1: + return False + n /= 2 + + return bin_count == 1 + +def collatz_pow_2(n): + if n == 1: return 4 + if n == 2: return 4 + collatz_pow_2 = [] + while n > 2: + print n, + if is_pow_2(n): + collatz_pow_2.append(n) + + if n % 2: + n = n * 3 - 1 + else: + n /= 2 + + return max(collatz_pow_2) + +import sys +collatz_pow_2(int(sys.argv[1])) diff -r f5eac04a00fe -r 333092b68926 day1/exercise/funcs2.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/exercise/funcs2.py Thu Oct 08 18:59:47 2009 +0530 @@ -0,0 +1,28 @@ +import math + +def linspace(a, b, N): + lns = [] + step = (float(b) - float(a)) / float(N - 1) + print step + for i in range(N): + lns.append(a + i*step) + + return lns + +def sin_func(): + x = linspace(0, 5, 11) + sin_list = [] + for i in x: + sin_list.append(math.sin(i)) + + print sin_list + +def sinsin_func(): + x = linspace(0, 5, 11) + sin_list = [] + for i in x: + sin_list.append(math.sin(i) + math.sin(10*i)) + + print sin_list + +sinsin_func() diff -r f5eac04a00fe -r 333092b68926 day1/exercise/gcd.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/exercise/gcd.py Thu Oct 08 18:59:47 2009 +0530 @@ -0,0 +1,8 @@ +def gcd(a, b): + if a % b == 0: + return b + return gcd(b, a%b) + +print gcd(5, 40) +print gcd(11, 60) + diff -r f5eac04a00fe -r 333092b68926 day1/exercise/gcd_another.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/exercise/gcd_another.py Thu Oct 08 18:59:47 2009 +0530 @@ -0,0 +1,13 @@ +def gcd(a, b): + if a - b == 0: + return b + if a > b: + return gcd(b, a-b) + else: + return gcd(b, b-a) + +def lcm(a, b): + return (a * b) / gcd(a, b) + +print lcm(21, 14) + diff -r f5eac04a00fe -r 333092b68926 day1/exercise/kwfreq.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/exercise/kwfreq.py Thu Oct 08 18:59:47 2009 +0530 @@ -0,0 +1,14 @@ +import keyword +f = open('/home/madhu/pyprogs/pytriads.py') + +freq = {} +for line in f: + words = line.split() + for word in words: + key = word.strip(',.!;?()[]: ') + if keyword.iskeyword(key): + value = freq.get(key, 1) + freq[key] = value + 1 + +print freq + diff -r f5eac04a00fe -r 333092b68926 day1/exercise/linspace.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/exercise/linspace.py Thu Oct 08 18:59:47 2009 +0530 @@ -0,0 +1,10 @@ +def linspace(a, b, N): + lns = [] + step = (float(b) - float(a)) / float(N - 1) + print step + for i in range(N): + lns.append(a + i*step) + + return lns + +print linspace(0, 5, 11) diff -r f5eac04a00fe -r 333092b68926 day1/exercise/markstats.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/exercise/markstats.py Thu Oct 08 18:59:47 2009 +0530 @@ -0,0 +1,22 @@ +import math + +f = open('/home/madhu/Desktop/marks.dat') + +subj_marks = [[]] * 5 +names = [] +for line in f: + fields = line.split(';') + names.append(fields[2]) + for i in range(5): + subj_marks[i].append(int(fields[i+3])) + +for i in range(5): + avg_marks = float(sum(subj_marks[i])) / len(subj_marks[i]) + student = names[subj_marks[i].index(max(subj_marks[i]))] + sigma = 0 + for j in subj_marks[i]: + sigma += (j - avg_marks) ** 2 + + std_dev = math.sqrt(sigma) + print "Average marks for subject: %f is Standard Deviation is %f, Student with Highest Marks is %s" % (avg_marks, std_dev, student) + diff -r f5eac04a00fe -r 333092b68926 day1/exercise/missing_num.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/exercise/missing_num.py Thu Oct 08 18:59:47 2009 +0530 @@ -0,0 +1,16 @@ +str_range = '4-7, 9, 12, 15' + +ranges = str_range.split(',') + +lst = [] +for r in ranges: + vals = r.split('-') + if len(vals) == 2: + lst.extend(range(int(vals[0]), int(vals[1]) + 1)) + else: + lst.append(int(vals[0])) + +set_range = set(lst) +all_elems = set(range(min(lst), max(lst))) + +print all_elems - set_range diff -r f5eac04a00fe -r 333092b68926 day1/exercise/pyramid1.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/exercise/pyramid1.py Thu Oct 08 18:59:47 2009 +0530 @@ -0,0 +1,5 @@ +n = input('How many lines? ') +for i in range(1, n + 1): + for j in range(i): + print i, + print diff -r f5eac04a00fe -r 333092b68926 day1/exercise/pytriads.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/exercise/pytriads.py Thu Oct 08 18:59:47 2009 +0530 @@ -0,0 +1,18 @@ +def is_perfect_square(n): + i = 1 + while i * i < n: + i += 1 + return i * i == n, i + +def gcd(a, b): + if a % b == 0: + return b + else: + return gcd(b, a%b) + +for a in range(3, 100): + for b in range(a+1, 100): + ips, c = is_perfect_square((a * a) + (b * b)) + if ips and gcd(a, b) == 1: + print a, b, c + diff -r f5eac04a00fe -r 333092b68926 day1/exercise/readmarks.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/exercise/readmarks.py Thu Oct 08 18:59:47 2009 +0530 @@ -0,0 +1,5 @@ +f = open('/home/madhu/Desktop/marks.dat') + +for line in f: + fields = line.split(';') + print "Name: %s, Total Marks: %s" % (fields[2].strip(), fields[8].strip()) diff -r f5eac04a00fe -r 333092b68926 day1/exercise/roots.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/exercise/roots.py Thu Oct 08 18:59:47 2009 +0530 @@ -0,0 +1,28 @@ +import math + +def linspace(a, b, N): + lns = [] + step = (float(b) - float(a)) / float(N - 1) + print step + for i in range(N): + lns.append(a + i*step) + + return lns + +def sinsin_func(): + x = linspace(0, 5, 11) + sin_list = [] + for i in x: + sin_list.append(math.sin(i) + math.sin(10*i)) + + return sin_list + +def find_root_range(): + sin_list = sinsin_func() + for i, sins in enumerate(sin_list): + if (sin_list[i] > 0 and sin_list[i+1] < 0) or (sin_list[i] > 0 and sin_list[i+1] < 0): + print "Roots lie between: %f and %f" % (sin_list[i], sin_list[i+1]) + if sin_list[i] == 0: + print "%f is the root" % sin_list[i] + +find_root_range() diff -r f5eac04a00fe -r 333092b68926 day1/exercise/round_float.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/exercise/round_float.py Thu Oct 08 18:59:47 2009 +0530 @@ -0,0 +1,12 @@ +# round using int +n = 17.3 # any float +int (n + .5) + +# round it off to first decimal place +round(amount * 10) / 10.0 + +# round it off to nearest 5 paise +round(amount * 20) / 20.0 + +# exchange two variables +a, b = b, a diff -r f5eac04a00fe -r 333092b68926 day1/exercise/strrange.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/exercise/strrange.py Thu Oct 08 18:59:47 2009 +0530 @@ -0,0 +1,13 @@ +str_ranges = "1, 3-7, 12, 15, 18-21" + +ranges = str_ranges.split(',') + +lst = [] +for r in ranges: + vals = r.split('-') + if len(vals) == 2: + lst.extend(range(int(vals[0]), int(vals[1]) + 1)) + else: + lst.append(int(vals[0])) + +print lst diff -r f5eac04a00fe -r 333092b68926 day1/exercise/word_frequencies.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/exercise/word_frequencies.py Thu Oct 08 18:59:47 2009 +0530 @@ -0,0 +1,11 @@ +f = open('/home/madhu/pyprogs/pytriads.py') + +freq = {} +for line in f: + words = line.split() + for word in words: + key = word.strip(',.!;?\'" ') + value = freq.get(key, 1) + freq[key] = value + 1 + +print freq diff -r f5eac04a00fe -r 333092b68926 quiz.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/quiz.tex Thu Oct 08 18:59:47 2009 +0530 @@ -0,0 +1,11 @@ +\documentclass[a4paper,10pt]{book} + + +\begin{document} +Which version of Python were you using? +List some key differences between IPython and Vanilla Python +What is the biggest integer number that can be represented by Python? +What is the result of 17.0 / 2? +What does '*' * 40 produce? + +\end{document}