CMU Coding Bootcamp
1from cmu_graphics.cmu_graphics import AppWrapper, app, runApp
2from cmu_graphics import *
3from random import choice
4from typing import List
5
6
7def onAppStart(app_inst: AppWrapper):
8 app_inst.word = getWord()
9 app_inst.guesses = [
10 ["", "", "", "", ""],
11 ["", "", "", "", ""],
12 ["", "", "", "", ""],
13 ["", "", "", "", ""],
14 ["", "", "", "", ""],
15 ["", "", "", "", ""],
16 ]
17 app_inst.invalid_word = False
18 app_inst.current_guess = 0
19 app_inst.game_over = False
20
21
22def wordHistory(app_inst: AppWrapper):
23 return ["".join(guess) for guess in app_inst.guesses[: app_inst.current_guess]]
24
25
26def onKeyPress(app_inst: AppWrapper, key):
27 guess = (
28 app_inst.guesses[app_inst.current_guess] if app_inst.current_guess < 6 else [""]
29 )
30 if key == "backspace":
31 app_inst.invalid_word = False
32 current_letter = guess.index("") if guess[4] == "" else 5
33 app_inst.guesses[app_inst.current_guess][current_letter - 1] = ""
34 elif key == "enter":
35 if "".join(guess) not in getWords() or "".join(guess) in wordHistory(app_inst):
36 app_inst.invalid_word = True
37 return
38 if app_inst.current_guess <= 6:
39 app_inst.current_guess += 1
40 if "".join(guess) == app_inst.word or app_inst.current_guess == 6:
41 app_inst.game_over = True
42 elif key == "r" and app_inst.game_over:
43 onAppStart(app_inst)
44 elif len(key) == 1 and key.isalpha():
45 current_letter = guess.index("") if guess[4] == "" else 4
46 app_inst.guesses[app_inst.current_guess][current_letter] = key.lower()
47
48
49def letterCount(word):
50 letter_count = {}
51 for letter in word:
52 if letter == "":
53 continue
54 letter_count[letter] = letter_count.get(letter, 0) + 1
55 return letter_count
56
57
58def checkWord(app_inst: AppWrapper, word: List[str], index):
59 if not index < app_inst.current_guess:
60 if app_inst.invalid_word:
61 return ["red", "red", "red", "red", "red"]
62 return ["white", "white", "white", "white", "white"]
63 letter_colors = ["gray", "gray", "gray", "gray", "gray"]
64 correct_letter_count = letterCount(app_inst.word)
65 for i, letter in enumerate(word):
66 if letter == app_inst.word[i]:
67 correct_letter_count[letter] -= 1
68 letter_colors[i] = "green"
69 for i, letter in enumerate(word):
70 if letter in app_inst.word and correct_letter_count[letter] >= 1:
71 letter_colors[i] = "yellow"
72 correct_letter_count[letter] -= 1
73 return letter_colors
74
75
76def drawCell(app_inst: AppWrapper, x, y, letter, color):
77 cell_size = (app_inst.width - 150) / 5
78 drawRect(
79 x - cell_size / 2,
80 y - cell_size / 2,
81 cell_size,
82 cell_size,
83 fill=color,
84 border="black",
85 borderWidth=1,
86 )
87 drawLabel(letter.upper(), x, y, size=cell_size * 0.8)
88
89
90def redrawAll(app_inst: AppWrapper):
91 padding = 8
92 x_play_area = app_inst.width - 150
93 y_play_area = app_inst.height - 100
94 x_center = x_play_area / 2
95 y_center = y_play_area / 2
96 x_border = x_center - (x_play_area / 10) - (padding * 2.5)
97 y_border = y_center - (y_play_area / 4) - (padding * 3)
98 for i, guess in enumerate(app_inst.guesses):
99 if i > app_inst.current_guess:
100 continue
101 word_colors = checkWord(app_inst, guess, i)
102 for j, letter in enumerate(guess):
103 x_cell_center = x_border + (x_play_area / 5 + padding) * j
104 y_cell_center = y_border + (y_play_area / 6 + padding) * i
105 drawCell(app_inst, x_cell_center, y_cell_center, letter, word_colors[j])
106 guess = "".join(app_inst.guesses[app_inst.current_guess - 1])
107 if app_inst.game_over:
108 text = "Game Over :("
109 if guess == app_inst.word:
110 text = "You Win!"
111 drawRect(
112 app_inst.width / 2 - 150,
113 app_inst.height / 2 - 50,
114 300,
115 100,
116 fill="white",
117 border="black",
118 borderWidth=1,
119 )
120 drawLabel(text, app_inst.width / 2, app_inst.height / 2, size=32)
121
122
123def getWord():
124 # Return a random wordle word
125 # words from: https://www.wordunscrambler.net/word-list/wordle-word-list
126 words = getWords()
127 return choice(words)
128
129
130def getWords():
131 # Return a list of all 2309 wordle words
132 # words from: https://www.wordunscrambler.net/word-list/wordle-word-list
133 words = [
134 "aback",
135 "abase",
136 "abate",
137 "abbey",
138 "abbot",
139 "abhor",
140 "abide",
141 "abled",
142 "abode",
143 "abort",
144 "about",
145 "above",
146 "abuse",
147 "abyss",
148 "acorn",
149 "acrid",
150 "actor",
151 "acute",
152 "adage",
153 "adapt",
154 "adept",
155 "admin",
156 "admit",
157 "adobe",
158 "adopt",
159 "adore",
160 "adorn",
161 "adult",
162 "affix",
163 "afire",
164 "afoot",
165 "afoul",
166 "after",
167 "again",
168 "agape",
169 "agate",
170 "agent",
171 "agile",
172 "aging",
173 "aglow",
174 "agony",
175 "agree",
176 "ahead",
177 "aider",
178 "aisle",
179 "alarm",
180 "album",
181 "alert",
182 "algae",
183 "alibi",
184 "alien",
185 "align",
186 "alike",
187 "alive",
188 "allay",
189 "alley",
190 "allot",
191 "allow",
192 "alloy",
193 "aloft",
194 "alone",
195 "along",
196 "aloof",
197 "aloud",
198 "alpha",
199 "altar",
200 "alter",
201 "amass",
202 "amaze",
203 "amber",
204 "amble",
205 "amend",
206 "amiss",
207 "amity",
208 "among",
209 "ample",
210 "amply",
211 "amuse",
212 "angel",
213 "anger",
214 "angle",
215 "angry",
216 "angst",
217 "anime",
218 "ankle",
219 "annex",
220 "annoy",
221 "annul",
222 "anode",
223 "antic",
224 "anvil",
225 "aorta",
226 "apart",
227 "aphid",
228 "aping",
229 "apnea",
230 "apple",
231 "apply",
232 "apron",
233 "aptly",
234 "arbor",
235 "ardor",
236 "arena",
237 "argue",
238 "arise",
239 "armor",
240 "aroma",
241 "arose",
242 "array",
243 "arrow",
244 "arson",
245 "artsy",
246 "ascot",
247 "ashen",
248 "aside",
249 "askew",
250 "assay",
251 "asset",
252 "atoll",
253 "atone",
254 "attic",
255 "audio",
256 "audit",
257 "augur",
258 "aunty",
259 "avail",
260 "avert",
261 "avian",
262 "avoid",
263 "await",
264 "awake",
265 "award",
266 "aware",
267 "awash",
268 "awful",
269 "awoke",
270 "axial",
271 "axiom",
272 "axion",
273 "azure",
274 "bacon",
275 "badge",
276 "badly",
277 "bagel",
278 "baggy",
279 "baker",
280 "baler",
281 "balmy",
282 "banal",
283 "banjo",
284 "barge",
285 "baron",
286 "basal",
287 "basic",
288 "basil",
289 "basin",
290 "basis",
291 "baste",
292 "batch",
293 "bathe",
294 "baton",
295 "batty",
296 "bawdy",
297 "bayou",
298 "beach",
299 "beady",
300 "beard",
301 "beast",
302 "beech",
303 "beefy",
304 "befit",
305 "began",
306 "begat",
307 "beget",
308 "begin",
309 "begun",
310 "being",
311 "belch",
312 "belie",
313 "belle",
314 "belly",
315 "below",
316 "bench",
317 "beret",
318 "berry",
319 "berth",
320 "beset",
321 "betel",
322 "bevel",
323 "bezel",
324 "bible",
325 "bicep",
326 "biddy",
327 "bigot",
328 "bilge",
329 "billy",
330 "binge",
331 "bingo",
332 "biome",
333 "birch",
334 "birth",
335 "bison",
336 "bitty",
337 "black",
338 "blade",
339 "blame",
340 "bland",
341 "blank",
342 "blare",
343 "blast",
344 "blaze",
345 "bleak",
346 "bleat",
347 "bleed",
348 "bleep",
349 "blend",
350 "bless",
351 "blimp",
352 "blind",
353 "blink",
354 "bliss",
355 "blitz",
356 "bloat",
357 "block",
358 "bloke",
359 "blond",
360 "blood",
361 "bloom",
362 "blown",
363 "bluer",
364 "bluff",
365 "blunt",
366 "blurb",
367 "blurt",
368 "blush",
369 "board",
370 "boast",
371 "bobby",
372 "boney",
373 "bongo",
374 "bonus",
375 "booby",
376 "boost",
377 "booth",
378 "booty",
379 "booze",
380 "boozy",
381 "borax",
382 "borne",
383 "bosom",
384 "bossy",
385 "botch",
386 "bough",
387 "boule",
388 "bound",
389 "bowel",
390 "boxer",
391 "brace",
392 "braid",
393 "brain",
394 "brake",
395 "brand",
396 "brash",
397 "brass",
398 "brave",
399 "bravo",
400 "brawl",
401 "brawn",
402 "bread",
403 "break",
404 "breed",
405 "briar",
406 "bribe",
407 "brick",
408 "bride",
409 "brief",
410 "brine",
411 "bring",
412 "brink",
413 "briny",
414 "brisk",
415 "broad",
416 "broil",
417 "broke",
418 "brood",
419 "brook",
420 "broom",
421 "broth",
422 "brown",
423 "brunt",
424 "brush",
425 "brute",
426 "buddy",
427 "budge",
428 "buggy",
429 "bugle",
430 "build",
431 "built",
432 "bulge",
433 "bulky",
434 "bully",
435 "bunch",
436 "bunny",
437 "burly",
438 "burnt",
439 "burst",
440 "bused",
441 "bushy",
442 "butch",
443 "butte",
444 "buxom",
445 "buyer",
446 "bylaw",
447 "cabal",
448 "cabby",
449 "cabin",
450 "cable",
451 "cacao",
452 "cache",
453 "cacti",
454 "caddy",
455 "cadet",
456 "cagey",
457 "cairn",
458 "camel",
459 "cameo",
460 "canal",
461 "candy",
462 "canny",
463 "canoe",
464 "canon",
465 "caper",
466 "caput",
467 "carat",
468 "cargo",
469 "carol",
470 "carry",
471 "carve",
472 "caste",
473 "catch",
474 "cater",
475 "catty",
476 "caulk",
477 "cause",
478 "cavil",
479 "cease",
480 "cedar",
481 "cello",
482 "chafe",
483 "chaff",
484 "chain",
485 "chair",
486 "chalk",
487 "champ",
488 "chant",
489 "chaos",
490 "chard",
491 "charm",
492 "chart",
493 "chase",
494 "chasm",
495 "cheap",
496 "cheat",
497 "check",
498 "cheek",
499 "cheer",
500 "chess",
501 "chest",
502 "chick",
503 "chide",
504 "chief",
505 "child",
506 "chili",
507 "chill",
508 "chime",
509 "china",
510 "chirp",
511 "chock",
512 "choir",
513 "choke",
514 "chord",
515 "chore",
516 "chose",
517 "chuck",
518 "chump",
519 "chunk",
520 "churn",
521 "chute",
522 "cider",
523 "cigar",
524 "cinch",
525 "circa",
526 "civic",
527 "civil",
528 "clack",
529 "claim",
530 "clamp",
531 "clang",
532 "clank",
533 "clash",
534 "clasp",
535 "class",
536 "clean",
537 "clear",
538 "cleat",
539 "cleft",
540 "clerk",
541 "click",
542 "cliff",
543 "climb",
544 "cling",
545 "clink",
546 "cloak",
547 "clock",
548 "clone",
549 "close",
550 "cloth",
551 "cloud",
552 "clout",
553 "clove",
554 "clown",
555 "cluck",
556 "clued",
557 "clump",
558 "clung",
559 "coach",
560 "coast",
561 "cobra",
562 "cocoa",
563 "colon",
564 "color",
565 "comet",
566 "comfy",
567 "comic",
568 "comma",
569 "conch",
570 "condo",
571 "conic",
572 "copse",
573 "coral",
574 "corer",
575 "corny",
576 "couch",
577 "cough",
578 "could",
579 "count",
580 "coupe",
581 "court",
582 "coven",
583 "cover",
584 "covet",
585 "covey",
586 "cower",
587 "coyly",
588 "crack",
589 "craft",
590 "cramp",
591 "crane",
592 "crank",
593 "crash",
594 "crass",
595 "crate",
596 "crave",
597 "crawl",
598 "craze",
599 "crazy",
600 "creak",
601 "cream",
602 "credo",
603 "creed",
604 "creek",
605 "creep",
606 "creme",
607 "crepe",
608 "crept",
609 "cress",
610 "crest",
611 "crick",
612 "cried",
613 "crier",
614 "crime",
615 "crimp",
616 "crisp",
617 "croak",
618 "crock",
619 "crone",
620 "crony",
621 "crook",
622 "cross",
623 "croup",
624 "crowd",
625 "crown",
626 "crude",
627 "cruel",
628 "crumb",
629 "crump",
630 "crush",
631 "crust",
632 "crypt",
633 "cubic",
634 "cumin",
635 "curio",
636 "curly",
637 "curry",
638 "curse",
639 "curve",
640 "curvy",
641 "cutie",
642 "cyber",
643 "cycle",
644 "cynic",
645 "daddy",
646 "daily",
647 "dairy",
648 "daisy",
649 "dally",
650 "dance",
651 "dandy",
652 "datum",
653 "daunt",
654 "dealt",
655 "death",
656 "debar",
657 "debit",
658 "debug",
659 "debut",
660 "decal",
661 "decay",
662 "decor",
663 "decoy",
664 "decry",
665 "defer",
666 "deign",
667 "deity",
668 "delay",
669 "delta",
670 "delve",
671 "demon",
672 "demur",
673 "denim",
674 "dense",
675 "depot",
676 "depth",
677 "derby",
678 "deter",
679 "detox",
680 "deuce",
681 "devil",
682 "diary",
683 "dicey",
684 "digit",
685 "dilly",
686 "dimly",
687 "diner",
688 "dingo",
689 "dingy",
690 "diode",
691 "dirge",
692 "dirty",
693 "disco",
694 "ditch",
695 "ditto",
696 "ditty",
697 "diver",
698 "dizzy",
699 "dodge",
700 "dodgy",
701 "dogma",
702 "doing",
703 "dolly",
704 "donor",
705 "donut",
706 "dopey",
707 "doubt",
708 "dough",
709 "dowdy",
710 "dowel",
711 "downy",
712 "dowry",
713 "dozen",
714 "draft",
715 "drain",
716 "drake",
717 "drama",
718 "drank",
719 "drape",
720 "drawl",
721 "drawn",
722 "dread",
723 "dream",
724 "dress",
725 "dried",
726 "drier",
727 "drift",
728 "drill",
729 "drink",
730 "drive",
731 "droit",
732 "droll",
733 "drone",
734 "drool",
735 "droop",
736 "dross",
737 "drove",
738 "drown",
739 "druid",
740 "drunk",
741 "dryer",
742 "dryly",
743 "duchy",
744 "dully",
745 "dummy",
746 "dumpy",
747 "dunce",
748 "dusky",
749 "dusty",
750 "dutch",
751 "duvet",
752 "dwarf",
753 "dwell",
754 "dwelt",
755 "dying",
756 "eager",
757 "eagle",
758 "early",
759 "earth",
760 "easel",
761 "eaten",
762 "eater",
763 "ebony",
764 "eclat",
765 "edict",
766 "edify",
767 "eerie",
768 "egret",
769 "eight",
770 "eject",
771 "eking",
772 "elate",
773 "elbow",
774 "elder",
775 "elect",
776 "elegy",
777 "elfin",
778 "elide",
779 "elite",
780 "elope",
781 "elude",
782 "email",
783 "embed",
784 "ember",
785 "emcee",
786 "empty",
787 "enact",
788 "endow",
789 "enema",
790 "enemy",
791 "enjoy",
792 "ennui",
793 "ensue",
794 "enter",
795 "entry",
796 "envoy",
797 "epoch",
798 "epoxy",
799 "equal",
800 "equip",
801 "erase",
802 "erect",
803 "erode",
804 "error",
805 "erupt",
806 "essay",
807 "ester",
808 "ether",
809 "ethic",
810 "ethos",
811 "etude",
812 "evade",
813 "event",
814 "every",
815 "evict",
816 "evoke",
817 "exact",
818 "exalt",
819 "excel",
820 "exert",
821 "exile",
822 "exist",
823 "expel",
824 "extol",
825 "extra",
826 "exult",
827 "eying",
828 "fable",
829 "facet",
830 "faint",
831 "fairy",
832 "faith",
833 "false",
834 "fancy",
835 "fanny",
836 "farce",
837 "fatal",
838 "fatty",
839 "fault",
840 "fauna",
841 "favor",
842 "feast",
843 "fecal",
844 "feign",
845 "fella",
846 "felon",
847 "femme",
848 "femur",
849 "fence",
850 "feral",
851 "ferry",
852 "fetal",
853 "fetch",
854 "fetid",
855 "fetus",
856 "fever",
857 "fewer",
858 "fiber",
859 "ficus",
860 "field",
861 "fiend",
862 "fiery",
863 "fifth",
864 "fifty",
865 "fight",
866 "filer",
867 "filet",
868 "filly",
869 "filmy",
870 "filth",
871 "final",
872 "finch",
873 "finer",
874 "first",
875 "fishy",
876 "fixer",
877 "fizzy",
878 "fjord",
879 "flack",
880 "flail",
881 "flair",
882 "flake",
883 "flaky",
884 "flame",
885 "flank",
886 "flare",
887 "flash",
888 "flask",
889 "fleck",
890 "fleet",
891 "flesh",
892 "flick",
893 "flier",
894 "fling",
895 "flint",
896 "flirt",
897 "float",
898 "flock",
899 "flood",
900 "floor",
901 "flora",
902 "floss",
903 "flour",
904 "flout",
905 "flown",
906 "fluff",
907 "fluid",
908 "fluke",
909 "flume",
910 "flung",
911 "flunk",
912 "flush",
913 "flute",
914 "flyer",
915 "foamy",
916 "focal",
917 "focus",
918 "foggy",
919 "foist",
920 "folio",
921 "folly",
922 "foray",
923 "force",
924 "forge",
925 "forgo",
926 "forte",
927 "forth",
928 "forty",
929 "forum",
930 "found",
931 "foyer",
932 "frail",
933 "frame",
934 "frank",
935 "fraud",
936 "freak",
937 "freed",
938 "freer",
939 "fresh",
940 "friar",
941 "fried",
942 "frill",
943 "frisk",
944 "fritz",
945 "frock",
946 "frond",
947 "front",
948 "frost",
949 "froth",
950 "frown",
951 "froze",
952 "fruit",
953 "fudge",
954 "fugue",
955 "fully",
956 "fungi",
957 "funky",
958 "funny",
959 "furor",
960 "furry",
961 "fussy",
962 "fuzzy",
963 "gaffe",
964 "gaily",
965 "gamer",
966 "gamma",
967 "gamut",
968 "gassy",
969 "gaudy",
970 "gauge",
971 "gaunt",
972 "gauze",
973 "gavel",
974 "gawky",
975 "gayer",
976 "gayly",
977 "gazer",
978 "gecko",
979 "geeky",
980 "geese",
981 "genie",
982 "genre",
983 "ghost",
984 "ghoul",
985 "giant",
986 "giddy",
987 "gipsy",
988 "girly",
989 "girth",
990 "given",
991 "giver",
992 "glade",
993 "gland",
994 "glare",
995 "glass",
996 "glaze",
997 "gleam",
998 "glean",
999 "glide",
1000 "glint",
1001 "gloat",
1002 "globe",
1003 "gloom",
1004 "glory",
1005 "gloss",
1006 "glove",
1007 "glyph",
1008 "gnash",
1009 "gnome",
1010 "godly",
1011 "going",
1012 "golem",
1013 "golly",
1014 "gonad",
1015 "goner",
1016 "goody",
1017 "gooey",
1018 "goofy",
1019 "goose",
1020 "gorge",
1021 "gouge",
1022 "gourd",
1023 "grace",
1024 "grade",
1025 "graft",
1026 "grail",
1027 "grain",
1028 "grand",
1029 "grant",
1030 "grape",
1031 "graph",
1032 "grasp",
1033 "grass",
1034 "grate",
1035 "grave",
1036 "gravy",
1037 "graze",
1038 "great",
1039 "greed",
1040 "green",
1041 "greet",
1042 "grief",
1043 "grill",
1044 "grime",
1045 "grimy",
1046 "grind",
1047 "gripe",
1048 "groan",
1049 "groin",
1050 "groom",
1051 "grope",
1052 "gross",
1053 "group",
1054 "grout",
1055 "grove",
1056 "growl",
1057 "grown",
1058 "gruel",
1059 "gruff",
1060 "grunt",
1061 "guard",
1062 "guava",
1063 "guess",
1064 "guest",
1065 "guide",
1066 "guild",
1067 "guile",
1068 "guilt",
1069 "guise",
1070 "gulch",
1071 "gully",
1072 "gumbo",
1073 "gummy",
1074 "guppy",
1075 "gusto",
1076 "gusty",
1077 "gypsy",
1078 "habit",
1079 "hairy",
1080 "halve",
1081 "handy",
1082 "happy",
1083 "hardy",
1084 "harem",
1085 "harpy",
1086 "harry",
1087 "harsh",
1088 "haste",
1089 "hasty",
1090 "hatch",
1091 "hater",
1092 "haunt",
1093 "haute",
1094 "haven",
1095 "havoc",
1096 "hazel",
1097 "heady",
1098 "heard",
1099 "heart",
1100 "heath",
1101 "heave",
1102 "heavy",
1103 "hedge",
1104 "hefty",
1105 "heist",
1106 "helix",
1107 "hello",
1108 "hence",
1109 "heron",
1110 "hilly",
1111 "hinge",
1112 "hippo",
1113 "hippy",
1114 "hitch",
1115 "hoard",
1116 "hobby",
1117 "hoist",
1118 "holly",
1119 "homer",
1120 "honey",
1121 "honor",
1122 "horde",
1123 "horny",
1124 "horse",
1125 "hotel",
1126 "hotly",
1127 "hound",
1128 "house",
1129 "hovel",
1130 "hover",
1131 "howdy",
1132 "human",
1133 "humid",
1134 "humor",
1135 "humph",
1136 "humus",
1137 "hunch",
1138 "hunky",
1139 "hurry",
1140 "husky",
1141 "hussy",
1142 "hutch",
1143 "hydro",
1144 "hyena",
1145 "hymen",
1146 "hyper",
1147 "icily",
1148 "icing",
1149 "ideal",
1150 "idiom",
1151 "idiot",
1152 "idler",
1153 "idyll",
1154 "igloo",
1155 "iliac",
1156 "image",
1157 "imbue",
1158 "impel",
1159 "imply",
1160 "inane",
1161 "inbox",
1162 "incur",
1163 "index",
1164 "inept",
1165 "inert",
1166 "infer",
1167 "ingot",
1168 "inlay",
1169 "inlet",
1170 "inner",
1171 "input",
1172 "inter",
1173 "intro",
1174 "ionic",
1175 "irate",
1176 "irony",
1177 "islet",
1178 "issue",
1179 "itchy",
1180 "ivory",
1181 "jaunt",
1182 "jazzy",
1183 "jelly",
1184 "jerky",
1185 "jetty",
1186 "jewel",
1187 "jiffy",
1188 "joint",
1189 "joist",
1190 "joker",
1191 "jolly",
1192 "joust",
1193 "judge",
1194 "juice",
1195 "juicy",
1196 "jumbo",
1197 "jumpy",
1198 "junta",
1199 "junto",
1200 "juror",
1201 "kappa",
1202 "karma",
1203 "kayak",
1204 "kebab",
1205 "khaki",
1206 "kinky",
1207 "kiosk",
1208 "kitty",
1209 "knack",
1210 "knave",
1211 "knead",
1212 "kneed",
1213 "kneel",
1214 "knelt",
1215 "knife",
1216 "knock",
1217 "knoll",
1218 "known",
1219 "koala",
1220 "krill",
1221 "label",
1222 "labor",
1223 "laden",
1224 "ladle",
1225 "lager",
1226 "lance",
1227 "lanky",
1228 "lapel",
1229 "lapse",
1230 "large",
1231 "larva",
1232 "lasso",
1233 "latch",
1234 "later",
1235 "lathe",
1236 "latte",
1237 "laugh",
1238 "layer",
1239 "leach",
1240 "leafy",
1241 "leaky",
1242 "leant",
1243 "leapt",
1244 "learn",
1245 "lease",
1246 "leash",
1247 "least",
1248 "leave",
1249 "ledge",
1250 "leech",
1251 "leery",
1252 "lefty",
1253 "legal",
1254 "leggy",
1255 "lemon",
1256 "lemur",
1257 "leper",
1258 "level",
1259 "lever",
1260 "libel",
1261 "liege",
1262 "light",
1263 "liken",
1264 "lilac",
1265 "limbo",
1266 "limit",
1267 "linen",
1268 "liner",
1269 "lingo",
1270 "lipid",
1271 "lithe",
1272 "liver",
1273 "livid",
1274 "llama",
1275 "loamy",
1276 "loath",
1277 "lobby",
1278 "local",
1279 "locus",
1280 "lodge",
1281 "lofty",
1282 "logic",
1283 "login",
1284 "loopy",
1285 "loose",
1286 "lorry",
1287 "loser",
1288 "louse",
1289 "lousy",
1290 "lover",
1291 "lower",
1292 "lowly",
1293 "loyal",
1294 "lucid",
1295 "lucky",
1296 "lumen",
1297 "lumpy",
1298 "lunar",
1299 "lunch",
1300 "lunge",
1301 "lupus",
1302 "lurch",
1303 "lurid",
1304 "lusty",
1305 "lying",
1306 "lymph",
1307 "lyric",
1308 "macaw",
1309 "macho",
1310 "macro",
1311 "madam",
1312 "madly",
1313 "mafia",
1314 "magic",
1315 "magma",
1316 "maize",
1317 "major",
1318 "maker",
1319 "mambo",
1320 "mamma",
1321 "mammy",
1322 "manga",
1323 "mange",
1324 "mango",
1325 "mangy",
1326 "mania",
1327 "manic",
1328 "manly",
1329 "manor",
1330 "maple",
1331 "march",
1332 "marry",
1333 "marsh",
1334 "mason",
1335 "masse",
1336 "match",
1337 "matey",
1338 "mauve",
1339 "maxim",
1340 "maybe",
1341 "mayor",
1342 "mealy",
1343 "meant",
1344 "meaty",
1345 "mecca",
1346 "medal",
1347 "media",
1348 "medic",
1349 "melee",
1350 "melon",
1351 "mercy",
1352 "merge",
1353 "merit",
1354 "merry",
1355 "metal",
1356 "meter",
1357 "metro",
1358 "micro",
1359 "midge",
1360 "midst",
1361 "might",
1362 "milky",
1363 "mimic",
1364 "mince",
1365 "miner",
1366 "minim",
1367 "minor",
1368 "minty",
1369 "minus",
1370 "mirth",
1371 "miser",
1372 "missy",
1373 "mocha",
1374 "modal",
1375 "model",
1376 "modem",
1377 "mogul",
1378 "moist",
1379 "molar",
1380 "moldy",
1381 "money",
1382 "month",
1383 "moody",
1384 "moose",
1385 "moral",
1386 "moron",
1387 "morph",
1388 "mossy",
1389 "motel",
1390 "motif",
1391 "motor",
1392 "motto",
1393 "moult",
1394 "mound",
1395 "mount",
1396 "mourn",
1397 "mouse",
1398 "mouth",
1399 "mover",
1400 "movie",
1401 "mower",
1402 "mucky",
1403 "mucus",
1404 "muddy",
1405 "mulch",
1406 "mummy",
1407 "munch",
1408 "mural",
1409 "murky",
1410 "mushy",
1411 "music",
1412 "musky",
1413 "musty",
1414 "myrrh",
1415 "nadir",
1416 "naive",
1417 "nanny",
1418 "nasal",
1419 "nasty",
1420 "natal",
1421 "naval",
1422 "navel",
1423 "needy",
1424 "neigh",
1425 "nerdy",
1426 "nerve",
1427 "never",
1428 "newer",
1429 "newly",
1430 "nicer",
1431 "niche",
1432 "niece",
1433 "night",
1434 "ninja",
1435 "ninny",
1436 "ninth",
1437 "noble",
1438 "nobly",
1439 "noise",
1440 "noisy",
1441 "nomad",
1442 "noose",
1443 "north",
1444 "nosey",
1445 "notch",
1446 "novel",
1447 "nudge",
1448 "nurse",
1449 "nutty",
1450 "nylon",
1451 "nymph",
1452 "oaken",
1453 "obese",
1454 "occur",
1455 "ocean",
1456 "octal",
1457 "octet",
1458 "odder",
1459 "oddly",
1460 "offal",
1461 "offer",
1462 "often",
1463 "olden",
1464 "older",
1465 "olive",
1466 "ombre",
1467 "omega",
1468 "onion",
1469 "onset",
1470 "opera",
1471 "opine",
1472 "opium",
1473 "optic",
1474 "orbit",
1475 "order",
1476 "organ",
1477 "other",
1478 "otter",
1479 "ought",
1480 "ounce",
1481 "outdo",
1482 "outer",
1483 "outgo",
1484 "ovary",
1485 "ovate",
1486 "overt",
1487 "ovine",
1488 "ovoid",
1489 "owing",
1490 "owner",
1491 "oxide",
1492 "ozone",
1493 "paddy",
1494 "pagan",
1495 "paint",
1496 "paler",
1497 "palsy",
1498 "panel",
1499 "panic",
1500 "pansy",
1501 "papal",
1502 "paper",
1503 "parer",
1504 "parka",
1505 "parry",
1506 "parse",
1507 "party",
1508 "pasta",
1509 "paste",
1510 "pasty",
1511 "patch",
1512 "patio",
1513 "patsy",
1514 "patty",
1515 "pause",
1516 "payee",
1517 "payer",
1518 "peace",
1519 "peach",
1520 "pearl",
1521 "pecan",
1522 "pedal",
1523 "penal",
1524 "pence",
1525 "penne",
1526 "penny",
1527 "perch",
1528 "peril",
1529 "perky",
1530 "pesky",
1531 "pesto",
1532 "petal",
1533 "petty",
1534 "phase",
1535 "phone",
1536 "phony",
1537 "photo",
1538 "piano",
1539 "picky",
1540 "piece",
1541 "piety",
1542 "piggy",
1543 "pilot",
1544 "pinch",
1545 "piney",
1546 "pinky",
1547 "pinto",
1548 "piper",
1549 "pique",
1550 "pitch",
1551 "pithy",
1552 "pivot",
1553 "pixel",
1554 "pixie",
1555 "pizza",
1556 "place",
1557 "plaid",
1558 "plain",
1559 "plait",
1560 "plane",
1561 "plank",
1562 "plant",
1563 "plate",
1564 "plaza",
1565 "plead",
1566 "pleat",
1567 "plied",
1568 "plier",
1569 "pluck",
1570 "plumb",
1571 "plume",
1572 "plump",
1573 "plunk",
1574 "plush",
1575 "poesy",
1576 "point",
1577 "poise",
1578 "poker",
1579 "polar",
1580 "polka",
1581 "polyp",
1582 "pooch",
1583 "poppy",
1584 "porch",
1585 "poser",
1586 "posit",
1587 "posse",
1588 "pouch",
1589 "pound",
1590 "pouty",
1591 "power",
1592 "prank",
1593 "prawn",
1594 "preen",
1595 "press",
1596 "price",
1597 "prick",
1598 "pride",
1599 "pried",
1600 "prime",
1601 "primo",
1602 "print",
1603 "prior",
1604 "prism",
1605 "privy",
1606 "prize",
1607 "probe",
1608 "prone",
1609 "prong",
1610 "proof",
1611 "prose",
1612 "proud",
1613 "prove",
1614 "prowl",
1615 "proxy",
1616 "prude",
1617 "prune",
1618 "psalm",
1619 "pubic",
1620 "pudgy",
1621 "puffy",
1622 "pulpy",
1623 "pulse",
1624 "punch",
1625 "pupil",
1626 "puppy",
1627 "puree",
1628 "purer",
1629 "purge",
1630 "purse",
1631 "pushy",
1632 "putty",
1633 "pygmy",
1634 "quack",
1635 "quail",
1636 "quake",
1637 "qualm",
1638 "quark",
1639 "quart",
1640 "quash",
1641 "quasi",
1642 "queen",
1643 "queer",
1644 "quell",
1645 "query",
1646 "quest",
1647 "queue",
1648 "quick",
1649 "quiet",
1650 "quill",
1651 "quilt",
1652 "quirk",
1653 "quite",
1654 "quota",
1655 "quote",
1656 "quoth",
1657 "rabbi",
1658 "rabid",
1659 "racer",
1660 "radar",
1661 "radii",
1662 "radio",
1663 "rainy",
1664 "raise",
1665 "rajah",
1666 "rally",
1667 "ralph",
1668 "ramen",
1669 "ranch",
1670 "randy",
1671 "range",
1672 "rapid",
1673 "rarer",
1674 "raspy",
1675 "ratio",
1676 "ratty",
1677 "raven",
1678 "rayon",
1679 "razor",
1680 "reach",
1681 "react",
1682 "ready",
1683 "realm",
1684 "rearm",
1685 "rebar",
1686 "rebel",
1687 "rebus",
1688 "rebut",
1689 "recap",
1690 "recur",
1691 "recut",
1692 "reedy",
1693 "refer",
1694 "refit",
1695 "regal",
1696 "rehab",
1697 "reign",
1698 "relax",
1699 "relay",
1700 "relic",
1701 "remit",
1702 "renal",
1703 "renew",
1704 "repay",
1705 "repel",
1706 "reply",
1707 "rerun",
1708 "reset",
1709 "resin",
1710 "retch",
1711 "retro",
1712 "retry",
1713 "reuse",
1714 "revel",
1715 "revue",
1716 "rhino",
1717 "rhyme",
1718 "rider",
1719 "ridge",
1720 "rifle",
1721 "right",
1722 "rigid",
1723 "rigor",
1724 "rinse",
1725 "ripen",
1726 "riper",
1727 "risen",
1728 "riser",
1729 "risky",
1730 "rival",
1731 "river",
1732 "rivet",
1733 "roach",
1734 "roast",
1735 "robin",
1736 "robot",
1737 "rocky",
1738 "rodeo",
1739 "roger",
1740 "rogue",
1741 "roomy",
1742 "roost",
1743 "rotor",
1744 "rouge",
1745 "rough",
1746 "round",
1747 "rouse",
1748 "route",
1749 "rover",
1750 "rowdy",
1751 "rower",
1752 "royal",
1753 "ruddy",
1754 "ruder",
1755 "rugby",
1756 "ruler",
1757 "rumba",
1758 "rumor",
1759 "rupee",
1760 "rural",
1761 "rusty",
1762 "sadly",
1763 "safer",
1764 "saint",
1765 "salad",
1766 "sally",
1767 "salon",
1768 "salsa",
1769 "salty",
1770 "salve",
1771 "salvo",
1772 "sandy",
1773 "saner",
1774 "sappy",
1775 "sassy",
1776 "satin",
1777 "satyr",
1778 "sauce",
1779 "saucy",
1780 "sauna",
1781 "saute",
1782 "savor",
1783 "savoy",
1784 "savvy",
1785 "scald",
1786 "scale",
1787 "scalp",
1788 "scaly",
1789 "scamp",
1790 "scant",
1791 "scare",
1792 "scarf",
1793 "scary",
1794 "scene",
1795 "scent",
1796 "scion",
1797 "scoff",
1798 "scold",
1799 "scone",
1800 "scoop",
1801 "scope",
1802 "score",
1803 "scorn",
1804 "scour",
1805 "scout",
1806 "scowl",
1807 "scram",
1808 "scrap",
1809 "scree",
1810 "screw",
1811 "scrub",
1812 "scrum",
1813 "scuba",
1814 "sedan",
1815 "seedy",
1816 "segue",
1817 "seize",
1818 "semen",
1819 "sense",
1820 "sepia",
1821 "serif",
1822 "serum",
1823 "serve",
1824 "setup",
1825 "seven",
1826 "sever",
1827 "sewer",
1828 "shack",
1829 "shade",
1830 "shady",
1831 "shaft",
1832 "shake",
1833 "shaky",
1834 "shale",
1835 "shall",
1836 "shalt",
1837 "shame",
1838 "shank",
1839 "shape",
1840 "shard",
1841 "share",
1842 "shark",
1843 "sharp",
1844 "shave",
1845 "shawl",
1846 "shear",
1847 "sheen",
1848 "sheep",
1849 "sheer",
1850 "sheet",
1851 "sheik",
1852 "shelf",
1853 "shell",
1854 "shied",
1855 "shift",
1856 "shine",
1857 "shiny",
1858 "shire",
1859 "shirk",
1860 "shirt",
1861 "shoal",
1862 "shock",
1863 "shone",
1864 "shook",
1865 "shoot",
1866 "shore",
1867 "shorn",
1868 "short",
1869 "shout",
1870 "shove",
1871 "shown",
1872 "showy",
1873 "shrew",
1874 "shrub",
1875 "shrug",
1876 "shuck",
1877 "shunt",
1878 "shush",
1879 "shyly",
1880 "siege",
1881 "sieve",
1882 "sight",
1883 "sigma",
1884 "silky",
1885 "silly",
1886 "since",
1887 "sinew",
1888 "singe",
1889 "siren",
1890 "sissy",
1891 "sixth",
1892 "sixty",
1893 "skate",
1894 "skier",
1895 "skiff",
1896 "skill",
1897 "skimp",
1898 "skirt",
1899 "skulk",
1900 "skull",
1901 "skunk",
1902 "slack",
1903 "slain",
1904 "slang",
1905 "slant",
1906 "slash",
1907 "slate",
1908 "sleek",
1909 "sleep",
1910 "sleet",
1911 "slept",
1912 "slice",
1913 "slick",
1914 "slide",
1915 "slime",
1916 "slimy",
1917 "sling",
1918 "slink",
1919 "sloop",
1920 "slope",
1921 "slosh",
1922 "sloth",
1923 "slump",
1924 "slung",
1925 "slunk",
1926 "slurp",
1927 "slush",
1928 "slyly",
1929 "smack",
1930 "small",
1931 "smart",
1932 "smash",
1933 "smear",
1934 "smell",
1935 "smelt",
1936 "smile",
1937 "smirk",
1938 "smite",
1939 "smith",
1940 "smock",
1941 "smoke",
1942 "smoky",
1943 "smote",
1944 "snack",
1945 "snail",
1946 "snake",
1947 "snaky",
1948 "snare",
1949 "snarl",
1950 "sneak",
1951 "sneer",
1952 "snide",
1953 "sniff",
1954 "snipe",
1955 "snoop",
1956 "snore",
1957 "snort",
1958 "snout",
1959 "snowy",
1960 "snuck",
1961 "snuff",
1962 "soapy",
1963 "sober",
1964 "soggy",
1965 "solar",
1966 "solid",
1967 "solve",
1968 "sonar",
1969 "sonic",
1970 "sooth",
1971 "sooty",
1972 "sorry",
1973 "sound",
1974 "south",
1975 "sower",
1976 "space",
1977 "spade",
1978 "spank",
1979 "spare",
1980 "spark",
1981 "spasm",
1982 "spawn",
1983 "speak",
1984 "spear",
1985 "speck",
1986 "speed",
1987 "spell",
1988 "spelt",
1989 "spend",
1990 "spent",
1991 "sperm",
1992 "spice",
1993 "spicy",
1994 "spied",
1995 "spiel",
1996 "spike",
1997 "spiky",
1998 "spill",
1999 "spilt",
2000 "spine",
2001 "spiny",
2002 "spire",
2003 "spite",
2004 "splat",
2005 "split",
2006 "spoil",
2007 "spoke",
2008 "spoof",
2009 "spook",
2010 "spool",
2011 "spoon",
2012 "spore",
2013 "sport",
2014 "spout",
2015 "spray",
2016 "spree",
2017 "sprig",
2018 "spunk",
2019 "spurn",
2020 "spurt",
2021 "squad",
2022 "squat",
2023 "squib",
2024 "stack",
2025 "staff",
2026 "stage",
2027 "staid",
2028 "stain",
2029 "stair",
2030 "stake",
2031 "stale",
2032 "stalk",
2033 "stall",
2034 "stamp",
2035 "stand",
2036 "stank",
2037 "stare",
2038 "stark",
2039 "start",
2040 "stash",
2041 "state",
2042 "stave",
2043 "stead",
2044 "steak",
2045 "steal",
2046 "steam",
2047 "steed",
2048 "steel",
2049 "steep",
2050 "steer",
2051 "stein",
2052 "stern",
2053 "stick",
2054 "stiff",
2055 "still",
2056 "stilt",
2057 "sting",
2058 "stink",
2059 "stint",
2060 "stock",
2061 "stoic",
2062 "stoke",
2063 "stole",
2064 "stomp",
2065 "stone",
2066 "stony",
2067 "stood",
2068 "stool",
2069 "stoop",
2070 "store",
2071 "stork",
2072 "storm",
2073 "story",
2074 "stout",
2075 "stove",
2076 "strap",
2077 "straw",
2078 "stray",
2079 "strip",
2080 "strut",
2081 "stuck",
2082 "study",
2083 "stuff",
2084 "stump",
2085 "stung",
2086 "stunk",
2087 "stunt",
2088 "style",
2089 "suave",
2090 "sugar",
2091 "suing",
2092 "suite",
2093 "sulky",
2094 "sully",
2095 "sumac",
2096 "sunny",
2097 "super",
2098 "surer",
2099 "surge",
2100 "surly",
2101 "sushi",
2102 "swami",
2103 "swamp",
2104 "swarm",
2105 "swash",
2106 "swath",
2107 "swear",
2108 "sweat",
2109 "sweep",
2110 "sweet",
2111 "swell",
2112 "swept",
2113 "swift",
2114 "swill",
2115 "swine",
2116 "swing",
2117 "swirl",
2118 "swish",
2119 "swoon",
2120 "swoop",
2121 "sword",
2122 "swore",
2123 "sworn",
2124 "swung",
2125 "synod",
2126 "syrup",
2127 "tabby",
2128 "table",
2129 "taboo",
2130 "tacit",
2131 "tacky",
2132 "taffy",
2133 "taint",
2134 "taken",
2135 "taker",
2136 "tally",
2137 "talon",
2138 "tamer",
2139 "tango",
2140 "tangy",
2141 "taper",
2142 "tapir",
2143 "tardy",
2144 "tarot",
2145 "taste",
2146 "tasty",
2147 "tatty",
2148 "taunt",
2149 "tawny",
2150 "teach",
2151 "teary",
2152 "tease",
2153 "teddy",
2154 "teeth",
2155 "tempo",
2156 "tenet",
2157 "tenor",
2158 "tense",
2159 "tenth",
2160 "tepee",
2161 "tepid",
2162 "terra",
2163 "terse",
2164 "testy",
2165 "thank",
2166 "theft",
2167 "their",
2168 "theme",
2169 "there",
2170 "these",
2171 "theta",
2172 "thick",
2173 "thief",
2174 "thigh",
2175 "thing",
2176 "think",
2177 "third",
2178 "thong",
2179 "thorn",
2180 "those",
2181 "three",
2182 "threw",
2183 "throb",
2184 "throw",
2185 "thrum",
2186 "thumb",
2187 "thump",
2188 "thyme",
2189 "tiara",
2190 "tibia",
2191 "tidal",
2192 "tiger",
2193 "tight",
2194 "tilde",
2195 "timer",
2196 "timid",
2197 "tipsy",
2198 "titan",
2199 "tithe",
2200 "title",
2201 "toast",
2202 "today",
2203 "toddy",
2204 "token",
2205 "tonal",
2206 "tonga",
2207 "tonic",
2208 "tooth",
2209 "topaz",
2210 "topic",
2211 "torch",
2212 "torso",
2213 "torus",
2214 "total",
2215 "totem",
2216 "touch",
2217 "tough",
2218 "towel",
2219 "tower",
2220 "toxic",
2221 "toxin",
2222 "trace",
2223 "track",
2224 "tract",
2225 "trade",
2226 "trail",
2227 "train",
2228 "trait",
2229 "tramp",
2230 "trash",
2231 "trawl",
2232 "tread",
2233 "treat",
2234 "trend",
2235 "triad",
2236 "trial",
2237 "tribe",
2238 "trice",
2239 "trick",
2240 "tried",
2241 "tripe",
2242 "trite",
2243 "troll",
2244 "troop",
2245 "trope",
2246 "trout",
2247 "trove",
2248 "truce",
2249 "truck",
2250 "truer",
2251 "truly",
2252 "trump",
2253 "trunk",
2254 "truss",
2255 "trust",
2256 "truth",
2257 "tryst",
2258 "tubal",
2259 "tuber",
2260 "tulip",
2261 "tulle",
2262 "tumor",
2263 "tunic",
2264 "turbo",
2265 "tutor",
2266 "twang",
2267 "tweak",
2268 "tweed",
2269 "tweet",
2270 "twice",
2271 "twine",
2272 "twirl",
2273 "twist",
2274 "twixt",
2275 "tying",
2276 "udder",
2277 "ulcer",
2278 "ultra",
2279 "umbra",
2280 "uncle",
2281 "uncut",
2282 "under",
2283 "undid",
2284 "undue",
2285 "unfed",
2286 "unfit",
2287 "unify",
2288 "union",
2289 "unite",
2290 "unity",
2291 "unlit",
2292 "unmet",
2293 "unset",
2294 "untie",
2295 "until",
2296 "unwed",
2297 "unzip",
2298 "upper",
2299 "upset",
2300 "urban",
2301 "urine",
2302 "usage",
2303 "usher",
2304 "using",
2305 "usual",
2306 "usurp",
2307 "utile",
2308 "utter",
2309 "vague",
2310 "valet",
2311 "valid",
2312 "valor",
2313 "value",
2314 "valve",
2315 "vapid",
2316 "vapor",
2317 "vault",
2318 "vaunt",
2319 "vegan",
2320 "venom",
2321 "venue",
2322 "verge",
2323 "verse",
2324 "verso",
2325 "verve",
2326 "vicar",
2327 "video",
2328 "vigil",
2329 "vigor",
2330 "villa",
2331 "vinyl",
2332 "viola",
2333 "viper",
2334 "viral",
2335 "virus",
2336 "visit",
2337 "visor",
2338 "vista",
2339 "vital",
2340 "vivid",
2341 "vixen",
2342 "vocal",
2343 "vodka",
2344 "vogue",
2345 "voice",
2346 "voila",
2347 "vomit",
2348 "voter",
2349 "vouch",
2350 "vowel",
2351 "vying",
2352 "wacky",
2353 "wafer",
2354 "wager",
2355 "wagon",
2356 "waist",
2357 "waive",
2358 "waltz",
2359 "warty",
2360 "waste",
2361 "watch",
2362 "water",
2363 "waver",
2364 "waxen",
2365 "weary",
2366 "weave",
2367 "wedge",
2368 "weedy",
2369 "weigh",
2370 "weird",
2371 "welch",
2372 "welsh",
2373 "whack",
2374 "whale",
2375 "wharf",
2376 "wheat",
2377 "wheel",
2378 "whelp",
2379 "where",
2380 "which",
2381 "whiff",
2382 "while",
2383 "whine",
2384 "whiny",
2385 "whirl",
2386 "whisk",
2387 "white",
2388 "whole",
2389 "whoop",
2390 "whose",
2391 "widen",
2392 "wider",
2393 "widow",
2394 "width",
2395 "wield",
2396 "wight",
2397 "willy",
2398 "wimpy",
2399 "wince",
2400 "winch",
2401 "windy",
2402 "wiser",
2403 "wispy",
2404 "witch",
2405 "witty",
2406 "woken",
2407 "woman",
2408 "women",
2409 "woody",
2410 "wooer",
2411 "wooly",
2412 "woozy",
2413 "wordy",
2414 "world",
2415 "worry",
2416 "worse",
2417 "worst",
2418 "worth",
2419 "would",
2420 "wound",
2421 "woven",
2422 "wrack",
2423 "wrath",
2424 "wreak",
2425 "wreck",
2426 "wrest",
2427 "wring",
2428 "wrist",
2429 "write",
2430 "wrong",
2431 "wrote",
2432 "wrung",
2433 "wryly",
2434 "yacht",
2435 "yearn",
2436 "yeast",
2437 "yield",
2438 "young",
2439 "youth",
2440 "zebra",
2441 "zesty",
2442 "zonal",
2443 ]
2444 return words
2445
2446
2447def main():
2448 runApp()
2449
2450
2451main()