fork download
  1.  
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <time.h>
  6.  
  7. typedef struct Trie Trie;
  8.  
  9. struct Trie {
  10. int end;
  11. Trie *next[26];
  12. };
  13.  
  14. unsigned trie_index(int c)
  15. {
  16. unsigned u = c - 65;
  17.  
  18. if (u < 64) {
  19. u = u & 0x1f;
  20.  
  21. if (u < 26) return u;
  22. }
  23.  
  24. return ~0u;
  25. }
  26.  
  27. void trie_insert(Trie **t, const char *p)
  28. {
  29. while (*p) {
  30. unsigned u = trie_index(*p++);
  31.  
  32. if (u < 26) {
  33. if (*t == NULL) {
  34. *t = calloc(1, sizeof(**t));
  35. }
  36.  
  37. t = &(*t)->next[u];
  38. }
  39. }
  40.  
  41. if (*t == NULL) {
  42. *t = calloc(1, sizeof(**t));
  43. }
  44.  
  45. (*t)->end = 1;
  46. }
  47.  
  48. Trie *trie_from(const char **data)
  49. {
  50. Trie *t = NULL;
  51.  
  52. while (*data) {
  53. trie_insert(&t, *data++);
  54. }
  55.  
  56. return t;
  57. }
  58.  
  59. void trie_destroy(Trie *t)
  60. {
  61. if (t) {
  62. unsigned i;
  63.  
  64. for (i = 0; i < 26; i++) {
  65. trie_destroy(t->next[i]);
  66. }
  67.  
  68. free(t);
  69. }
  70. }
  71.  
  72. const char *data[] = {
  73. "about", "above", "abuse", "acted", "added", "admit", "adopt", "after",
  74. "again", "agree", "ahead", "aimed", "alarm", "album", "alias", "alive",
  75. "allow", "alone", "along", "alter", "amuse", "angle", "angry", "annoy",
  76. "apart", "apple", "apply", "areas", "argue", "arise", "aside", "asked",
  77. "avoid", "awake", "award", "aware", "awful", "backs", "badly", "based",
  78. "bases", "basic", "basis", "bears", "began", "begin", "begun", "being",
  79. "below", "binds", "bites", "black", "blame", "blank", "block", "board",
  80. "books", "borne", "bound", "boxes", "brand", "break", "brief", "bring",
  81. "broke", "brown", "build", "built", "bytes", "calls", "cards", "cares",
  82. "carry", "cases", "catch", "cause", "cease", "chain", "chair", "chaos",
  83. "chars", "cheap", "check", "child", "chips", "chose", "claim", "class",
  84. "clean", "clear", "clock", "close", "coded", "codes", "comes", "costs",
  85. "could", "count", "court", "cover", "crash", "crazy", "crisp", "cross",
  86. "cycle", "daily", "dated", "dates", "datum", "deals", "dealt", "death",
  87. "deems", "delay", "depth", "digit", "dirty", "discs", "ditto", "doing",
  88. "doors", "doubt", "dozen", "drawn", "draws", "dream", "drink", "drive",
  89. "drops", "drove", "dying", "early", "earth", "eaten", "edits", "eight",
  90. "elect", "empty", "ended", "enemy", "enjoy", "enter", "entry", "equal",
  91. "error", "evens", "event", "every", "exact", "exist", "extra", "facts",
  92. "fails", "faith", "falls", "false", "fancy", "fatal", "fault", "feeds",
  93. "feels", "fewer", "field", "fight", "filed", "files", "fills", "final",
  94. "finds", "first", "fixed", "fixes", "flash", "flied", "flies", "float",
  95. "floor", "flown", "folks", "force", "forms", "forth", "found", "frame",
  96. "fresh", "fries", "front", "fully", "funds", "funny", "gains", "games",
  97. "given", "gives", "glass", "going", "goods", "grand", "grant", "graph",
  98. "grave", "great", "green", "grind", "gross", "group", "grown", "grows",
  99. "guard", "guess", "guide", "habit", "hands", "handy", "hangs", "happy",
  100. "heads", "heard", "hears", "heart", "heavy", "hello", "helps", "hence",
  101. "hides", "hints", "holds", "holes", "hoped", "hopes", "horse", "hotel",
  102. "hours", "house", "human", "hurry", "ideal", "ideas", "image", "imply",
  103. "index", "inner", "input", "issue", "items", "joins", "joint", "judge",
  104. "jumps", "keeps", "kills", "kinds", "knock", "known", "knows", "label",
  105. "lacks", "lands", "large", "lasts", "later", "leach", "leads", "learn",
  106. "least", "leave", "legal", "level", "light", "liked", "likes", "limit",
  107. "lines", "links", "lists", "lived", "lives", "loads", "local", "locks",
  108. "logic", "looks", "loose", "lorry", "loses", "lower", "lucky", "lunch",
  109. "lying", "magic", "major", "makes", "march", "marks", "marry", "match",
  110. "maybe", "means", "meant", "media", "meets", "merit", "messy", "metal",
  111. "might", "miles", "minds", "minor", "mixed", "mixes", "model", "money",
  112. "month", "moral", "mouth", "moved", "moves", "movie", "music", "naive",
  113. "named", "names", "nasty", "needs", "never", "nicer", "night", "noise",
  114. "noisy", "north", "noted", "notes", "novel", "occur", "offer", "often",
  115. "older", "omits", "opens", "order", "other", "ought", "outer", "owing",
  116. "owner", "pages", "pairs", "paper", "parts", "party", "patch", "pause",
  117. "payed", "peace", "phase", "phone", "picks", "piece", "place", "plain",
  118. "plane", "plans", "plant", "plays", "plots", "point", "posts", "pound",
  119. "power", "press", "price", "prime", "print", "prior", "prone", "proof",
  120. "prove", "pulls", "putts", "queue", "quick", "quiet", "quite", "quits",
  121. "quote", "radio", "raise", "range", "rapid", "rates", "reach", "react",
  122. "reads", "ready", "refer", "reply", "right", "river", "rooms", "rough",
  123. "round", "route", "rules", "sadly", "safer", "saint", "sales", "saved",
  124. "saves", "scale", "scene", "score", "scrap", "seeks", "seems", "sells",
  125. "sends", "sense", "serve", "seven", "shall", "shame", "shape", "share",
  126. "sharp", "sheet", "shelf", "shell", "shift", "shoot", "shops", "short",
  127. "shown", "shows", "shuts", "sides", "sight", "signs", "silly", "since",
  128. "sites", "sizes", "skill", "sleep", "small", "smile", "solid", "solve",
  129. "sorry", "sorts", "sound", "south", "space", "spare", "speak", "speed",
  130. "spell", "spend", "spent", "spite", "split", "spoke", "spots", "staff",
  131. "stage", "stand", "start", "state", "stays", "steal", "stick", "still",
  132. "stock", "stone", "stood", "stops", "store", "story", "stuck", "study",
  133. "stuff", "style", "sugar", "suits", "table", "taken", "takes", "talks",
  134. "tanks", "tapes", "tasks", "taste", "teach", "teeth", "tells", "tends",
  135. "terms", "tests", "thank", "their", "there", "these", "thing", "think",
  136. "third", "those", "three", "threw", "throw", "tight", "timed", "times",
  137. "title", "today", "token", "tooth", "topic", "total", "touch", "trace",
  138. "track", "train", "traps", "trash", "treat", "trees", "trial", "trick",
  139. "tried", "tries", "truck", "truly", "trunk", "trust", "truth", "turns",
  140. "twice", "tying", "typed", "types", "under", "unite", "units", "until",
  141. "upper", "upset", "usage", "users", "using", "usual", "vague", "valid",
  142. "value", "video", "views", "visit", "vital", "voice", "votes", "waits",
  143. "walks", "walls", "wants", "warns", "waste", "watch", "water", "wears",
  144. "weeks", "weird", "wheel", "where", "which", "while", "white", "whole",
  145. "whose", "wider", "wills", "woman", "women", "words", "works", "world",
  146. "worry", "worse", "worst", "worth", "would", "write", "wrong", "wrote",
  147. "years", "young", "yours", "abide", "abort", "acorn", "actor", "acute",
  148. "adapt", "adult", "agent", "agony", "aided", "alert", "alien", "align",
  149. "alike", "aloud", "alpha", "amaze", "amber", "amend", "ample", "angel",
  150. "anger", "arena", "armed", "arose", "array", "arrow", "ashes", "asset",
  151. "atlas", "atoms", "audio", "await", "axiom", "badge", "baked", "bakes",
  152. "balls", "banal", "bands", "banks", "barks", "batch", "baths", "beach",
  153. "beans", "beard", "beast", "beats", "beers", "bells", "bench", "bends",
  154. "bible", "bigot", "bills", "birds", "birth", "blade", "blast", "bless",
  155. "blind", "blink", "bliss", "blood", "blown", "blows", "blues", "blurb",
  156. "boats", "bogus", "boils", "bombs", "bones", "bonus", "boost", "boots",
  157. "bored", "bores", "brain", "brake", "brass", "brave", "bread", "breed",
  158. "brick", "broad", "brush", "bucks", "bulbs", "bunch", "burns", "burnt",
  159. "burst", "buyer", "cable", "cakes", "camps", "cared", "cased", "casts",
  160. "cater", "cells", "chalk", "chaps", "charm", "chart", "chase", "chats",
  161. "cheat", "cheek", "cheer", "chess", "chest", "chews", "chief", "choir",
  162. "chops", "chord", "chuck", "chunk", "cider", "circa", "cited", "cites",
  163. "civil", "clash", "click", "cliff", "climb", "clips", "clone", "cloth",
  164. "cloud", "clubs", "clues", "coach", "coast", "coats", "coins", "colon",
  165. "comic", "comma", "cooks", "cools", "coped", "copes", "cough", "crack",
  166. "craft", "cramp", "crass", "crawl", "cream", "creed", "creep", "cried",
  167. "cries", "crime", "crops", "crowd", "crown", "crude", "cruel", "crush",
  168. "cubic", "cured", "cures", "curly", "curry", "curse", "curve", "cynic",
  169. "damns", "dance", "dared", "dares", "debug", "decay", "deeds", "deity",
  170. "delta", "dense", "deter", "devil", "dials", "diary", "dined", "diner",
  171. "dines", "disco", "ditch", "dived", "dives", "dodge", "dogma", "dooms",
  172. "doses", "draft", "drags", "drain", "drama", "drank", "dread", "dress",
  173. "dried", "dries", "drift", "drill", "drips", "drown", "drugs", "drums",
  174. "drunk", "ducks", "dummy", "dumps", "dusty", "eager", "eagle", "earns",
  175. "eater", "edges", "elite", "embed", "equip", "erase", "essay", "ethic",
  176. "evils", "exams", "exits", "faced", "faces", "faint", "fairy", "farce",
  177. "fears", "fence", "fetch", "fever", "fifth", "fifty", "films", "fined",
  178. "finer", "fines", "fired", "fires", "firms", "fiver", "fizzy", "flags",
  179. "flame", "flaws", "fleet", "flesh", "flips", "flood", "flour", "flows",
  180. "fluid", "flush", "flute", "focus", "folds", "fonts", "foods", "fools",
  181. "forty", "forum", "frank", "fraud", "freak", "freed", "frees", "fried",
  182. "frogs", "frown", "froze", "fruit", "fudge", "fumes", "furry", "fussy",
  183. "fuzzy", "gates", "gears", "genes", "genre", "ghost", "giant", "gifts",
  184. "girls", "glean", "glory", "glove", "glows", "gnome", "goals", "goody",
  185. "grabs", "grace", "grade", "grain", "grasp", "grass", "greed", "grief",
  186. "grips", "groan", "guest", "guilt", "hacks", "hairs", "hairy", "halls",
  187. "halts", "halve", "hardy", "harsh", "hasty", "hated", "hates", "havoc",
  188. "heats", "heels", "hided", "hills", "hired", "hires", "hobby", "homes",
  189. "honey", "hooks", "horde", "hosts", "hunts", "hurts", "icons", "idiom",
  190. "idiot", "inane", "incur", "infer", "inter", "irate", "irony", "jeans",
  191. "jelly", "joked", "jokes", "jolly", "juice", "keyed", "kicks", "kings",
  192. "knees", "knife", "lager", "laser", "laugh", "layer", "leans", "lemon",
  193. "lends", "libel", "lifts", "limbs", "lined", "liver", "loans", "lobby",
  194. "lodge", "loops", "lords", "lousy", "loved", "lover", "loves", "loyal",
  195. "lumps", "lungs", "lurks", "lyric", "mails", "mains", "maize", "maker",
  196. "males", "mania", "mayor", "meals", "mends", "menus", "mercy", "merge",
  197. "merry", "meter", "metro", "mimic", "mined", "mines", "minus", "mists",
  198. "moans", "modes", "moons", "moron", "motor", "motto", "mount", "mouse",
  199. "mucks", "mummy", "myths", "nails", "naked", "nerve", "nests", "newer",
  200. "newly", "nicks", "noble", "nodes", "noses", "nouns", "nurse", "obeys",
  201. "ocean", "oddly", "onion", "opera", "opted", "optic", "orbit", "organ",
  202. "owned", "ozone", "packs", "paged", "pains", "paint", "panel", "panic",
  203. "pants", "parks", "parse", "paste", "paths", "peaks", "pedal", "peers",
  204. "pence", "pends", "penny", "petty", "photo", "piano", "piles", "pills",
  205. "pilot", "pinch", "pints", "pipes", "pitch", "pizza", "plate", "plugs",
  206. "poems", "poets", "polar", "polls", "ports", "posed", "poses", "pours",
  207. "prays", "pride", "prize", "prose", "proud", "pulse", "pumps", "punch",
  208. "punts", "pupil", "purge", "queen", "query", "quest", "quota", "rabid",
  209. "raced", "races", "racks", "radar", "raids", "rails", "rains", "ranks",
  210. "rants", "rarer", "rated", "ratio", "raved", "raves", "razor", "realm",
  211. "reign", "relax", "relay", "rends", "renew", "reset", "rests", "reuse",
  212. "rhyme", "rides", "rigid", "rings", "risen", "rises", "risks", "risky",
  213. "rival", "roads", "robot", "rocks", "roles", "rolls", "roman", "roots",
  214. "routs", "royal", "ruins", "ruled", "ruler", "rural", "rusty", "sacks",
  215. "sails", "sauce", "scans", "scare", "scarf", "scope", "screw", "seals",
  216. "seats", "sects", "sexes", "shade", "shake", "shaky", "sheds", "sheep",
  217. "sheer", "shine", "shiny", "ships", "shirt", "shock", "shoes", "shone",
  218. "shook", "shots", "shout", "shove", "sided", "sigma", "sings", "sinks",
  219. "sixth", "sixty", "sized", "skips", "skirt", "skull", "slang", "slash",
  220. "slave", "slept", "slice", "slide", "slips", "slope", "slots", "slows",
  221. "smart", "smash", "smell", "smith", "smoke", "snack", "snail", "sneak",
  222. "sniff", "sober", "socks", "solar", "soles", "songs", "souls", "spies",
  223. "spike", "spill", "spits", "spoil", "spoof", "spool", "sport", "spout",
  224. "spray", "squad", "stack", "stair", "stake", "stale", "stall", "stamp",
  225. "stare", "stark", "stars", "steam", "steel", "steep", "steer", "stems",
  226. "steps", "stiff", "stirs", "stole", "storm", "straw", "stray", "strip",
  227. "stuns", "stunt", "suing", "suite", "sunny", "super", "swamp", "swaps",
  228. "swear", "sweat", "sweep", "sweet", "swept", "swims", "swing", "sword",
  229. "swore", "sworn", "tacks", "tails", "taker", "tales", "taxes", "teams",
  230. "tears", "tempt", "tense", "tenth", "terse", "texts", "theft", "theme",
  231. "thick", "thief", "thous", "thumb", "tiger", "tiles", "timer", "tired",
  232. "tires", "toast", "tones", "tools", "tough", "tower", "towns", "trade",
  233. "trail", "tread", "trend", "tribe", "trips", "troop", "tubes", "tuned",
  234. "tunes", "tutor", "twins", "twist", "uncle", "undid", "unify", "union",
  235. "unity", "unset", "urban", "urged", "urges", "utter", "valve", "vends",
  236. "venue", "verbs", "verse", "vicar", "vinyl", "virus", "vocal", "vomit",
  237. "voted", "voter", "vouch", "vowel", "waded", "wades", "wages", "waked",
  238. "wakes", "warms", "warps", "waved", "waves", "weary", "weigh", "whale",
  239. "whoop", "width", "winds", "wines", "wings", "wiped", "wipes", "wired",
  240. "wires", "wiser", "witch", "witty", "wives", "woken", "woods", "worms",
  241. "wound", "wraps", "wrath", "wreck", "wrist", "yards", "yield", "youth",
  242. "zeros", "zones", "aback", "abate", "abbey", "abbot", "abets", "abhor",
  243. "abler", "abode", "abyss", "ached", "aches", "acids", "acing", "acres",
  244. "acrid", "adage", "adept", "adobe", "adore", "adorn", "affix", "afoot",
  245. "agile", "aglow", "aides", "ailed", "aired", "aisle", "algae", "alibi",
  246. "allay", "alley", "allot", "alloy", "aloft", "aloof", "altar", "altos",
  247. "amass", "amble", "amiss", "amply", "angst", "ankle", "annex", "annul",
  248. "antic", "anvil", "aorta", "aping", "apron", "apter", "aptly", "arced",
  249. "arias", "aroma", "arson", "ashed", "ashen", "askew", "aspen", "asses",
  250. "atone", "attic", "audit", "aunts", "aural", "auras", "autos", "avail",
  251. "avert", "avows", "awing", "awoke", "axing", "axles", "azure", "babes",
  252. "bacon", "bagel", "baggy", "bails", "baits", "baker", "balds", "baled",
  253. "bales", "balms", "balmy", "bandy", "bangs", "banjo", "barbs", "bards",
  254. "bared", "barer", "bares", "barge", "barns", "baron", "baser", "basil",
  255. "basin", "basks", "baste", "bathe", "baton", "bawdy", "bawls", "bayed",
  256. "bayou", "beads", "beady", "beaks", "beams", "beech", "beefs", "beefy",
  257. "beets", "befit", "beige", "belch", "belie", "belly", "belts", "bents",
  258. "beret", "berry", "berth", "beset", "bests", "bides", "biked", "bikes",
  259. "bingo", "biped", "birch", "bison", "bitch", "blabs", "bland", "blare",
  260. "blase", "blaze", "bleak", "bleat", "bleed", "blend", "blimp", "blips",
  261. "blitz", "blobs", "blocs", "blogs", "blond", "bloom", "blots", "blued",
  262. "bluer", "bluff", "blunt", "blurs", "blurt", "blush", "boars", "boast",
  263. "boded", "bodes", "bolts", "bonds", "boned", "booby", "booed", "booms",
  264. "boons", "boors", "booth", "booty", "booze", "bosom", "bossy", "botch",
  265. "bough", "bouts", "bowed", "bowel", "bowls", "boxed", "boxer", "brace",
  266. "brags", "braid", "brash", "brats", "bravo", "brawl", "brawn", "brays",
  267. "brews", "bribe", "bride", "brims", "brine", "brink", "briny", "brisk",
  268. "broil", "brood", "brook", "broom", "broth", "brows", "brunt", "brute",
  269. "buddy", "budge", "buffs", "buggy", "bugle", "bulge", "bulks", "bulky",
  270. "bulls", "bully", "bumps", "bumpy", "bunks", "bunny", "buoys", "burly",
  271. "burps", "burro", "burrs", "bushy", "busts", "butte", "butts", "buxom",
  272. "byway", "cabin", "cacao", "cache", "cacti", "cadet", "cafes", "caged",
  273. "cages", "cagey", "caked", "calms", "calve", "camel", "cameo", "canal",
  274. "candy", "caned", "canes", "canny", "canoe", "canon", "caped", "caper",
  275. "capes", "carat", "cargo", "carol", "carps", "carts", "carve", "casks",
  276. "caste", "caulk", "caved", "caves", "cawed", "cedar", "ceded", "cedes",
  277. "cello", "cents", "chafe", "chaff", "champ", "chant", "chasm", "cheep",
  278. "chefs", "chewy", "chick", "chide", "chill", "chime", "chimp", "china",
  279. "chink", "chins", "chirp", "choke", "chore", "chows", "chugs", "chums",
  280. "churn", "chute", "cigar", "cinch", "civic", "clack", "clamp", "clams",
  281. "clang", "clank", "clans", "claps", "clasp", "claws", "cleat", "clefs",
  282. "cleft", "clerk", "clime", "cling", "clink", "cloak", "clods", "clogs",
  283. "clots", "clout", "clove", "clown", "cluck", "clued", "clump", "clung",
  284. "coals", "cobra", "cocks", "cocky", "cocoa", "coils", "coked", "cokes",
  285. "colds", "colic", "colts", "comas", "combs", "comet", "cones", "cooed",
  286. "coops", "coral", "cords", "cored", "cores", "corks", "corns", "corny",
  287. "corps", "couch", "coups", "coves", "covet", "cowed", "cower", "coyer",
  288. "crabs", "crags", "crams", "crane", "crank", "crate", "crave", "craze",
  289. "creak", "creek", "crepe", "crept", "crest", "crews", "cribs", "croak",
  290. "crock", "crony", "crook", "croon", "crows", "crumb", "crust", "crypt",
  291. "cubed", "cubes", "cuffs", "cuing", "culls", "cults", "curbs", "curds",
  292. "curio", "curls", "cuter", "cysts", "daddy", "dairy", "daisy", "dally",
  293. "dames", "damps", "dandy", "darns", "darts", "daubs", "daunt", "dawns",
  294. "dazed", "dazes", "deans", "dears", "debit", "debts", "debut", "decks",
  295. "decoy", "decry", "deeps", "defer", "deify", "deign", "delis", "delve",
  296. "demon", "denim", "dents", "depot", "desks", "diced", "dices", "diets",
  297. "diked", "dills", "dimer", "dimes", "dimly", "dingy", "direr", "dirge",
  298. "disks", "ditty", "diver", "dizzy", "docks", "doers", "doily", "doled",
  299. "doles", "dolls", "dolly", "domed", "domes", "donor", "doped", "dopes",
  300. "dopey", "dosed", "doted", "dotes", "dough", "douse", "doves", "dowdy",
  301. "downs", "downy", "dowry", "dozed", "dozes", "drabs", "drape", "drawl",
  302. "dregs", "drier", "droll", "drone", "drool", "droop", "dross", "dryer",
  303. "ducts", "duded", "dudes", "duels", "duets", "dukes", "dulls", "dully",
  304. "dumpy", "dunce", "dunes", "dungs", "dunks", "dunno", "duped", "dupes",
  305. "dusky", "dusts", "duvet", "dwarf", "dwell", "dwelt", "earls", "eased",
  306. "easel", "eases", "eaves", "ebbed", "ebony", "edged", "edger", "edict",
  307. "eerie", "egged", "eject", "eking", "elbow", "elder", "elegy", "elope",
  308. "elude", "elves", "email", "ember", "emirs", "emits", "enact", "endow",
  309. "enema", "ensue", "envoy", "epics", "epoch", "erect", "erode", "erred",
  310. "erupt", "ether", "ethos", "evade", "evict", "evoke", "exalt", "excel",
  311. "exert", "exile", "expel", "extol", "exude", "exult", "fable", "facet",
  312. "faded", "fades", "fairs", "faked", "fakes", "famed", "fangs", "fared",
  313. "fares", "farms", "fasts", "fated", "fates", "fatty", "fauna", "fawns",
  314. "fazed", "fazes", "feast", "feats", "feign", "feint", "fells", "felon",
  315. "felts", "fends", "ferns", "ferry", "feted", "fetid", "fetus", "feuds",
  316. "fiche", "fiend", "fiery", "filch", "filet", "filly", "filmy", "filth",
  317. "finch", "fishy", "fists", "fives", "flail", "flair", "flake", "flaky",
  318. "flank", "flaps", "flare", "flask", "flats", "fleas", "fleck", "flees",
  319. "flick", "fling", "flint", "flirt", "flits", "flock", "flogs", "flops",
  320. "flora", "floss", "flout", "flues", "fluff", "fluke", "flung", "flunk",
  321. "foals", "foams", "foamy", "focal", "foggy", "foils", "foist", "folly",
  322. "foots", "foray", "fords", "fores", "forge", "forgo", "forks", "forte",
  323. "forts", "fouls", "fount", "fours", "fowls", "foxed", "foxes", "foyer",
  324. "frail", "franc", "frays", "freer", "frets", "friar", "frill", "frisk",
  325. "frock", "frond", "frost", "froth", "fuels", "fulls", "fumed", "fungi",
  326. "furls", "fused", "fuses", "fetes", "gable", "gaily", "gaits", "galas",
  327. "gales", "galls", "gamed", "gamer", "gamma", "gamut", "gangs", "gaped",
  328. "gapes", "garbs", "gases", "gasps", "gated", "gaudy", "gauge", "gaunt",
  329. "gauze", "gavel", "gawks", "gawky", "gayer", "gazed", "gazes", "geese",
  330. "gelds", "genie", "genii", "gents", "genus", "germs", "ghoul", "giddy",
  331. "gilds", "gills", "gilts", "gimme", "girth", "glade", "glads", "gland",
  332. "glare", "glaze", "gleam", "glens", "glide", "glint", "gloat", "globe",
  333. "gloom", "gloss", "glued", "glues", "gluts", "gnarl", "gnash", "gnats",
  334. "gnaws", "goads", "goats", "godly", "golds", "golfs", "goner", "gongs",
  335. "gonna", "gooey", "goofs", "goofy", "goons", "goose", "gored", "gores",
  336. "gorge", "gouge", "gourd", "gowns", "graft", "grams", "grape", "grate",
  337. "gravy", "graze", "greet", "grids", "grill", "grime", "grimy", "grins",
  338. "gripe", "grits", "groin", "groom", "grope", "grove", "growl", "grubs",
  339. "gruel", "gruff", "grunt", "guild", "guile", "guise", "gulch", "gulfs",
  340. "gulls", "gully", "gulps", "gummy", "guppy", "gurus", "gusts", "gusty",
  341. "guyed", "hails", "haled", "haler", "hales", "halon", "halos", "hared",
  342. "harem", "hares", "harks", "harms", "harps", "harry", "harts", "haste",
  343. "hatch", "hauls", "haunt", "haven", "haves", "hawks", "hayed", "hazed",
  344. "hazel", "hazes", "heady", "heals", "heaps", "heath", "heave", "hedge",
  345. "heeds", "hefty", "heirs", "helms", "herbs", "herds", "heron", "hewed",
  346. "hicks", "highs", "hiked", "hiker", "hikes", "hilly", "hilts", "hinds",
  347. "hinge", "hippy", "hitch", "hived", "hives", "hoard", "hobos", "hocks",
  348. "hoist", "holed", "holly", "homed", "homey", "honed", "hones", "honks",
  349. "hoods", "hoofs", "hoops", "hoots", "horns", "horny", "hosed", "hoses",
  350. "hotly", "hound", "hovel", "hover", "howls", "huffs", "huffy", "huger",
  351. "hulks", "hulls", "humid", "humps", "hunch", "hunks", "hurls", "husks",
  352. "husky", "hutch", "hyena", "hymns", "icier", "icing", "idled", "idler",
  353. "idles", "idols", "igloo", "impel", "inept", "inert", "infix", "inked",
  354. "inlay", "inlet", "iotas", "irked", "irons", "isles", "itchy", "ivies",
  355. "ivory", "jacks", "jaded", "jades", "jails", "jambs", "jaunt", "jawed",
  356. "jeers", "jells", "jerks", "jerky", "jests", "jetty", "jewel", "jibed",
  357. "jibes", "jiffy", "jilts", "joker", "jolts", "joyed", "juicy", "jumbo",
  358. "jumpy", "junks", "junta", "juror", "karat", "kayak", "keels", "keens",
  359. "khaki", "kilns", "kilos", "kilts", "kinda", "kinks", "kinky", "kiosk",
  360. "kited", "kites", "kitty", "kiwis", "knack", "knead", "kneed", "kneel",
  361. "knelt", "knits", "knobs", "knoll", "knots", "koala", "kudos", "laced",
  362. "laces", "laded", "laden", "lades", "ladle", "lairs", "lakes", "lambs",
  363. "lamed", "lamer", "lames", "lamps", "lance", "lanes", "lanky", "lapel",
  364. "lapse", "lards", "larks", "larva", "latch", "latex", "lathe", "laths",
  365. "lauds", "lawns", "laxer", "leafs", "leafy", "leaks", "leaky", "leaps",
  366. "lease", "leash", "ledge", "leech", "leeks", "leers", "leery", "lefts",
  367. "lemme", "leper", "letup", "levee", "lever", "liars", "licks", "liken",
  368. "liker", "lilac", "lilts", "limbo", "limed", "limes", "limps", "linen",
  369. "liner", "lingo", "lions", "lisps", "lithe", "liven", "livid", "llama",
  370. "loafs", "loath", "lobes", "lofts", "lofty", "loins", "lolls", "longs",
  371. "looms", "loons", "loony", "loots", "loped", "lopes", "loser", "lotus",
  372. "louse", "lowed", "lowly", "lucid", "lucks", "lulls", "lumpy", "lunar",
  373. "lunge", "lurch", "lured", "lures", "lurid", "lusts", "lusty", "lutes",
  374. "lymph", "lynch", "lyres", "maced", "maces", "macho", "madam", "madly",
  375. "maids", "maims", "malls", "malts", "mamas", "mamma", "manes", "mange",
  376. "mango", "mangy", "manic", "manly", "manor", "maple", "mares", "maria",
  377. "marsh", "marts", "masks", "mason", "masts", "mated", "mates", "matte",
  378. "mauls", "mauve", "maxim", "mazes", "mealy", "meats", "medal", "melon",
  379. "melts", "memos", "meres", "meted", "metes", "mewed", "midst", "miens",
  380. "miked", "mikes", "milks", "milky", "mills", "mimed", "mimes", "mince",
  381. "miner", "minks", "mints", "mired", "mires", "mirth", "miser", "misty",
  382. "mites", "mitts", "mixer", "moats", "mocks", "modal", "moist", "molar",
  383. "moles", "monks", "moods", "moody", "mooed", "moors", "moose", "moots",
  384. "moped", "mopes", "morns", "mossy", "motel", "moths", "motif", "mound",
  385. "mourn", "mousy", "mover", "mowed", "mower", "mucus", "muddy", "muffs",
  386. "muggy", "mulch", "mules", "mulls", "mumps", "munch", "mural", "murky",
  387. "mused", "muses", "mushy", "musts", "musty", "muted", "muter", "mutes",
  388. "mutts", "napes", "nappy", "nasal", "natty", "naval", "navel", "nears",
  389. "necks", "needy", "neigh", "newsy", "newts", "niche", "niece", "nifty",
  390. "nines", "ninny", "ninth", "nippy", "nobly", "nomad", "nooks", "noose",
  391. "norms", "nosed", "notch", "nuder", "nudes", "nudge", "nulls", "numbs",
  392. "nutty", "nylon", "nymph", "oared", "oases", "oasis", "oaths", "obese",
  393. "oboes", "octal", "odder", "offed", "ogled", "ogles", "ogres", "oiled",
  394. "okras", "olden", "olive", "omega", "omens", "onset", "oozed", "oozes",
  395. "opals", "opium", "orals", "otter", "ounce", "ousts", "outdo", "outed",
  396. "ovals", "ovary", "ovens", "overs", "overt", "oxide", "paced", "paces",
  397. "pacts", "paddy", "pagan", "pager", "pails", "paled", "paler", "pales",
  398. "palls", "palms", "panda", "panes", "pangs", "pansy", "papal", "papas",
  399. "parch", "pared", "pares", "parka", "passe", "pasta", "pasts", "pasty",
  400. "pates", "patio", "patty", "paved", "paves", "pawed", "pawns", "payer",
  401. "peach", "peals", "pearl", "pears", "pecan", "pecks", "peeks", "peels",
  402. "peeps", "peeve", "pelts", "penal", "penis", "peons", "peony", "perch",
  403. "peril", "perks", "perky", "pesky", "pests", "petal", "peter", "picky",
  404. "piers", "piety", "piked", "pikes", "piled", "pined", "pines", "pinks",
  405. "pious", "piped", "pique", "pithy", "pivot", "pixie", "plaid", "plank",
  406. "plaza", "plead", "pleas", "pleat", "plied", "plies", "plods", "plops",
  407. "ploys", "pluck", "plumb", "plume", "plump", "plums", "plush", "poach",
  408. "poise", "poked", "poker", "pokes", "pokey", "poled", "poles", "polio",
  409. "polka", "polyp", "ponds", "pools", "poops", "poppy", "porch", "pored",
  410. "pores", "pouch", "pouts", "prank", "prawn", "preen", "preys", "prick",
  411. "pried", "pries", "primp", "prism", "privy", "probe", "prods", "proms",
  412. "prong", "props", "prowl", "prows", "proxy", "prude", "prune", "psalm",
  413. "psych", "pucks", "pudgy", "puffs", "puffy", "puked", "pukes", "pulps",
  414. "pumas", "punks", "puppy", "puree", "purer", "purrs", "purse", "pushy",
  415. "pussy", "putty", "pyres", "quack", "quail", "quake", "qualm", "quark",
  416. "quart", "quash", "quays", "queer", "quell", "quill", "quilt", "quips",
  417. "quirk", "rabbi", "racer", "radii", "rafts", "raged", "rages", "rainy",
  418. "raked", "rakes", "rally", "ramps", "ranch", "raped", "rapes", "rared",
  419. "rares", "rasps", "ratty", "ravel", "raven", "rawer", "rayon", "razed",
  420. "razes", "reals", "reams", "reaps", "rears", "rebel", "rebut", "recap",
  421. "recur", "redid", "reeds", "reefs", "reeks", "reels", "regal", "reins",
  422. "relic", "remit", "rents", "repay", "repel", "resin", "retch", "retry",
  423. "revel", "revue", "rhino", "riced", "rices", "rider", "ridge", "rifer",
  424. "rifle", "rifts", "riled", "riles", "rinds", "rinks", "rinse", "riots",
  425. "ripen", "riper", "riser", "rites", "rivet", "roach", "roams", "roars",
  426. "roast", "robed", "robes", "robin", "rocky", "rodeo", "rogue", "romps",
  427. "roofs", "rooks", "roomy", "roost", "roped", "ropes", "roses", "rotor",
  428. "rouge", "rouse", "rowdy", "rowed", "ruddy", "ruder", "ruffs", "rugby",
  429. "ruing", "rummy", "rumps", "runes", "rungs", "runny", "runts", "ruses",
  430. "rusts", "sades", "safes", "sagas", "sager", "sages", "salad", "sally",
  431. "salon", "salts", "salty", "salve", "sames", "sands", "sandy", "saner",
  432. "sangs", "saris", "sassy", "satin", "saucy", "sauna", "saute", "saver",
  433. "savvy", "sawed", "scabs", "scald", "scalp", "scaly", "scant", "scars",
  434. "scary", "scent", "scoff", "scold", "scoop", "scoot", "scorn", "scour",
  435. "scout", "scowl", "scram", "scrub", "scuff", "scums", "seams", "sears",
  436. "sedan", "seeds", "seedy", "seeps", "seize", "semen", "serum", "sever",
  437. "sewed", "sewer", "sexed", "shack", "shady", "shaft", "shams", "shark",
  438. "shave", "shawl", "sheaf", "shear", "sheen", "shied", "shies", "shins",
  439. "shire", "shirk", "shoal", "shoos", "shore", "showy", "shred", "shrew",
  440. "shrub", "shrug", "shuck", "shuns", "shunt", "shyer", "sicks", "sidle",
  441. "siege", "sieve", "sifts", "sighs", "silks", "sills", "silos", "silts",
  442. "sinew", "singe", "sinus", "sired", "siren", "sires", "sissy", "sited",
  443. "sixes", "sizer", "skate", "skein", "skews", "skids", "skied", "skies",
  444. "skimp", "skims", "skins", "skits", "skulk", "skunk", "slabs", "slack",
  445. "slain", "slake", "slams", "slant", "slaps", "slate", "slats", "slays",
  446. "sleds", "sleek", "sleet", "slews", "slick", "slime", "slims", "slimy",
  447. "sling", "slink", "slits", "slobs", "slogs", "slops", "slosh", "sloth",
  448. "slugs", "slump", "slums", "slung", "slunk", "slurs", "slush", "sluts",
  449. "smack", "smear", "smelt", "smirk", "smite", "smock", "smoky", "smote",
  450. "smuts", "snags", "snake", "snaps", "snare", "snarl", "sneer", "snide",
  451. "snipe", "snips", "snobs", "snoop", "snore", "snort", "snots", "snout",
  452. "snows", "snowy", "snubs", "snuff", "snugs", "soaks", "soaps", "soapy",
  453. "soars", "sodas", "sofas", "soggy", "soils", "soled", "solos", "sonic",
  454. "sooty", "sorer", "sores", "sorta", "soups", "sours", "sowed", "spade",
  455. "spank", "spans", "spark", "spars", "spasm", "spate", "spats", "spawn",
  456. "spays", "spear", "speck", "sperm", "spews", "spice", "spicy", "spied",
  457. "spine", "spins", "spire", "splat", "spook", "spoon", "spore", "spree",
  458. "sprig", "spuds", "spunk", "spurn", "spurs", "spurt", "squat", "squid",
  459. "stabs", "stags", "staid", "stain", "stalk", "stank", "stave", "steak",
  460. "stern", "stews", "sting", "stink", "stint", "stoke", "stomp", "stony",
  461. "stool", "stoop", "stork", "stout", "stove", "stows", "strap", "strew",
  462. "strum", "strut", "stubs", "studs", "stump", "stung", "stunk", "suave",
  463. "sucks", "suede", "sulks", "sulky", "sunup", "surer", "surfs", "surge",
  464. "surly", "swabs", "swans", "swarm", "swats", "sways", "swell", "swift",
  465. "swigs", "swill", "swine", "swipe", "swirl", "swish", "swoon", "swoop",
  466. "swung", "syrup", "tabby", "taboo", "tacit", "tacky", "tacos", "taint",
  467. "tally", "talon", "tamed", "tamer", "tames", "tango", "tangs", "taped",
  468. "taper", "tardy", "tarry", "tarts", "tasty", "tatty", "taunt", "tawny",
  469. "taxed", "taxis", "teaks", "tease", "teats", "teems", "teens", "tempo",
  470. "tenet", "tenor", "tents", "tepee", "tepid", "thaws", "theta", "thigh",
  471. "thins", "thong", "thorn", "throb", "thuds", "thugs", "thump", "thyme",
  472. "tiara", "ticks", "tidal", "tided", "tides", "tiers", "tiffs", "tilde",
  473. "tiled", "tills", "tilts", "timid", "tinge", "tings", "tinny", "tints",
  474. "tipsy", "toads", "togas", "toils", "tolls", "tombs", "tomes", "tonal",
  475. "toned", "tongs", "tonic", "tonne", "toots", "topaz", "torch", "torso",
  476. "toted", "totem", "totes", "tours", "touts", "towed", "towel", "toxic",
  477. "toxin", "toyed", "tract", "trait", "tramp", "trawl", "trays", "treed",
  478. "treks", "trill", "trims", "trios", "tripe", "trite", "troll", "trots",
  479. "trout", "truce", "trued", "truer", "trues", "trump", "tubas", "tubed",
  480. "tucks", "tufts", "tulip", "tummy", "tunas", "tuner", "tunic", "turfs",
  481. "tusks", "twang", "tweak", "tweed", "tweet", "twigs", "twine", "twirl",
  482. "udder", "ulcer", "ultra", "uncut", "undue", "unfit", "unman", "unsay",
  483. "untie", "upend", "upped", "urine", "usher", "usurp", "uteri", "valet",
  484. "vanes", "vases", "vasts", "vault", "veers", "veils", "veins", "venom",
  485. "vents", "verge", "verve", "vests", "vexed", "vexes", "vials", "viced",
  486. "vices", "vigil", "viler", "villa", "vines", "viola", "viper", "viral",
  487. "visas", "vised", "vises", "visor", "vista", "vivid", "vodka", "vogue",
  488. "voids", "volts", "vowed", "vying", "wafer", "wafts", "waged", "wager",
  489. "wagon", "waifs", "wails", "waist", "waive", "waken", "waltz", "wands",
  490. "waned", "wanes", "wanna", "wards", "warts", "wasps", "watts", "waver",
  491. "waxed", "waxes", "weans", "weave", "wedge", "weeds", "weedy", "weeps",
  492. "weest", "welds", "wells", "welts", "whack", "wharf", "whats", "wheat",
  493. "whens", "whets", "whiff", "whims", "whine", "whips", "whirl", "whisk",
  494. "whore", "wicks", "widen", "widow", "wield", "wilds", "wilts", "wince",
  495. "winch", "windy", "wined", "winks", "wiper", "wises", "wisps", "wispy",
  496. "wolfs", "wombs", "woody", "wooed", "woofs", "wordy", "woven", "wowed",
  497. "wreak", "wrens", "wrest", "wring", "writs", "wrung", "wryer", "yacht",
  498. "yanks", "yarns", "yawns", "yearn", "yeast", "yells", "yelps", "yeses",
  499. "yodel", "yoked", "yokel", "yokes", "yolks", "yowls", "zebra", "zests",
  500. "zincs", "zoned", "zooms", "abaft", "abase", "abbes", "abeam", "abuts",
  501. "abuzz", "achoo", "acmes", "adder", "addle", "adieu", "adios", "adman",
  502. "admen", "adzes", "aegis", "aerie", "afire", "afoul", "agape", "agate",
  503. "agave", "alder", "aloes", "alums", "amigo", "amino", "amity", "amour",
  504. "anion", "anise", "ankhs", "anode", "anons", "antis", "apace", "aphid",
  505. "apses", "aquas", "argon", "argot", "ascot", "aspic", "assay", "aster",
  506. "astir", "atoll", "atria", "attar", "auger", "aught", "augur", "avast",
  507. "avers", "avian", "axial", "axons", "babel", "baize", "balky", "balsa",
  508. "banns", "basal", "basso", "batik", "batty", "beaus", "becks", "befog",
  509. "begat", "beget", "begot", "belay", "belle", "bergs", "berms", "beryl",
  510. "besom", "besot", "betas", "biddy", "bidet", "biers", "bight", "bilge",
  511. "bilks", "billy", "bleep", "bobby", "bogey", "boggy", "bogie", "bolas",
  512. "boles", "bolls", "boner", "bongs", "bonny", "boozy", "borax", "borer",
  513. "boron", "bower", "bract", "brads", "brigs", "bruin", "bulgy", "bungs",
  514. "bunts", "burgs", "busby", "butch", "cabal", "cadge", "cairn", "calyx",
  515. "campy", "canto", "cants", "capon", "caret", "carom", "carpi", "cavil",
  516. "chary", "chock", "chomp", "churl", "cilia", "civet", "clews", "clomp",
  517. "clops", "cloys", "cocci", "codas", "codex", "coifs", "combo", "comer",
  518. "conch", "conga", "conic", "conks", "coons", "coots", "copra", "copse",
  519. "corms", "cotes", "coupe", "coven", "covey", "cowls", "coyly", "cozen",
  520. "crape", "craws", "creel", "cress", "crier", "crone", "croup", "cruet",
  521. "cubit", "cumin", "cunts", "curer", "curie", "cushy", "cusps", "cutup",
  522. "dacha", "daffy", "dales", "davit", "debar", "deice", "deism", "dells",
  523. "demur", "deuce", "dhoti", "dicta", "dilly", "dingo", "dings", "dinky",
  524. "diode", "dirks", "divan", "divas", "divot", "divvy", "dodos", "doffs",
  525. "doggy", "dogie", "dolts", "dotty", "dowel", "dowse", "doyen", "drams",
  526. "drays", "drubs", "druid", "dryad", "ducal", "ducat", "duchy", "dweeb",
  527. "dyers", "egret", "eider", "elide", "emend", "emery", "emote", "endue",
  528. "ennui", "epoxy", "ester", "euros", "ewers", "faker", "fakir", "fauns",
  529. "femur", "feral", "fiefs", "fifes", "finis", "finks", "finny", "firth",
  530. "fitly", "fixer", "flack", "flays", "floes", "fluky", "flume", "flyby",
  531. "folio", "frump", "fryer", "fugue", "furze", "fusty", "futon", "gaffs",
  532. "gamin", "gauzy", "gazer", "gecko", "gelid", "geode", "gimpy", "girds",
  533. "girts", "gluey", "glyph", "gonad", "gooks", "gorse", "gouty", "grail",
  534. "grebe", "grist", "grout", "guano", "guava", "gulag", "gunny", "gyros",
  535. "hafts", "haiku", "hakes", "hanks", "harpy", "hasps", "hater", "hawed",
  536. "hefts", "helix", "helot", "henna", "hewer", "hexed", "hexes", "hoary",
  537. "hogan", "hokum", "hooch", "hooey", "hooky", "hubby", "hulas", "humus",
  538. "hussy", "hydra", "hying", "hymen", "hypos", "iambs", "icily", "idyll",
  539. "imams", "inapt", "ingot", "inset", "inure", "islet", "jabot", "japan",
  540. "japed", "japes", "jeeps", "jihad", "jimmy", "jinni", "joist", "joule",
  541. "joust", "julep", "junco", "kapok", "kazoo", "kebab", "ketch", "khans",
  542. "kicky", "knave", "knell", "kooks", "kooky", "krone", "krona", "kudzu",
  543. "labia", "laity", "lamas", "larch", "largo", "laxly", "lazed", "lazes",
  544. "lefty", "lemma", "lemur", "licit", "liege", "lifer", "limns", "lipid",
  545. "lisle", "llano", "loamy", "lobed", "locus", "lodes", "loges", "login",
  546. "loopy", "lotto", "louts", "luaus", "lubed", "lubes", "lucre", "lupus",
  547. "macaw", "magma", "mambo", "manna", "manse", "matzo", "maven", "medic",
  548. "mesas", "mewls", "middy", "midge", "milch", "miler", "minim", "misdo",
  549. "mocha", "mogul", "moire", "molls", "moray", "mosey", "motes", "mucky",
  550. "mufti", "murks", "musky", "mussy", "myrrh", "nabob", "nacho", "nacre",
  551. "nadir", "naiad", "natal", "naves", "neath", "nervy", "newel", "nexus",
  552. "nimbi", "ninja", "nixed", "nixes", "nodal", "noddy", "noels", "nonce",
  553. "novae", "novas", "noway", "oaken", "oakum", "oaten", "obits", "octet",
  554. "odium", "offal", "opine", "orate", "osier", "outgo", "outre", "ovoid",
  555. "ovule", "owlet", "oxbow", "paean", "palmy", "palsy", "parry", "pasha",
  556. "patsy", "pawls", "pekoe", "pesos", "pewee", "phial", "phish", "phlox",
  557. "phyla", "piing", "piker", "pilaf", "pinto", "piper", "pipit", "piton",
  558. "plait", "pocks", "poesy", "pones", "poohs", "popes", "poppa", "porno",
  559. "poser", "posit", "poxes", "prate", "prigs", "prosy", "pshaw", "pulpy",
  560. "pupae", "pupal", "purls", "pyxes", "quaff", "quasi", "quids", "quire",
  561. "quoit", "quoth", "ragas", "rajah", "randy", "rangy", "rearm", "rebus",
  562. "reedy", "reeve", "refit", "renal", "rheas", "rheum", "ricks", "riffs",
  563. "rills", "rimed", "rimes", "riven", "roans", "roger", "roils", "roods",
  564. "rosin", "roues", "rover", "rowel", "rower", "rubes", "rumba", "rupee",
  565. "rusks", "sable", "sahib", "saith", "salvo", "samba", "sappy", "sated",
  566. "sates", "satyr", "scamp", "scats", "schwa", "scion", "scone", "scows",
  567. "scrip", "scrod", "scuba", "scuds", "scull", "scurf", "seamy", "sedge",
  568. "seers", "segue", "semis", "senna", "sepal", "sepia", "septa", "serer",
  569. "serfs", "serge", "servo", "shads", "shags", "shahs", "shale", "shalt",
  570. "shank", "shard", "shill", "shims", "shirr", "sibyl", "sisal", "sises",
  571. "sitar", "skeet", "skiff", "slags", "sloes", "sloop", "slued", "slues",
  572. "snaky", "snoot", "sonar", "sonny", "sooth", "soppy", "sough", "soupy",
  573. "souse", "sower", "spake", "specs", "spiky", "spiny", "spoor", "sprat",
  574. "spume", "squab", "squaw", "staph", "stead", "steed", "stein", "sties",
  575. "stile", "stoat", "strep", "strop", "styli", "sudsy", "sully", "sumac",
  576. "sumps", "sushi", "swags", "swain", "swami", "sward", "swash", "swath",
  577. "sylph", "tamps", "tansy", "tapir", "tared", "tares", "taros", "taupe",
  578. "teals", "teary", "techs", "teeny", "telex", "tenon", "terns", "terry",
  579. "thees", "thine", "throe", "thrum", "tibia", "tines", "titan", "tithe",
  580. "toady", "toddy", "toked", "tokes", "toner", "toque", "torte", "torus",
  581. "trams", "tress", "triad", "trice", "trope", "troth", "troys", "truss",
  582. "tryst", "tuber", "tulle", "tumid", "tunny", "tutus", "twain", "twill",
  583. "tyros", "ulnae", "umbel", "umber", "umiak", "umped", "unbar", "unpin",
  584. "unwed", "usury", "uvula", "vales", "vamps", "vapid", "vaunt", "veeps",
  585. "velds", "venal", "vetch", "viand", "viols", "vireo", "vivas", "vixen",
  586. "voile", "voles", "vulva", "wacko", "wader", "wadis", "waled", "wales",
  587. "wanly", "warty", "waxen", "weals", "weepy", "wefts", "weirs", "wench",
  588. "wends", "wetly", "wheal", "whelk", "whelp", "whiny", "whist", "whits",
  589. "whorl", "wight", "wikis", "wiled", "wooer", "wormy", "wrack", "wroth",
  590. "xenon", "xylem", "yahoo", "yawed", "yawls", "yogis", "yucca", "zebus",
  591. "zilch", "zings", "zippy", "zonal", "eclat", "epees", "etude", "aggro",
  592. "aitch", "algal", "ambit", "antsy", "arsed", "baccy", "bairn", "baldy",
  593. "bally", "barmy", "beaut", "beery", "begum", "bendy", "berks", "betel",
  594. "bevvy", "bhaji", "biffs", "bijou", "bitty", "blags", "bloke", "blowy",
  595. "bodge", "bonce", "bonks", "bream", "brill", "bruit", "bumph", "burgh",
  596. "busks", "busty", "butty", "byres", "caber", "caffs", "carer", "carob",
  597. "caver", "celeb", "certs", "chard", "chivy", "chocs", "clonk", "coley",
  598. "coned", "corgi", "coxed", "coxes", "coypu", "croft", "cupid", "cuppa",
  599. "cutey", "cutie", "dagos", "deary", "defog", "demob", "dhows", "dildo",
  600. "dinar", "dippy", "dipso", "dishy", "dodgy", "drear", "ducky", "duffs",
  601. "dumbo", "effed", "expat", "faddy", "faffs", "fatso", "fatwa", "faves",
  602. "fella", "ferny", "flans", "footy", "frigs", "frosh", "fuggy", "gammy",
  603. "ganja", "gator", "gawps", "girly", "giros", "gites", "giver", "glace",
  604. "goers", "goths", "grans", "grump", "gunge", "gungy", "halal", "hammy",
  605. "hoick", "honky", "humph", "hunky", "indie", "innit", "ivied", "jammy",
  606. "jemmy", "jinks", "joeys", "jokey", "jowly", "karts", "kikes", "korma",
  607. "krill", "laird", "latte", "lexis", "lidos", "lilos", "limey", "lings",
  608. "lippy", "locos", "locum", "lolly", "lough", "lours", "lovey", "luges",
  609. "lulus", "lurgy", "mafia", "mamba", "mammy", "manky", "marge", "mater",
  610. "matey", "meany", "meths", "mezzo", "micks", "micro", "mingy", "motet",
  611. "moxie", "muzak", "muzzy", "naans", "narky", "natch", "navvy", "negro",
  612. "niffy", "nimby", "nohow", "nooky", "ocker", "oohed", "oomph", "outta",
  613. "ouzos", "pacey", "pally", "panto", "pappy", "paras", "parky", "peaky",
  614. "peaty", "pekes", "pervs", "pesto", "piney", "pinko", "pinny", "piste",
  615. "pitas", "pitta", "plebe", "plebs", "plonk", "polys", "pommy", "ponce",
  616. "poncy", "pongs", "pooed", "poofs", "porky", "poufs", "prams", "prang",
  617. "prats", "prion", "prole", "pubes", "pubis", "pukka", "pzazz", "quiff",
  618. "quins", "quint", "ragga", "ranee", "raver", "recce", "recon", "recto",
  619. "rejig", "remix", "resat", "resit", "retro", "rondo", "rotas", "roust",
  620. "rowan", "rucks", "runic", "sadhu", "saggy", "samey", "sarge", "sarky",
  621. "satay", "savoy", "scarp", "scree", "scrum", "sebum", "serif", "setts",
  622. "sicko", "sines", "skint", "skive", "skuas", "smogs", "snick", "snogs",
  623. "souks", "spams", "spics", "spiff", "spivs", "sprog", "squib", "stagy",
  624. "steno", "stoup", "swede", "swizz", "swots", "tapas", "tarns", "tarty",
  625. "tater", "teddy", "telly", "tench", "tiler", "titch", "titty", "toffs",
  626. "topee", "trews", "trier", "trugs", "tuque", "turbo", "turps", "twats",
  627. "twixt", "unlit", "unmet", "veges", "velar", "verso", "voila", "wadge",
  628. "wally", "wanks", "wazoo", "weeny", "welly", "whops", "whups", "willy",
  629. "wised", "wodge", "wolds", "wonks", "wonky", "xerox", "yetis", "yikes",
  630. "yobbo", "yogic", "yonks", "yukky", "zappy", "zines", "zingy",
  631.  
  632. /* nonsense words to provoke a non-magic solution */
  633.  
  634. "abcde", "fghij", "klmno", "pqrst", "uvwxy",
  635. "afkpu", "bglqv", "chmrw", "dinsx", "ejoty",
  636. NULL
  637. };
  638.  
  639. typedef struct Grid Grid;
  640.  
  641. struct Grid {
  642. const Trie *row[5];
  643. const Trie *col[5];
  644.  
  645. unsigned cell;
  646.  
  647. char grid[5][5];
  648. unsigned order[25][26];
  649. };
  650.  
  651. void grid_dump(const Grid *grid)
  652. {
  653. printf("%.5s\n", grid->grid[0]);
  654. printf("%.5s\n", grid->grid[1]);
  655. printf("%.5s\n", grid->grid[2]);
  656. printf("%.5s\n", grid->grid[3]);
  657. printf("%.5s\n", grid->grid[4]);
  658. printf("\n");
  659. }
  660.  
  661. int trie_cmp (const void *pa, const void *pb)
  662. {
  663. const void *const *a = pa;
  664. const void *const *b = pb;
  665.  
  666. return (*a > *b) - (*a < *b);
  667. }
  668.  
  669. int grid_different(const Grid *grid)
  670. {
  671. const Trie *words[10];
  672. unsigned i;
  673.  
  674. for (i = 0; i < 5; i++) {
  675. words[i] = grid->row[i];
  676. words[i + 5] = grid->col[i];
  677. }
  678.  
  679. qsort(words, 10, sizeof(*words), trie_cmp);
  680.  
  681. for (i = 1; i < 10; i++) {
  682. if (words[i] == words[i - 1]) {
  683. return 0;
  684. }
  685. }
  686.  
  687. return 1;
  688. }
  689.  
  690. int grid_find(Grid *grid)
  691. {
  692. if (grid->cell == 5 * 5) {
  693. if (grid_different(grid)) {
  694. grid_dump(grid);
  695.  
  696. return 1;
  697. }
  698. } else {
  699. const unsigned *order = grid->order[grid->cell];
  700.  
  701. unsigned i = grid->cell % 5;
  702. unsigned j = grid->cell / 5;
  703. unsigned u;
  704.  
  705. const Trie *row = grid->row[j];
  706. const Trie *col = grid->col[i];
  707. grid->cell++;
  708.  
  709. for (u = 0; u < 26; u++) {
  710. unsigned c = order[u];
  711.  
  712. if (row->next[c] && col->next[c]) {
  713. grid->grid[j][i] = 'A' + c;
  714. grid->row[j] = row->next[c];
  715. grid->col[i] = col->next[c];
  716.  
  717. if (grid_find(grid)) return 1;
  718. }
  719. }
  720.  
  721. grid->cell--;
  722. grid->row[j] = row;
  723. grid->col[i] = col;
  724. }
  725.  
  726. return 0;
  727. }
  728.  
  729. void init_shuffled(unsigned *order)
  730. {
  731. unsigned i;
  732.  
  733. for (i = 0; i < 26; i++) {
  734. order[i] = i;
  735. }
  736.  
  737. i = 26;
  738.  
  739. while (i) {
  740. unsigned pick = rand() % i--;
  741. unsigned swap = order[i];
  742.  
  743. order[i] = order[pick];
  744. order[pick] = swap;
  745. }
  746. }
  747.  
  748. void find(const Trie *t)
  749. {
  750. Grid grid = {{t, t, t, t, t}, {t, t, t, t, t}};
  751. unsigned i;
  752.  
  753. for (i = 0; i < 5 * 5; i++) {
  754. init_shuffled(grid.order[i]);
  755. }
  756.  
  757. grid_find(&grid);
  758. }
  759.  
  760. int main(void)
  761. {
  762. Trie *t = trie_from(data);
  763.  
  764. srand(time(NULL));
  765.  
  766. find(t);
  767. trie_destroy(t);
  768.  
  769. return 0;
  770. }
  771.  
Success #stdin #stdout 0.02s 5472KB
stdin
Standard input is empty
stdout
LAMAS
INANE
DIRGE
OSIER
SEARS