-
Notifications
You must be signed in to change notification settings - Fork 0
/
wordle.wls
executable file
·463 lines (459 loc) · 27.6 KB
/
wordle.wls
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
#!/usr/bin/env wolframscript
getWordleTweetsFrom[numberOfTweets_, twitter_, location_] :=
twitter["TweetSearch", "Query" -> "wordle",
MaxItems -> numberOfTweets, GeoLocation -> location];
onlyTweetsFromToday[tweets_] :=
Module[{formatDate}, formatDate = DateList[#][[1 ;; 3]] &;
Select[tweets, formatDate@#["CreationDate"] == formatDate@Today &]]
getWordleScore[word_] := StringMatchQ[word, x_ ~~ "/6"];
parseWordleTweet[tweetText_] :=
tweetText // StringSplit // Select[#, getWordleScore] &;
allScoresTodayByState[numberOfTweets_] :=
Module[{twitter, states, tweets, tweetData, scores, tries},
twitter =
ServiceConnect["Twitter",
"connection-73cf2f8e5c959079533643c4af7a247d"];
states = DeleteCases[EntityList@EntityClass["AdministrativeDivision", "ContinentalUSStates"], Entity[_, {"Alaska", _}]];
tweets =
Map[getWordleTweetsFrom[numberOfTweets, twitter, #] &, states];
tweetData = ((onlyTweetsFromToday@#)[All, "Text"] // Normal) & /@
tweets;
scores = Flatten@(parseWordleTweet /@ #) & /@ tweetData;
tries = (First /@ Characters /@ #) & /@ scores;
AssociationThread[
states, ((ToExpression /@ Select[#, DigitQ]) & /@
tries) /. {} -> {0}]];
newData = allScoresTodayByState[100];
existingData = Import["~/Desktop/wordle-data-repository/data.xls"];
existingData =
Association[#[[1]][[2]] -> Association[Drop[#, 1]] & /@
Table[
Thread[existingData[[1]][[1]] -> existingData[[1]][[x]]], {x, 2,
Length@(existingData[[1]])}]];
existingData =
KeyMap[
Interpreter["AdministrativeDivision"]] /@ (KeyMap[DateObject,
existingData]);
existingData = Map[ToExpression, existingData, {2}];
allWordleWords = {"cigar", "rebut", "sissy", "humph", "awake",
"blush", "focal", "evade", "naval", "serve", "heath", "dwarf",
"model", "karma", "stink", "grade", "quiet", "bench", "abate",
"feign", "major", "death", "fresh", "crust", "stool", "colon",
"abase", "marry", "react", "batty", "pride", "floss", "helix",
"croak", "staff", "paper", "unfed", "whelp", "trawl", "outdo",
"adobe", "crazy", "sower", "repay", "digit", "crate", "cluck",
"spike", "mimic", "pound", "maxim", "linen", "unmet", "flesh",
"booby", "forth", "first", "stand", "belly", "ivory", "seedy",
"print", "yearn", "drain", "bribe", "stout", "panel", "crass",
"flume", "offal", "agree", "error", "swirl", "argue", "bleed",
"delta", "flick", "totem", "wooer", "front", "shrub", "parry",
"biome", "lapel", "start", "greet", "goner", "golem", "lusty",
"loopy", "round", "audit", "lying", "gamma", "labor", "islet",
"civic", "forge", "corny", "moult", "basic", "salad", "agate",
"spicy", "spray", "essay", "fjord", "spend", "kebab", "guild",
"aback", "motor", "alone", "hatch", "hyper", "thumb", "dowry",
"ought", "belch", "dutch", "pilot", "tweed", "comet", "jaunt",
"enema", "steed", "abyss", "growl", "fling", "dozen", "boozy",
"erode", "world", "gouge", "click", "briar", "great", "altar",
"pulpy", "blurt", "coast", "duchy", "groin", "fixer", "group",
"rogue", "badly", "smart", "pithy", "gaudy", "chill", "heron",
"vodka", "finer", "surer", "radio", "rouge", "perch", "retch",
"wrote", "clock", "tilde", "store", "prove", "bring", "solve",
"cheat", "grime", "exult", "usher", "epoch", "triad", "break",
"rhino", "viral", "conic", "masse", "sonic", "vital", "trace",
"using", "peach", "champ", "baton", "brake", "pluck", "craze",
"gripe", "weary", "picky", "acute", "ferry", "aside", "tapir",
"troll", "unify", "rebus", "boost", "truss", "siege", "tiger",
"banal", "slump", "crank", "gorge", "query", "drink", "favor",
"abbey", "tangy", "panic", "solar", "shire", "proxy", "point",
"robot", "prick", "wince", "crimp", "knoll", "sugar", "whack",
"mount", "perky", "could", "wrung", "light", "those", "moist",
"shard", "pleat", "aloft", "skill", "elder", "frame", "humor",
"pause", "ulcer", "ultra", "robin", "cynic", "aroma", "caulk",
"shake", "dodge", "swill", "tacit", "other", "thorn", "trove",
"bloke", "vivid", "spill", "chant", "choke", "rupee", "nasty",
"mourn", "ahead", "brine", "cloth", "hoard", "sweet", "month",
"lapse", "watch", "today", "focus", "smelt", "tease", "cater",
"movie", "saute", "allow", "renew", "their", "slosh", "purge",
"chest", "depot", "epoxy", "nymph", "found", "shall", "stove",
"lowly", "snout", "trope", "fewer", "shawl", "natal", "comma",
"foray", "scare", "stair", "black", "squad", "royal", "chunk",
"mince", "shame", "cheek", "ample", "flair", "foyer", "cargo",
"oxide", "plant", "olive", "inert", "askew", "heist", "shown",
"zesty", "trash", "larva", "forgo", "story", "hairy", "train",
"homer", "badge", "midst", "canny", "shine", "gecko", "farce",
"slung", "tipsy", "metal", "yield", "delve", "being", "scour",
"glass", "gamer", "scrap", "money", "hinge", "album", "vouch",
"asset", "tiara", "crept", "bayou", "atoll", "manor", "creak",
"showy", "phase", "froth", "depth", "gloom", "flood", "trait",
"girth", "piety", "goose", "float", "donor", "atone", "primo",
"apron", "blown", "cacao", "loser", "input", "gloat", "awful",
"brink", "smite", "beady", "rusty", "retro", "droll", "gawky",
"hutch", "pinto", "egret", "lilac", "sever", "field", "fluff",
"agape", "voice", "stead", "berth", "madam", "night", "bland",
"liver", "wedge", "roomy", "wacky", "flock", "angry", "trite",
"aphid", "tryst", "midge", "power", "elope", "cinch", "motto",
"stomp", "upset", "bluff", "cramp", "quart", "coyly", "youth",
"rhyme", "buggy", "alien", "smear", "unfit", "patty", "cling",
"glean", "label", "hunky", "khaki", "poker", "gruel", "twice",
"twang", "shrug", "treat", "waste", "merit", "woven", "needy",
"clown", "irony", "ruder", "gauze", "chief", "onset", "prize",
"fungi", "charm", "gully", "inter", "whoop", "taunt", "leery",
"class", "theme", "lofty", "tibia", "booze", "alpha", "thyme",
"doubt", "parer", "chute", "stick", "trice", "alike", "recap",
"saint", "glory", "grate", "admit", "brisk", "soggy", "usurp",
"scald", "scorn", "leave", "twine", "sting", "bough", "marsh",
"sloth", "dandy", "vigor", "howdy", "enjoy", "valid", "ionic",
"equal", "floor", "catch", "spade", "stein", "exist", "quirk",
"denim", "grove", "spiel", "mummy", "fault", "foggy", "flout",
"carry", "sneak", "libel", "waltz", "aptly", "piney", "inept",
"aloud", "photo", "dream", "stale", "unite", "snarl", "baker",
"there", "glyph", "pooch", "hippy", "spell", "folly", "louse",
"gulch", "vault", "godly", "threw", "fleet", "grave", "inane",
"shock", "crave", "spite", "valve", "skimp", "claim", "rainy",
"musty", "pique", "daddy", "quasi", "arise", "aging", "valet",
"opium", "avert", "stuck", "recut", "mulch", "genre", "plume",
"rifle", "count", "incur", "total", "wrest", "mocha", "deter",
"study", "lover", "safer", "rivet", "funny", "smoke", "mound",
"undue", "sedan", "pagan", "swine", "guile", "gusty", "equip",
"tough", "canoe", "chaos", "covet", "human", "udder", "lunch",
"blast", "stray", "manga", "melee", "lefty", "quick", "paste",
"given", "octet", "risen", "groan", "leaky", "grind", "carve",
"loose", "sadly", "spilt", "apple", "slack", "honey", "final",
"sheen", "eerie", "minty", "slick", "derby", "wharf", "spelt",
"coach", "erupt", "singe", "price", "spawn", "fairy", "jiffy",
"filmy", "stack", "chose", "sleep", "ardor", "nanny", "niece",
"woozy", "handy", "grace", "ditto", "stank", "cream", "usual",
"diode", "valor", "angle", "ninja", "muddy", "chase", "reply",
"prone", "spoil", "heart", "shade", "diner", "arson", "onion",
"sleet", "dowel", "couch", "palsy", "bowel", "smile", "evoke",
"creek", "lance", "eagle", "idiot", "siren", "built", "embed",
"award", "dross", "annul", "goody", "frown", "patio", "laden",
"humid", "elite", "lymph", "edify", "might", "reset", "visit",
"gusto", "purse", "vapor", "crock", "write", "sunny", "loath",
"chaff", "slide", "queer", "venom", "stamp", "sorry", "still",
"acorn", "aping", "pushy", "tamer", "hater", "mania", "awoke",
"brawn", "swift", "exile", "birch", "lucky", "freer", "risky",
"ghost", "plier", "lunar", "winch", "snare", "nurse", "house",
"borax", "nicer", "lurch", "exalt", "about", "savvy", "toxin",
"tunic", "pried", "inlay", "chump", "lanky", "cress", "eater",
"elude", "cycle", "kitty", "boule", "moron", "tenet", "place",
"lobby", "plush", "vigil", "index", "blink", "clung", "qualm",
"croup", "clink", "juicy", "stage", "decay", "nerve", "flier",
"shaft", "crook", "clean", "china", "ridge", "vowel", "gnome",
"snuck", "icing", "spiny", "rigor", "snail", "flown", "rabid",
"prose", "thank", "poppy", "budge", "fiber", "moldy", "dowdy",
"kneel", "track", "caddy", "quell", "dumpy", "paler", "swore",
"rebar", "scuba", "splat", "flyer", "horny", "mason", "doing",
"ozone", "amply", "molar", "ovary", "beset", "queue", "cliff",
"magic", "truce", "sport", "fritz", "edict", "twirl", "verse",
"llama", "eaten", "range", "whisk", "hovel", "rehab", "macaw",
"sigma", "spout", "verve", "sushi", "dying", "fetid", "brain",
"buddy", "thump", "scion", "candy", "chord", "basin", "march",
"crowd", "arbor", "gayly", "musky", "stain", "dally", "bless",
"bravo", "stung", "title", "ruler", "kiosk", "blond", "ennui",
"layer", "fluid", "tatty", "score", "cutie", "zebra", "barge",
"matey", "bluer", "aider", "shook", "river", "privy", "betel",
"frisk", "bongo", "begun", "azure", "weave", "genie", "sound",
"glove", "braid", "scope", "wryly", "rover", "assay", "ocean",
"bloom", "irate", "later", "woken", "silky", "wreck", "dwelt",
"slate", "smack", "solid", "amaze", "hazel", "wrist", "jolly",
"globe", "flint", "rouse", "civil", "vista", "relax", "cover",
"alive", "beech", "jetty", "bliss", "vocal", "often", "dolly",
"eight", "joker", "since", "event", "ensue", "shunt", "diver",
"poser", "worst", "sweep", "alley", "creed", "anime", "leafy",
"bosom", "dunce", "stare", "pudgy", "waive", "choir", "stood",
"spoke", "outgo", "delay", "bilge", "ideal", "clasp", "seize",
"hotly", "laugh", "sieve", "block", "meant", "grape", "noose",
"hardy", "shied", "drawl", "daisy", "putty", "strut", "burnt",
"tulip", "crick", "idyll", "vixen", "furor", "geeky", "cough",
"naive", "shoal", "stork", "bathe", "aunty", "check", "prime",
"brass", "outer", "furry", "razor", "elect", "evict", "imply",
"demur", "quota", "haven", "cavil", "swear", "crump", "dough",
"gavel", "wagon", "salon", "nudge", "harem", "pitch", "sworn",
"pupil", "excel", "stony", "cabin", "unzip", "queen", "trout",
"polyp", "earth", "storm", "until", "taper", "enter", "child",
"adopt", "minor", "fatty", "husky", "brave", "filet", "slime",
"glint", "tread", "steal", "regal", "guest", "every", "murky",
"share", "spore", "hoist", "buxom", "inner", "otter", "dimly",
"level", "sumac", "donut", "stilt", "arena", "sheet", "scrub",
"fancy", "slimy", "pearl", "silly", "porch", "dingo", "sepia",
"amble", "shady", "bread", "friar", "reign", "dairy", "quill",
"cross", "brood", "tuber", "shear", "posit", "blank", "villa",
"shank", "piggy", "freak", "which", "among", "fecal", "shell",
"would", "algae", "large", "rabbi", "agony", "amuse", "bushy",
"copse", "swoon", "knife", "pouch", "ascot", "plane", "crown",
"urban", "snide", "relay", "abide", "viola", "rajah", "straw",
"dilly", "crash", "amass", "third", "trick", "tutor", "woody",
"blurb", "grief", "disco", "where", "sassy", "beach", "sauna",
"comic", "clued", "creep", "caste", "graze", "snuff", "frock",
"gonad", "drunk", "prong", "lurid", "steel", "halve", "buyer",
"vinyl", "utile", "smell", "adage", "worry", "tasty", "local",
"trade", "finch", "ashen", "modal", "gaunt", "clove", "enact",
"adorn", "roast", "speck", "sheik", "missy", "grunt", "snoop",
"party", "touch", "mafia", "emcee", "array", "south", "vapid",
"jelly", "skulk", "angst", "tubal", "lower", "crest", "sweat",
"cyber", "adore", "tardy", "swami", "notch", "groom", "roach",
"hitch", "young", "align", "ready", "frond", "strap", "puree",
"realm", "venue", "swarm", "offer", "seven", "dryer", "diary",
"dryly", "drank", "acrid", "heady", "theta", "junto", "pixie",
"quoth", "bonus", "shalt", "penne", "amend", "datum", "build",
"piano", "shelf", "lodge", "suing", "rearm", "coral", "ramen",
"worth", "psalm", "infer", "overt", "mayor", "ovoid", "glide",
"usage", "poise", "randy", "chuck", "prank", "fishy", "tooth",
"ether", "drove", "idler", "swath", "stint", "while", "begat",
"apply", "slang", "tarot", "radar", "credo", "aware", "canon",
"shift", "timer", "bylaw", "serum", "three", "steak", "iliac",
"shirk", "blunt", "puppy", "penal", "joist", "bunny", "shape",
"beget", "wheel", "adept", "stunt", "stole", "topaz", "chore",
"fluke", "afoot", "bloat", "bully", "dense", "caper", "sneer",
"boxer", "jumbo", "lunge", "space", "avail", "short", "slurp",
"loyal", "flirt", "pizza", "conch", "tempo", "droop", "plate",
"bible", "plunk", "afoul", "savoy", "steep", "agile", "stake",
"dwell", "knave", "beard", "arose", "motif", "smash", "broil",
"glare", "shove", "baggy", "mammy", "swamp", "along", "rugby",
"wager", "quack", "squat", "snaky", "debit", "mange", "skate",
"ninth", "joust", "tramp", "spurn", "medal", "micro", "rebel",
"flank", "learn", "nadir", "maple", "comfy", "remit", "gruff",
"ester", "least", "mogul", "fetch", "cause", "oaken", "aglow",
"meaty", "gaffe", "shyly", "racer", "prowl", "thief", "stern",
"poesy", "rocky", "tweet", "waist", "spire", "grope", "havoc",
"patsy", "truly", "forty", "deity", "uncle", "swish", "giver",
"preen", "bevel", "lemur", "draft", "slope", "annoy", "lingo",
"bleak", "ditty", "curly", "cedar", "dirge", "grown", "horde",
"drool", "shuck", "crypt", "cumin", "stock", "gravy", "locus",
"wider", "breed", "quite", "chafe", "cache", "blimp", "deign",
"fiend", "logic", "cheap", "elide", "rigid", "false", "renal",
"pence", "rowdy", "shoot", "blaze", "envoy", "posse", "brief",
"never", "abort", "mouse", "mucky", "sulky", "fiery", "media",
"trunk", "yeast", "clear", "skunk", "scalp", "bitty", "cider",
"koala", "duvet", "segue", "creme", "super", "grill", "after",
"owner", "ember", "reach", "nobly", "empty", "speed", "gipsy",
"recur", "smock", "dread", "merge", "burst", "kappa", "amity",
"shaky", "hover", "carol", "snort", "synod", "faint", "haunt",
"flour", "chair", "detox", "shrew", "tense", "plied", "quark",
"burly", "novel", "waxen", "stoic", "jerky", "blitz", "beefy",
"lyric", "hussy", "towel", "quilt", "below", "bingo", "wispy",
"brash", "scone", "toast", "easel", "saucy", "value", "spice",
"honor", "route", "sharp", "bawdy", "radii", "skull", "phony",
"issue", "lager", "swell", "urine", "gassy", "trial", "flora",
"upper", "latch", "wight", "brick", "retry", "holly", "decal",
"grass", "shack", "dogma", "mover", "defer", "sober", "optic",
"crier", "vying", "nomad", "flute", "hippo", "shark", "drier",
"obese", "bugle", "tawny", "chalk", "feast", "ruddy", "pedal",
"scarf", "cruel", "bleat", "tidal", "slush", "semen", "windy",
"dusty", "sally", "igloo", "nerdy", "jewel", "shone", "whale",
"hymen", "abuse", "fugue", "elbow", "crumb", "pansy", "welsh",
"syrup", "terse", "suave", "gamut", "swung", "drake", "freed",
"afire", "shirt", "grout", "oddly", "tithe", "plaid", "dummy",
"broom", "blind", "torch", "enemy", "again", "tying", "pesky",
"alter", "gazer", "noble", "ethos", "bride", "extol", "decor",
"hobby", "beast", "idiom", "utter", "these", "sixth", "alarm",
"erase", "elegy", "spunk", "piper", "scaly", "scold", "hefty",
"chick", "sooty", "canal", "whiny", "slash", "quake", "joint",
"swept", "prude", "heavy", "wield", "femme", "lasso", "maize",
"shale", "screw", "spree", "smoky", "whiff", "scent", "glade",
"spent", "prism", "stoke", "riper", "orbit", "cocoa", "guilt",
"humus", "shush", "table", "smirk", "wrong", "noisy", "alert",
"shiny", "elate", "resin", "whole", "hunch", "pixel", "polar",
"hotel", "sword", "cleat", "mango", "rumba", "puffy", "filly",
"billy", "leash", "clout", "dance", "ovate", "facet", "chili",
"paint", "liner", "curio", "salty", "audio", "snake", "fable",
"cloak", "navel", "spurt", "pesto", "balmy", "flash", "unwed",
"early", "churn", "weedy", "stump", "lease", "witty", "wimpy",
"spoof", "saner", "blend", "salsa", "thick", "warty", "manic",
"blare", "squib", "spoon", "probe", "crepe", "knack", "force",
"debut", "order", "haste", "teeth", "agent", "widen", "icily",
"slice", "ingot", "clash", "juror", "blood", "abode", "throw",
"unity", "pivot", "slept", "troop", "spare", "sewer", "parse",
"morph", "cacti", "tacky", "spool", "demon", "moody", "annex",
"begin", "fuzzy", "patch", "water", "lumpy", "admin", "omega",
"limit", "tabby", "macho", "aisle", "skiff", "basis", "plank",
"verge", "botch", "crawl", "lousy", "slain", "cubic", "raise",
"wrack", "guide", "foist", "cameo", "under", "actor", "revue",
"fraud", "harpy", "scoop", "climb", "refer", "olden", "clerk",
"debar", "tally", "ethic", "cairn", "tulle", "ghoul", "hilly",
"crude", "apart", "scale", "older", "plain", "sperm", "briny",
"abbot", "rerun", "quest", "crisp", "bound", "befit", "drawn",
"suite", "itchy", "cheer", "bagel", "guess", "broad", "axiom",
"chard", "caput", "leant", "harsh", "curse", "proud", "swing",
"opine", "taste", "lupus", "gumbo", "miner", "green", "chasm",
"lipid", "topic", "armor", "brush", "crane", "mural", "abled",
"habit", "bossy", "maker", "dusky", "dizzy", "lithe", "brook",
"jazzy", "fifty", "sense", "giant", "surly", "legal", "fatal",
"flunk", "began", "prune", "small", "slant", "scoff", "torus",
"ninny", "covey", "viper", "taken", "moral", "vogue", "owing",
"token", "entry", "booth", "voter", "chide", "elfin", "ebony",
"neigh", "minim", "melon", "kneed", "decoy", "voila", "ankle",
"arrow", "mushy", "tribe", "cease", "eager", "birth", "graph",
"odder", "terra", "weird", "tried", "clack", "color", "rough",
"weigh", "uncut", "ladle", "strip", "craft", "minus", "dicey",
"titan", "lucid", "vicar", "dress", "ditch", "gypsy", "pasta",
"taffy", "flame", "swoop", "aloof", "sight", "broke", "teary",
"chart", "sixty", "wordy", "sheer", "leper", "nosey", "bulge",
"savor", "clamp", "funky", "foamy", "toxic", "brand", "plumb",
"dingy", "butte", "drill", "tripe", "bicep", "tenor", "krill",
"worse", "drama", "hyena", "think", "ratio", "cobra", "basil",
"scrum", "bused", "phone", "court", "camel", "proof", "heard",
"angel", "petal", "pouty", "throb", "maybe", "fetal", "sprig",
"spine", "shout", "cadet", "macro", "dodgy", "satyr", "rarer",
"binge", "trend", "nutty", "leapt", "amiss", "split", "myrrh",
"width", "sonar", "tower", "baron", "fever", "waver", "spark",
"belie", "sloop", "expel", "smote", "baler", "above", "north",
"wafer", "scant", "frill", "awash", "snack", "scowl", "frail",
"drift", "limbo", "fence", "motel", "ounce", "wreak", "revel",
"talon", "prior", "knelt", "cello", "flake", "debug", "anode",
"crime", "salve", "scout", "imbue", "pinky", "stave", "vague",
"chock", "fight", "video", "stone", "teach", "cleft", "frost",
"prawn", "booty", "twist", "apnea", "stiff", "plaza", "ledge",
"tweak", "board", "grant", "medic", "bacon", "cable", "brawl",
"slunk", "raspy", "forum", "drone", "women", "mucus", "boast",
"toddy", "coven", "tumor", "truer", "wrath", "stall", "steam",
"axial", "purer", "daily", "trail", "niche", "mealy", "juice",
"nylon", "plump", "merry", "flail", "papal", "wheat", "berry",
"cower", "erect", "brute", "leggy", "snipe", "sinew", "skier",
"penny", "jumpy", "rally", "umbra", "scary", "modem", "gross",
"avian", "greed", "satin", "tonic", "parka", "sniff", "livid",
"stark", "trump", "giddy", "reuse", "taboo", "avoid", "quote",
"devil", "liken", "gloss", "gayer", "beret", "noise", "gland",
"dealt", "sling", "rumor", "opera", "thigh", "tonga", "flare",
"wound", "white", "bulky", "etude", "horse", "circa", "paddy",
"inbox", "fizzy", "grain", "exert", "surge", "gleam", "belle",
"salvo", "crush", "fruit", "sappy", "taker", "tract", "ovine",
"spiky", "frank", "reedy", "filth", "spasm", "heave", "mambo",
"right", "clank", "trust", "lumen", "borne", "spook", "sauce",
"amber", "lathe", "carat", "corer", "dirty", "slyly", "affix",
"alloy", "taint", "sheep", "kinky", "wooly", "mauve", "flung",
"yacht", "fried", "quail", "brunt", "grimy", "curvy", "cagey",
"rinse", "deuce", "state", "grasp", "milky", "bison", "graft",
"sandy", "baste", "flask", "hedge", "girly", "swash", "boney",
"coupe", "endow", "abhor", "welch", "blade", "tight", "geese",
"miser", "mirth", "cloud", "cabal", "leech", "close", "tenth",
"pecan", "droit", "grail", "clone", "guise", "ralph", "tango",
"biddy", "smith", "mower", "payee", "serif", "drape", "fifth",
"spank", "glaze", "allot", "truck", "kayak", "virus", "testy",
"tepee", "fully", "zonal", "metro", "curry", "grand", "banjo",
"axion", "bezel", "occur", "chain", "nasal", "gooey", "filer",
"brace", "allay", "pubic", "raven", "plead", "gnash", "flaky",
"munch", "dully", "eking", "thing", "slink", "hurry", "theft",
"shorn", "pygmy", "ranch", "wring", "lemon", "shore", "mamma",
"froze", "newer", "style", "moose", "antic", "drown", "vegan",
"chess", "guppy", "union", "lever", "lorry", "image", "cabby",
"druid", "exact", "truth", "dopey", "spear", "cried", "chime",
"crony", "stunk", "timid", "batch", "gauge", "rotor", "crack",
"curve", "latte", "witch", "bunch", "repel", "anvil", "soapy",
"meter", "broth", "madly", "dried", "scene", "known", "magma",
"roost", "woman", "thong", "punch", "pasty", "downy", "knead",
"whirl", "rapid", "clang", "anger", "drive", "goofy", "email",
"music", "stuff", "bleep", "rider", "mecca", "folio", "setup",
"verso", "quash", "fauna", "gummy", "happy", "newly", "fussy",
"relic", "guava", "ratty", "fudge", "femur", "chirp", "forte",
"alibi", "whine", "petty", "golly", "plait", "fleck", "felon",
"gourd", "brown", "thrum", "ficus", "stash", "decry", "wiser",
"junta", "visor", "daunt", "scree", "impel", "await", "press",
"whose", "turbo", "stoop", "speak", "mangy", "eying", "inlet",
"crone", "pulse", "mossy", "staid", "hence", "pinch", "teddy",
"sully", "snore", "ripen", "snowy", "attic", "going", "leach",
"mouth", "hound", "clump", "tonal", "bigot", "peril", "piece",
"blame", "haute", "spied", "undid", "intro", "basal", "rodeo",
"guard", "steer", "loamy", "scamp", "scram", "manly", "hello",
"vaunt", "organ", "feral", "knock", "extra", "condo", "adapt",
"willy", "polka", "rayon", "skirt", "faith", "torso", "match",
"mercy", "tepid", "sleek", "riser", "twixt", "peace", "flush",
"catty", "login", "eject", "roger", "rival", "untie", "refit",
"aorta", "adult", "judge", "rower", "artsy", "rural", "shave",
"bobby", "eclat", "fella", "gaily", "harry", "hasty", "hydro",
"liege", "octal", "ombre", "payer", "sooth", "unset", "unlit",
"vomit", "fanny", "fetus", "butch", "stalk", "flack", "widow",
"augur"};
allDates =
Table[DatePlus[DateRange[DateObject[{2021, 6, 18}], Today], n], {n,
Length@allWordleWords}];
wordsByDate = AssociationThread[allDates -> allWordleWords];
rawData = AssociateTo[existingData, Today -> newData];
plotStateData[
data_] := {GeoRegionValuePlot[(N@*Mean) /@ data,
ColorFunction -> "BlueGreenYellow",
GeoLabels -> (Tooltip[#1,
Row@{"Average Score" -> NumberForm[#4, 2]}] &),
ImageSize -> 250],
GeoRegionValuePlot[Length /@ (data /. {0} -> {}),
ColorFunction -> "BlueGreenYellow",
GeoLabels -> (Tooltip[#1, Row@{"Tweets Collected" -> #4}] &),
ImageSize -> 250]};
getDataTab[] :=
Module[{data, allScores, formatDate, words, wordFrequencies,
avgScores, tweetCount, histograms, boxplots, stateScores, maps,
dataTable, averageScoresList, wordFrequenciesList},
data = Take[rawData, Min[7, Length@rawData]*-1];
allScores =
DeleteCases[#, 0] & /@ (Flatten /@ ((Values /@ #) &@data));
words = Prepend[(wordsByDate /@ (Keys@allScores)), "Word"];
wordFrequencies =
Prepend[(WordFrequencyData /@ Drop[words, 1]), "Word Frequency"];
avgScores =
Prepend[((N@*Mean) /@ (Values@allScores)), "Average Score"];
tweetCount =
Prepend[Length /@ (Values@allScores), "Tweets Scraped"];
histograms =
Histogram[#, Frame -> True, ImagePadding -> {{30, 10}, {3, 10}},
ImageSize -> 250,
FrameTicks -> {{Automatic, None}, {None, None}}] & /@ (Values@
allScores);
maps = Transpose@(plotStateData /@ (Values@data));
dataTable =
Transpose[{Prepend[DateString /@ Keys@allScores, "Date"], words,
NumberForm[#, 2] & /@ wordFrequencies,
NumberForm[#, 2] & /@ avgScores, tweetCount,
Prepend[histograms, "Score Distribution (Country)"],
Prepend[maps[[1]], "Score Distribution Map (State)"],
Prepend[maps[[2]], "Activity Distribution Map (State)"]}];
Text@Grid[dataTable, Frame -> All, ItemSize -> Small]];
getListViz[] :=
Module[{allScores, formatDate, words, wordFrequencies, avgScores,
histograms, stateScores, maps, dataTable, averageScoresList,
wordFrequenciesList, tweetCount, max1, min1, max2, min2},
allScores =
DeleteCases[#, 0] & /@ (Flatten /@ ((Values /@ #) &@rawData));
words = Prepend[(wordsByDate /@ (Keys@allScores)), "Word"];
wordFrequencies =
Prepend[(WordFrequencyData /@ Drop[words, 1]), "Word Frequency"];
avgScores =
Prepend[((N@*Mean) /@ (Values@allScores)), "Average Score"];
averageScoresList = Transpose[{Keys@allScores, Drop[avgScores, 1]}];
wordFrequenciesList =
Transpose[{Keys@allScores, Drop[wordFrequencies, 1]}];
tweetCount =
Transpose[{Keys@allScores, Length /@ (Values@allScores)}];
{max1, min1} = {MaximalBy[averageScoresList, Last, 3],
MinimalBy[averageScoresList, Last, 3]};
{max2, min2} = {MaximalBy[wordFrequenciesList, Last, 3],
MinimalBy[wordFrequenciesList, Last, 3]};
{DateListPlot[averageScoresList -> Rest@words,
Sequence[FrameTicks -> {{Automatic, None}, {Automatic, None}},
PlotLabel -> "Average Scores", ImageSize -> 500,
Epilog -> {PointSize[Medium], Red, Map[Point, max1], Purple,
Map[Point, min1]}]],
DateListLogPlot[wordFrequenciesList -> Rest@words,
Sequence[FrameTicks -> {{Automatic, None}, {Automatic, None}},
PlotLabel -> "Word Frequency", ImageSize -> 500,
Epilog -> {PointSize[Medium], Red,
Map[Point, Map[{Part[#, 1], Log[Part[#, 2]]} &, max2]],
Purple,
Map[Point, Map[{Part[#, 1], Log[Part[#, 2]]} &, min2]]}]],
DateListPlot[tweetCount,
Sequence[FrameTicks -> {{Automatic, None}, {Automatic, None}},
PlotLabel -> "Tweets Scraped", ImageSize -> 500]]}];
Export["~/Desktop/wordle-data-repository/table.svg", getDataTab[]];
{a, b, c} = getListViz[];
Export["~/Desktop/wordle-data-repository/l1.svg", a];
Export["~/Desktop/wordle-data-repository/l2.svg", b];
Export["~/Desktop/wordle-data-repository/l3.svg", c];
{k, v} = {DateString /@ Keys@rawData,
KeyMap[CommonName, #] & /@ Values@rawData};
Export["~/Desktop/wordle-data-repository/data.xls",
{Prepend[
Table[Prepend[(Values@(Values /@ rawData))[[x]], k[[x]]], {x,
Length@k}], Prepend[(Keys@v)[[1]], ""]]}]
(*MapThread[Insert[#2, #1, 1]&, {k,Values/@v}]
{Prepend[MapThread[Insert[#2, #1, 1]&, {k,Values/@v}], Prepend[(Keys@v)[[1]], ""]]}*)