1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | from operator import itemgetter # for sorting import sys # for command-line arguments # makes sorting dictionaries prettier def sortDictionary (s): return sorted(s.items(), key = itemgetter(1), reverse = True) hexColors = ["F05DCF", "F4B213", "7BB5FE", "19B915", "C913E4", "E38080", "4891EB", "DCF725", "E02EB0", "EE7D18", "16D949", "73E0C9", "22F1DB", "1460A1", "CF8040", "FFFFFF", "CF8054", "204E00", "2B1160", "87513C", "DECEE9", "C913E4", "83B892", "597D4C", "DACA5D", "2F486B", "D79E17", "826889", "359DA1", "DE7A43", "568C51", "FBF786"] if __name__ == "__main__": # set up command line arguments # thumb: creates a smaller file, with shorter (or no, depending on letter count) labels # verbose: prints out each list of letters and frequencies, too if (len(sys.argv) < 2 or len(sys.argv) > 4): print "Usage: wof.py [filename] [t|f] [v]" exit() thumb = False verbose = False fileName = sys.argv[1] if len(sys.argv) > 2 and sys.argv[2].lower() == "t": thumb = True if len(sys.argv) > 3 and sys.argv[3].lower() == "v": verbose = True # set up lists of letters letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"] consonants = ["b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z"] vowels = ["a", "e", "i", "o", "u"] # letters to exclude (already given to you on game show) already = ["r", "s", "t", "l", "n", "e"] # set up frequency dictionaries {leter : number of occurences} allFrequencies = dict((letter, 0) for letter in letters) vowelFrequencies = dict((letter, 0) for letter in vowels) consonantFrequencies = dict((letter, 0) for letter in consonants); # Read the data file. Should consist of one final puzzle # solution per line, optionally lines can start with "#" for a comment file = open(fileName) while True: line = file.readline() if not line: break #end of loop if line[0] == "#": continue # skip comments for letter in line: lower = letter.lower() if lower in allFrequencies: allFrequencies[lower] = allFrequencies[lower] + 1 if lower in already: # exclude RSTLNE from vowels and consonants break if lower in vowelFrequencies: vowelFrequencies[lower] = vowelFrequencies[lower] + 1 if lower in consonantFrequencies: consonantFrequencies[lower] = consonantFrequencies[lower] + 1 #sort dictionaries allFrequencies = sortDictionary(allFrequencies); vowelFrequencies = sortDictionary(vowelFrequencies); consonantFrequencies = sortDictionary(consonantFrequencies); if verbose: #display the lists print "ALL:\n", allFrequencies print "\nVOWELS:\n", vowelFrequencies print "\nCONSONANTS:\n", consonantFrequencies charts = {"All+Letters" : allFrequencies, "Vowels" : vowelFrequencies, "Consonants" : consonantFrequencies} for chart in charts: # make the image URLs, using Google Charts if thumb: url = "http://chart.apis.google.com/chart?chs=100x100&cht=p" else: url = "http://chart.apis.google.com/chart?chs=400x300&cht=p" # build lists for data series and its labels labels = [] data = [] for entry in charts[chart]: if int(entry[1]) > 0: # exclude any letters not used # make sure a thumbnail doesn't have too many labels to clutter it if thumb and len(charts[chart]) <= 6: labels.append(entry[0].upper()) else: labels.append(entry[0].upper() + "+(" + str(entry[1]) + ")") data.append(str(entry[1])) # set them to the query string parts for data and labels dataRange = "&chd=t:" + ",".join(data); if (thumb and len(charts[chart]) >= 6): labelRange = "" else: labelRange = "&chl=" + "|".join(labels); # build the array of chart colors chartColors = "&chco=" + ",".join(hexColors[0:len(charts[chart])-2]) # build final URL url = url + dataRange + labelRange + "&" + chartColors + "&chtt=" + chart; print "\n", chart, "\n", url |