defmodule Silly do @moduledoc """ Documentation for `Silly`. """ # despite the fact that the language natively supports random selection from linked lists # I think we'd rather use a tuple here, right? random access from a tuple should be O(1) # and it's not like we're going to ever change this list @names { "curtis", "curt", "cortez", "dan", "daniel", "jenn", "jennifer", "bennifer", "nick", "nikki", "nicholas", "jason", "jayson", "jesse", "ron", "ronald", "graham", "gramm", "seanna", "burnt umber", "neil", "kneel", "gunter", "gunther", "goonter", "kyle", "kial", "ashley", "bashley", "mashley", "bryan", "brian", "broin", "calle", "chris", "christopher", "kris", "criss", "kriss", "alex", "pontus", "thomas", "tomas", "isaac", "euan", "herman", "gorman", "craig", "crag", "todd", "tod", "ars", "rich", "richard", "richie", "alexis", "alexo", "cody", "codee", "john", "jonn", "fred", "frod", "sarah", "sara", "sharrah", "django", #adventures times "jake", "jork", "marcelline", "finn", #grumps "barry", "ross", "russ", "arin", "aron", "danny", "denny", "suzy", "sooze", #2020's horrifying baby names "sekani", "ermias", "amias", "kyro", "ambrose", "amoura", "theodora", "navy", "emani", "yaritza", "zara", "mila", "cora", "bode", "zaid", "jaxton", "bryson", "chad", "bowie", "coen", "emmarie", "saniyah", "tatiana", "zhavia", "jayden", "linua", "luna", "linux", "maeve", "aurora", "olive garden", "ilsa", "isla", "milo", "asher", "atticus", "oliver", "levi", "ellis", "phoenix", "remy", "romy", "ramy", "raimi", "michelle", "marlowe", "shea", "sebastian", "sheabastian", "seb", # worst baby names "lexi", "bort", "gorb", "barf", "barfinkel", "boomquisha", "jorberto", "wenderrl", "chervy", "jamantha", "hamantha", "squorindo", "callibeth", "ezlithaborb", "elizabreth", "elizabeth", "amamba", "amambo", "amoeba", "amooba", "awooga", "shorbert", "clarm", "janarthanon", "crabitha", "tressica", "surfbort", "jennennifer", "benjammin", "robot", "tomtom", "carome", "pubert", "olga", "alicia", "eugene", "fluffy", "boris", "ian", "eeyore", "tula", "melfrid", "mike", "mork", "felicity", "erwin", "bartholemew", "melvin", "malvin", "mackenzie", "esmeralda", "gil", "sasha", "barney", "shaniqua", "sherlock", "shylock", "boy", "baby", "uthgherd", "missing texture", "meldor", "olivia", "maverick", "beberly", "danger", "merika", "yunique", "shakira", "beyonce", "vejonica", "derfla", "phelony", "moxie", "garden", "jammy", "mazen", "hunk", "prince", "cameron", "blanket", "jermajesty", "moon unit", "kimmy", "billy bob", "winifred", "wilford", "sandford", "gertrude", "pillow", "pill", "jessifer", "brick", "hope", "jack", "keith", "helga", "tiny", "willy", "lawrence", "jessica", "king", "yoshi", "ichiro", "angus", "natasha", "alice", "lilly", "astrid", "saga", "freja", "wilma", "stella", "molly", "leah", "ines", "sigrid", "celine", "lykke", "joline", "amanda", "marco", "lorenzo", "antonio", "vito", "norberto", "diego", "luca", "giovanni", "stefano", "laura", "rosa", "gianna", "pietro", "zhang wei", "liu wei", "li qiang", "chuck", "trent", "trenton", "chad", "chadwick", "ermagerd", "harry", "steve", "yolanda", "tara", "rusty", "ivana", "owin", "owen", "testy", "carl", "albert", "cornelius", "timothy", "kiko", "wilhelm", "pierre", "tiffany", "ben", "bento", "heather", "travis", "courteney", "tracy", "yang", "vivian", "ryan", "shirley", "phil", "andy", "spalding", "joao", "gabriel", "lucas", "matheus", "victor", "luiz", "noah", "benjamin", "sophia", "emma", "liam", "garol", "jimothy", "tedward", "ted", "jacob", "logan", "chloe", "samuel", "jayden", "hannah", "avery", "zoe", "madison", "carter", "felix", "leo", "charles", "korg", "thor", "brincely", "quim", "aria", "grace", "hunter", "dylan", "audrey", "austin", "jaxon", "nora", "ivy", "romy", "levi", "juliet", "parker", "piper", "sara", "cole", "ryder", "simon", "lauren", "fyodor", "mark", "quigley", "ender", #simpsons "homer", "marge", "lisa", "bart", "ralph", "seymour", "chalmers", "nancy", "moe", "edna", "nelson", "milhouse", "ned", "waylon", "martin", "willie", #ranks "captain", "marshal", "lieutenant", "mister", "mr", "doctor", "missus", "ms", "mrs", "lady", "dr", "lord", "leftenant", "ensign", "admiral", "officer", "wing commander", "vice admiral", "emperor", "super emperor", "rear admiral", "commodore", "colonel", "major general", "general", "corporal", "sargeant", "sergeant", "major", "private", "queen", "earl", "duke", "professor", # vaguely strippery names "chardonnay", "crystal", "brandy", "lola", "angel", "anastasia", "cherry", "destiny", "raven", "scarlett", "scarlet", "layla", "tawny", "trinity", "lexus", #futuramas "zaph", "zapp", "fry", "leela", "leeloo", "kif", "scruffy", "morbo", "nibbler", "farnsworth", # bojacks "bojack", "carolyn", "mr peanutbutter", #avatars "aang", "katara", "toph", "zuko", "sokka", "iroh", "appa", "azula", #ricks "morty", "rick", #uncles "buck", "sam", "tom", "fatih", #dunes "chani", "paul", "atriedes", "kwisatz", "haderach", "harkonnen", # sandersons "adolin", "kholin", "sorin", # songs of ice and fire "littlefinger", "daenarys", "khal", "sansa", "cersei", "gregor", "tyrion", "arya", "hodor", "petyr", "brienne", "robb", "daario", "bran", # stars war "luke", "leia", "chewie", "han", "solo", "ben", "darth", # homestucks "sassacre", "jegus", "egbert", "karkat", "gamzee", "vriska", "terezi", "equius", "rose", "sollux", "caliborn", "jade", "kanaya", "feferi", "aradia", "rufioh", "eridan", "roxy", "spades", "diamonds", "hearts", "clubs", "boxcars", "meenah", "scratch", "english", # treks "jean luc", "james", "scotty", "pavel", "spock", "spop", "worf", "picard", "crusher", "data", "geordi", "beverly", "wesley", # sitcoms "tobias", "funke", "gob", "bluth", "annyong", "ann", "tony", "oscar", "maeby", "swanson", "leslie", "ann", "traeger", "meagle", "pam", "jim", "angela", "toby", "jan", "michael", "scott", "kevin", "dwight", "creed", "meredith", "nellie", "darryl", "roy", "karen", "stanley", #unpopular names "weston", "declan", "xander", "theodore", "rowan", "austin", "evan", "emerson", "quinn", "quentin", "quinns", "daria", "jocelyn", "willow", "allison", "delilah", "chastity", "captain jack", "teddy", "tandy", # pratchett "vimes", "prime", # greeks "hades", "artemis", "zagreus", "charon", "sharon", "zeus", "poseidon", "hermes", "hercules", # pines "soos", "dipper", "mabel", "celestabellebethabelle", "stanford", "stan", # months "smarch", "january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december", # transformers "optimus", "megatron", "mega", "tron", "starscream", "rodimus", "kup", "jazz", "arcee", "blurr", "magnus", "springer", # games "nobuo", "zelda", "terra", "locke", "sabin", "edgar", "celes", "celeste", "lara", "croft", "samus", "kratos", "nathan", "drake", "snake", "cloud", "tifa", "aeris", "barrett", "gordon", "ezio", "ryu", "chun li", "e honda", "zangief", "ryu", "ken", "guile", "dhalsim", "isabelle", "sephiroth", "leon", "niko", "morrigan", "aloy", "batman", "joker", "baron", "callie", "marie", "catherine", "clementine", "dutch", "edith", "sonya", "agent", "mario", "luigi", "peach", "toad", "vocaloid", "sans", "papyrus", "toriel", "grillby", "skeleton", "blook", "lemming", "glados", "cave", "johnson", #muppets "kermit", "animal", "gonzo", "walter", "fozzie", "beaker", "honeydew", "benson", "rowlf", "piggy", #countries and places "britain", "edinburgh", "london", "france", "paris", "nice", "germany", "munich", "italy", "rome", "spain", "pamplona", "greece", "armenia", "holland", "amsterdam", "switzerland", "poland", "belgium", "waffle", "syrup", "canada", "alberta", "nunavut", "squamish", "richmond", "langley", "burnaby", "westminster", "victoria", "vancouver", "poco", "coquitlam", "kensington", "kits", "surrey", "kelowna", "osoyoos", "delta", "merritt", "penticton", "alberni", "duncan", "dawson", "creek", "grand", "forks", "prince", "george", "rupert", "revel", "stoke", "trail", "tofino", "saanich", "nanaimo", "toronto", "montreal", "whistler", "quebec", "newfie", "saskatchewan", "australia", "mexico", "chile", "peru", "argentina", "belize", "sweden", "norway", "florida", "vermont", "maine", "wisconsin", "montana", "jersey", "hampshire", "louis", "iana", "georgia", "kentucky", "colorado", "carolina", "kansas", "ohio", "idaho", "oregon", "nevada", "york", "dakota", "conneticut", "california", "vermont", "wyoming", "puerto", "rico", "suave", "portugal", "brazil", "paolo", "curitiba", "joao", "japan", "pan", "hokkaido", "tokyo", "ichiro", "chihiro", "korea", "koko", "coco", "uganda", "antigua", "barbuda", "barbie", "barb", "arb", "arbys", "angola", "austria", "belize", "bolivia", "bulgaria", "cuba", "czech", "djibouti", "estonia", "fiji", "guyana", "hungary", "jamaica", "jordan", "kenya", "laos", "latvia", "yemen", "tuvalu", "turkey", "tonga", "togo", "tonka", "texas", "singapore", "sierra", "leone", "sepia", "senegal", "marino", "samoa", "lucia", "vincent", "vince", #softwares "rands", "joel", #divinity "fane", "lohse", "sebille", # ---- END OF NAMES } @things { "arelli", "omoto", "slick", "slack", "ware", "puzzle", "bobble", "kart", "kirby", "katamari", "shovel", "knight", # planets "mercury", "venus", "earth", "mars", "moon", "prism", "power", "jupiter", "uranus", "neptune", "pluto", # marketing buzzwords "brand", "synergy", "analytics", "clickbait", "disrupt", "viral", "freemium", "growth", "hacking", "hyper", "local", "innovate", "innovator", "ideate", "jacking", "key", "performance", "initiative", "agile", "modern", "swift", "integration", "inter", "low hanging fruit", "millenial", "demographic", "demo", "graphic", "optimized", "omni", "channel", "placement", "engagement", "snackable", "content", "transparent", "leader", "entrepreneur", "wearable", #monsters "goblin", "zombie", "mummy", "orc", "mirage", "bear", "demon", "gorgon", "yeti", "beast", "golem", # proglangs "erlang", "elixir", "python", "ruby", "malbolge", "fortran", "rust", "go", "ecma", "java", "type", "script", # nonsense "squidge", "futter", "fram", "mc", "og", "gog", "wonk", "clorb", "churb", "squimp", "imple", "clarp", "flam", "shorp", "squiff", "splarf", "erang", "copter", "boom", "topia", "mazing", "tastic", "squim", "angle", "able", "ting", "booty", "pow", "mint", "chunk", "chunky", "whong", "focky", "dongl", "cronch", #ideophone "crunch", "boing", "swish", "thud", "twinkle", "doki", "bang", #onomatopoeia "moo", "quack", "woof", "meow", "hiss", "oink", "chirp", "roar", "cluck", "baa", "splat", #adjectives "bad", "good", "great", "small", "ugly", "fat", "childish", "fussy", "soft", "chubby", "huge", "odd", "sad", "round", "vast", "dirty", "ripe", "broad", "damp", "wet", "smelly", "funky", "fast", "speedy", "cavernous", "soupy", "happy", "stuffy", "shifty", "tangy", "thrifty", "eggy", "soggy", # rude boys "crap", "poop", "toot", "poot", "dump", "toilet", "poopfart", "shart", "stink", "stinky", "stank", "stanky", "butt", "fart", "fartfart", "fartfartfart", "farty", "dang", "darn", "booger", "snot", "cough", "bastard", # foods "food", "candy", "wheat", "bulgur", "quinoa", "cupcake", "muffin", "cookie", "loaf", "lard", "flank", "dough", "sugar", "flour", "baking", "soda", "licious", "squeeze", "lunchable", "warhead", "daddy", "quaker", "oat", "jet", "puffed", "dunkaroo", "spank", "orbit", "laffy", "taffy", "gusher", "meal", "oatmeal", "swirler", "dorito", "bubble", "shark", "bites", "marsh", "shmallow", "mallow", "powder", "cucumber", "pickle", "kale", "onion", "potato", "beet", "yam", "shallot", "ginger", "garlic", "sesame", "rice", "burger", "ham", "beef", "chicken", "pork", "lamb", "bison", "coffee", "tea", "cola", "chocolate", "vanilla", "strawberry", "straw", "raspberry", "rasp", "berry", "velvet", "nyan", # tech "stack", "overflow", "under", "over", "flow", "hack", "cyber", "truck", "techno", "video", "audio", "micro", "armor", "astro", "mono", "meta", "morph", "nano", "chloro", "nega", "open", "navi", "co", "null", "plasma", "ram", "eva", "mecha", "retro", "super", "sub", "hexa", "synchro", "synth", "thermo", "solid", "static", "section", "tank", "radio", "pack", "mass", "jig", "jug", "jag", "zig", "latch", "implant", "heavy", "fluid", "gel", "drill", "cube", "cone", "pyramid", "tower", "hedron", "buoy", "baffle", "bank", "stream", "time", "tractor", "vial", "vertex", "point", "wave", "weave", "wand", "e-cybo", "pooch", "crypto", # misc "stain", "spot", "creep", "trap", "tarp", "shop", "load", "fudge", "blister", "bill", "bone", "bugle", "card", "cannon", "celery", "chance", "chord", "child", "cloak", "copy", "cow", "frog", "deer", "ape", "donkey", "carp", "crappie", "minnow", "squirrel", "vole", "mole", "dirt", "dust", "dog", "shep", "dragon", "drake", "drop", "drug", "duck", "edge", "elbow", "error", "fibre", "finger", "flax", "flood", "foam", "fog", #songs "music", "trumpet", "clarinet", "tuba", "french", "horn", "bass", "timpani", "cymbals", "trombone", "ham-flute", "wii-u", "gerudo", "monsta", "mash", "buttsweat", "grove", "classic", "rule", "world", "duran", "graffiti", "safe", "sound", "astronaut", "panic", "disco", "psycho", "killer", "solar", "stone", "stocking", "garter", "belt", "burning", "spider", "empty", "threat", "cherry", "star", "scream", "knuckles", "fruit", "gallon", "game", "goose", "geese", "ghost", "gold", "grease", "gym", "helmet", "hemp", "ice", "icon", "island", "jacket", "karate", "kick", "kidney", "latex", "lunch", "lettuce", "mallet", "march", "organ", "panther", "panties", "panty", "undies", "knickers", "boxers", "underoo", "emoji", "motion", "smarmy", "pear", "pig", "pizza", "bagel", "pop", "pound", "propane", "accessories", "rhythm", "rock", "roll", "saxophone", "ophone", "seagull", "spaghetti", "spaghett", "ravioli", "fusilli", "chef", "boyardee", "tuna", "umbrella", "wig", "zipper", "britches", "mystery", "bench", "secret", "mouse", "house", "thunder", "hunter", "fisher", "hook", "bean", "harvest", "mixer", "hand", "finger", "nose", "eye", "belly", "jean", "plan", "floppy", "disk", "drive", "horse", "horsehorse", "horsehorsehorse", "horsehorsehorsehorse", "staple", "face", "ace", "arm", "ball", "cheek", "monkey", "shin", "shine", "button", "byte", "canyon", "dance", "crayon", "sausage", "meat", "bacon", "wad", "napkin", "device", "cape", "chair", "person", "kitten", "puppy", "book", "clamp", "cloud", "code", "coast", "coin", "space", "key", "bucket", "heart", "stapler", "mug", "bottle", "cable", "note", "lamp", "shelf", "dong", "board", "job", "knife", "thing", "phone", "sweat", "pant", "boot", "sock", "socks", "hat", "ring", "wang", "wrap", "holder", "pen", "bag", "sword", "shield", "spear", "staff", "shaft", "slab", "grub", "song", "axe", "lamp", "club", "cage", "hole", "ass", "chum", "chump", "champ", "chomp", "chimp", "jerk", "jork", "jark", "foot", "spud", "cord", "light", "tree", "place", "bag", "grime", "sludge", "cloth", # verbs "jump", "hop", "aggrieve", "abscond", "twirl", "spin", "smell", "slap", "smack", "poke", "prod", "drop", "punch", "grab", "throw", "thrust", "slide", "dunk", "braise", "crisp", "roast", "boil", "poach", "bake", "fry", "sizzle", "saute", "shake", "werkt", "scatter", "slide", "dice", "hurl", "buy", "huck", "toast", "align", "sell", "move", "shoop", "trade", "steal", "flip", "blast", "clean", "hide", "pinch", "grasp", "palm", "examine", "taste", "ingest", "swallow", "snort", "juggle", "lift", "eat", "quaff", "chug", "spine", "crack", "fear", "assemble", "chug", "choogle", #colors, "green", "magenta", "royal", "orange", "purple", "gron", "blue", "bloo", "chartreuse", "pink", "plank", "red", "yellow", "yollo", "teal", "teel", "plaid", "polka dot", "polka", "dot", "chermise", "stripe", "striped", # sounds "oo", "ooo", "oooo", "hu", "froo", "shu", "mar", "blib", "mub", "bluss", "gya", "dwaa", "bor", "flus", "shurb", "gub", "goob", "adze", "poob", "boop", # random words "bowl", "quiet", "bond", "prestige", "crude", "hive", "shiver", "shudder", "manage", "wonder", "wind", "shape", "industry", "business", "blade", "sheath", "diplo", "mat", "mart", "check", "balance", "runner", "walker", "model", "control", "deport", "report", "port", "tune", "tone", "bonk", "bunk", "golf", "gulf", "finance", "fi", "nance", "flush", "floosh", "sacred", "profane", "traffic", "truffle", "summit", "valley", "sulphur", "eggs", "cottage", "cabin", "steam", "punk", "cope", "rise", "fall", "sphere", "gem", "free", "late", "arch", "pull", "chord", "blank", "fax", "like", "weed", "gloom", "grudge", "ridge", "leash", "route", "stop", "deluxe", "supreme", "width", "height", "pure", "brouhaha", "brou", "haha", "malarkey", "ma", "larkey", "non", "sense", "wabbit", "codswallop", "mugwump", "mug", "wump", "cods", "wallop", "nin", "compoop", "donny", "brook", "petti", "shenanigan", "she", "nanigan", "snolly", "goster", "ulence", "gubbin", "doozy", "fard", "bumber", "shoot", "fuddy", "duddy", "buddy", "gobbledy", "troglo", "vomit", "widder", "shins", "bloviate", "gym", "squat", "rack", "weight", "heavy", "mat", "matt", "tamarind", "efficient", "desert", "rain", "miss", "you", "everything", "girl", "boy", "cantankerous", "callipygian", "dudgeon", "firkin", "folderol", "squish", "squash", "moosh", "mayonnaise", "mayo", "naise", "gravy", "butter", "catsup", "relish", "kraut", "mustard", "ketchup", "vinegar", "socks", "shorts", "flummox", "hoosegow", "ornery", "orrery", "ordinary", "nary", "regular", "boring", "mediocre", "forgettable", "fancy", "namby", "pamby", "goober", "yahoo", "horror", "comedy", "tragedy", "bibble", "yule", "hole", "hum", "zinger", "hammer", "loquent", "mania", "frenzy", "madness", "snicker", "snack", "slash", "swoosh", "galumph", "frisson", "fudge", "quaff", "freude", "family", "feud", "jeopardy", "lethal", "bang", "shot", "down", "smart", "smort", "salt", "pepper", "boye", "wing", "love", "what", "who", "where", "why", "when", "goop", "gump", "glamp", "squink", "mimi", "chart", "chaff", "wily", "wobbly", "wibbly", "timey", "wimey", "surprise", "find", "watch", "event", "travel", "health", "joke", "glass", "tumbler", "policy", "letter", "floor", "group", "term", "boat", "street" } @tld { "mil", "gov", "org", "edu", "com", "net", "af", "ca", "co.uk", "ru", "pizza", "online", "biz", "plumbing", } @alphanum { "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" } defp number_of_things do tuple_size @things end @doc """ raindrops on roses and whiskers on kittens bright copper kettles and warm woolen mittens brown paper packages tied up with strings this is a tuple just loaded with things when the dog bits or the bee stings or the dog bites a bee I think about some of my favorite things and bite the dog back """ def things do @things end @doc """ Pull a random thing out of the set ## Examples Test that we get a word from the list of words. iex> Enum.member?(Tuple.to_list(Silly.things), Silly.random_thing()) true """ def random_thing do elem(things(), :rand.uniform(number_of_things()-1)) end defp number_of_names do tuple_size @names end @doc """ Get a tuple containing all the names """ def names do @names end @doc """ Pull a random name out of the set ## Examples Test that we get a word from the list of words. iex> Enum.member?(Tuple.to_list(Silly.names), Silly.random_name()) true """ def random_name do elem(names(), :rand.uniform(number_of_names()-1)) end @doc """ return true or false, at about equal probability 100 coin flips should contain both a true AND a false value iex> Enum.member?(Enum.map(1..100, fn _ -> Silly.coin_toss() end), true) true iex> Enum.member?(Enum.map(1..100, fn _ -> Silly.coin_toss() end), false) true """ def coin_toss do :rand.uniform(2) == 2 end @doc """ Just grab a word, at random """ def random_word do if coin_toss(), do: random_name(), else: random_thing() end @doc """ Generate a random name, like "chastity truckagile" """ def name do "#{random_name()} #{random_thing()}#{random_thing()}" end @doc """ Generate a random slug, like "chastity-truckagile" """ def slug do String.replace(name(), " ", "-") end @doc """ A tuple containing both letters AND numbers """ def alphanums do @alphanum end defp number_of_alphanums do tuple_size @alphanum end @doc """ You know, like "a", or "S", or "7" """ def random_alphanum do elem(alphanums(), :rand.uniform(number_of_alphanums()-1)) end @doc """ a word and three alphanumeric characters, like "spud-92D" or "fart-8dF" """ def short do short_str = "#{random_word()} #{random_alphanum()}#{random_alphanum()}#{random_alphanum()}" String.replace(short_str, " ", "-") end @doc """ a name and four alphanumeric characters, like "grizzle-beefshanks-A2dD" """ def long do long_str = "#{name()} #{random_alphanum()}#{random_alphanum()}#{random_alphanum()}#{random_alphanum()}" String.replace(long_str, " ", "-") end @doc """ a tld, like "gov" or "mil", or "edu" """ def tld do elem(@tld, :rand.uniform(tuple_size(@tld) - 1)) end @doc """ a domain, like "socks.edu" or "mustard.gov" """ def domain do if coin_toss() do "#{String.replace(random_word(), " ", "-")}.#{tld()}" else "#{String.replace(random_word(), " ", "-")}.#{String.replace(random_word(), " ", "-")}.#{tld()}" end end @doc """ an email address, like michael-roundfortran-IfgB@cage.blook.af """ def email do "#{long()}@#{domain()}" end end