Comment: | initial commit |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
15214295416bc1eda60fb8df4f67a01d |
User & Date: | lexi on 2018-09-24 23:18:14 |
Other Links: | manifest | tags |
2018-11-11
| ||
10:19 | add ransul check-in: 9a711d8a06 user: lexi tags: trunk | |
2018-09-24
| ||
23:18 | initial commit check-in: 1521429541 user: lexi tags: trunk | |
23:14 | initial empty check-in check-in: bbb86f3bf6 user: lexi tags: trunk | |
Added argue.ml version [de71563f83].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 |
type node = L of string | R of node array | C of string array | B of node list | O of node | F of (unit -> node) let punct = C[| "."; ","; "?"; " ?"; "??"; " ??"; " ? ?"; "!"; " !"; "!!"; " !!"; " ! !"; "…"; "..."; ". . . "; "...!"; "!?"; " !?"; " ! ?"; " <3"; " ♥"; "~"; " ~uwu~"; " XD"; " :D"; " :P"; " ;)"; " :)"; " :("; " ಠ_ಠ"; " ^_^"; " >_>"; " >_<"; |] let dimin = C [| "hon"; "honey"; "honeybunch"; "dear"; "dearie"; "my dear"; "sweetie"; "sweetheart"; "bro"; "babe"; "dude"; "bruh"; "my man"; "sweetcheeks"; "kiddo"; "kid"; "daddy"; "folks"; "girl"; "my child"; "my sweet summer child"; "pumpkin"; "punkin"; "my boy"; "little boy"; "little girl"; "punk"; "bb"; "genius"; "cuck"; "bitch"; "buddy"; "bud"; "pal"; "silly"; "silly boy"; "dummy"; |] let writers = C[| (* miscellaneous assholes & multipurpose tools *) "lacan"; "derrida"; "chomsky"; "nietzsche"; "baudrillard"; "beaudrillard"; "freud"; "pinker"; "žižek"; "zizek"; "foucault"; "deleuze"; "delueze"; "kant"; "hume"; "russell"; "russel"; "descartes"; "guattari"; "guatari"; "richelieu"; "hegel"; "heidegger"; "de tocqueville"; "de toqueville"; "friedman"; "keynes"; "hobbes"; "bacon"; "avicenna"; "schopenhauer"; "camus"; "hamilton"; "schwarzenegger"; "rousseau"; "rawls"; "goethe"; "hobbes"; "friedman"; "fromm"; "hubbard"; "johnson"; (* greeks *) "plato"; "aristotle"; "socrates"; "aristophanes"; "democritus"; (* commies *) "trotsky"; "comrade trotsky"; "lenin"; "comrade lenin"; "mao"; "marx"; "hoxha"; (* there are a lot of ways to misspell that man's name *) "kierkegaard"; "kierkegard"; "keirkegaard"; "keirkegard"; (* names i just made up*) "o'dair"; "wilson"; "saint-madeleine"; "sampson-crusoe"; "lambert"; "hernández"; "duchamp"; "roberts"; "michaud"; "bägelstein"; "braustwitz"; "lawrence"; "smith"; (* elvish word generator *) "harviorha"; "vieluval"; "beceou"; "ilvëthiorá"; "lioralie"; "bainon"; "alherdor"; "lenusá"; (* fictional characters *) "dracula"; "voight-kampff"; "bond"; "thranduil"; "hood"; (* me *) "hale"; |] let interj = C [| "wow"; "w o w"; "lmao"; "lmfao"; "rofl"; "no"; "nope"; "wrong"; "nuh-uh"; "lol"; "haha"; "um"; "k"; "okay"; "ok"; "amazing"; "alright"; "now"; "jesus"; "oh boy"; "boy"; "man"; "oh man"; "oh my"; "oh god"; "god"; "oh wow"; "oh my sweet summer child"; "my sweet summer child"; "yo"; "but"; "so"; "no way"; "fake"; "holy shit"; "holy crap"; "what the fuck"; "ugh"; "ughhh"; "ugghh"; "uugh"; "yuck"; "ew"; "gross"; "try and keep up"; |] let disagreements = C[| "well"; "well maybe"; "well, maybe"; "well, no"; "well, actually"; "well actually"; "okay well"; "actually"; "maybe"; "but"; "and"; "so"; "first off"; "firstly"; "okay so first off"; "okay well firstly"; |] let chance i = (Random.int i) = 0 let pick (r : 'a array) : 'a = r.(Random.int(Array.length r)) let quote x = F(fun () -> if chance 30 then R[| B[L"\""; x ;L"\""]; B[L"“"; x ;L"”";]; |] else x) type word = A of string | An of string let rude_adjs = [| A "smelly"; A "gross"; A "far-right"; A "right-wing"; A "whiny"; A "childish"; A "stupid"; A "thoughtless"; A "worthless"; An "inane"; An "idiotic"; A "fucking"; A "fuckin"; A "pissy"; A "dumbfuck"; A "thick"; A "sad"; A "pathetic"; A "witless"; A"horny"; A "useless"; An "irrational"; |] let rude_nouns = [| A "dumbass"; An "asshole"; A "jerk"; A "dipshit"; A "baby"; A "nazi"; A "chucklefuck"; A "pig"; An "ass"; A "dork"; A "geek"; A "nerd"; A "loser"; A "whiner"; A "wanker"; A "gobshite"; A "wingnut"; A "boob"; A "fuck"; A "fucker"; A "cuck"; A "yokel"; A "feeb"; A "thug"; A"gringo"; |] let makeinsult () = let adj = if chance 2 then Some(pick rude_adjs) else None in let noun = pick rude_nouns in L(match adj, noun with | None, A(n) -> "a " ^ n | None, An(n) -> "an " ^ n | Some(A(a)), A(n) | Some(A(a)), An(n) -> "a " ^ a ^ " " ^ n | Some(An(a)), A(n) | Some(An(a)), An(n) -> "an " ^ a ^ " " ^ n);; let starters = R[| interj; interj; disagreements; |] let byes = C[| "thanks"; "thx"; "kthx"; "kthxbye"; "bye"; "bye now"; "goodbye"; "bye-bye"; "byeee"; "byeeee"; "love you too"; "byebye"; "pls and thx"; "please and thanks"; "please and thank you"; "okay"; "have a nice day"; "goodnight"; "if you know what i mean";|] let closers = R[| byes; dimin; B[byes; O(punct); L" "; dimin;];|] let ewe = C[| "you"; "u"; "you"; "u"; "you"; "u"; "you"; "u"; "you're";|] let yore = R[| L"your"; L"you're"; L"ur"; L"yr"; L"u're"; B[ewe; L" are"]; B[ewe; L" r"];|] let pleez = C[|"please"; "pls"; "plz";|] let poscmds = R[| L "grow up"; L "learn to read"; B[L "listen to "; yore; O(L " "); L "self"]; B[L "calm "; yore; R[| B[O(L " "); L "self"; O(L" down")]; L" tits"; |]]; L"calm down"; L"calm dowm"; B[L "use "; yore; L " brain"]; B[C[|"read"; "listen to"|]; L" what "; yore; C[|" sayin"; " saying"|]]; B[L "think before "; ewe; L " speak"]; L "try again"; L "try harder"; L "explain"; B[L "explain "; yore; O(L " "); L "self"]; B[L "explain "; yore; L " reasoning"]; B[L "explain "; yore; L " logic"]; B[L "explain "; yore; L " evidence"]; B[L "show me "; yore; L " evidence"]; L "go away"; L "check the bible"; L "pay attention"; B[L "learn "; yore; L " place"]; L "shut up"; L "shut the fuck up"; L "stop talking"; L "shut your mouth"; L "answer my question"; L "read a book"; B[L "read "; O(L"some "); writers]; B[L "read "; O(L"some "); writers]; B[L "read "; O(L"some "); writers]; L "go to hell"; L "burn in hell"; L "go to jail"; L "notice me senpai"; B[L "stop contradicting "; yore; O(L " "); L "self"]; L "alert the presses"; L "get a job"; L "learn to take a joke"; L "stop projecting"; L "speak english"; L "face facts"; L "pay me"; L "die in a fire"; B[L"stop being "; F makeinsult;]; B[L"stop being such "; F makeinsult;]; B[L"quit being "; F makeinsult;]; B[C[|"learn ";"lern ";"lrn "|]; O(L"how "); C[|"to ";"2 ";"too ";"two "; "";|]; C[|"spell";"spel";"spele";"speling";"spelling"|]]; |] let negcmds = R [| B[L"be "; F makeinsult;]; B[L"be such "; F makeinsult;]; B[L"act like such "; F makeinsult;]; B[L"keep acting like such "; F makeinsult;]; B[L"make "; F makeinsult; L " of "; yore; O(L " "); L "self"]; B[L"make such "; F makeinsult; L " of "; yore; O(L " "); L "self"]; L"be that way"; L"talk like that"; L"keep whining"; L"whine"; |] let commands = R[| poscmds; poscmds; poscmds; B[C[|"don't "; "dont "|]; negcmds]; |] let thats = C[| "that is"; "that's"; "it's"; "it is";|] let thathas = C[| "that has"; "that's"; "it has"; "it has";|] let thatsnot = C[| "that isn't"; "that's not"; "it's not"; "it isn't"; "that is not"; "it is not";|] let theirs = C[| "there is"; "there's"; "theirs"; "their's"; |] let thathasnt = C[| "that hasn't"; "that's not"; "it's not"; "it hasn't"; "that has not"; "it has not";|] let im = C[| "i'm"; "i am"; "I am"; "i'm"; "im"; "Im"; |] let comments = R [| L "cool story"; L "fuck me"; L "fuck you"; B[thats; L " wrong"]; B[thats; L " not even wrong"]; B[thats; L " so wrong"]; B[thatsnot; L " correct"]; B[thatsnot; L " right"]; B[thats; L " incorrect"]; B[thats; L " untrue"]; B[thatsnot; L " true"]; B[ewe; L " are wrong"]; B[thats; L " never been true"]; B[thathas; L " never been true"]; B[thathasnt; L " ever been true"]; B[ewe; L " have no evidence"]; B[ewe; L " can't prove it"]; B[ewe; L " can't prove that"]; L "bored now"; L "checkmate, atheists"; L "i'm not really into pokemon"; L "whatever"; B[ O(L"how "); L"are "; ewe; O(L" even"); L" real" ]; B[L"are "; ewe; O(L" even"); L" a person" ]; B[L"are "; ewe; L" a bot" ]; B[L"i think "; yore; O(L" actually"); O(L" just"); L" a bot"]; L "you need jesus"; L "you need Jesus"; L "you need you some jesus"; B[O(B[yore; L" "]); L"so edgy"]; L "real edgy"; B[thats; L" nice"]; B[thats; O(L" so"); L" fake"]; B[thats; L" cool"]; B[L"good for "; ewe]; B[O(L "watch out "); L "we got a";C[|" real ";"n "|]; L"edgelord here"]; B[L "are "; ewe; C[| " okay"; " alright"; " well"; " diseased"; " sick"; " ok"; " OK"; |]]; B[L "do "; ewe; L" need help"]; B[L "no "; ewe]; B[O(L "it "); L"takes one to know one"]; B[L"where do i even start"; O(B[L" with"; R[|ewe;L" this one"; L" this bullshit"|]])]; B[im; L" not "; C[|"gonna";"going to"|]; C[|" repeat myself"; " say it again"|];]; L"i won't repeat myself"; L"i won't repeat myself again"; L"i won't say it again"; L"don't make me repeat myself"; B[ewe; L" make me laugh"]; B[ewe; L" are very funny"]; B[ewe; L" should be a comedian"]; B[yore; L" very funny"]; B[yore; L" a terrible person"]; B[yore; L" a terrible person, aren't "; ewe]; B[yore; L" a terrible human being"]; B[yore; L" a terrible excuse for human being, aren't "; ewe]; B[O(L"and "); C[|"who";"what"|]; O(L" even"); L" are ";ewe;O(L" supposed to be")]; B[L"delete ";yore;L" account"]; B[L"who do ";ewe;L" think ";ewe;L" are";]; B[L"what are ";ewe; O(L" even"); L" talking about"]; B[ewe; L" mad"]; L"umadbro"; B[L"do "; ewe; O(L" actually"); O(L" even"); L" know what that word means"]; L"blocked and reported"; B[L"what are ";ewe; O(L" even"); C[|" on"; " smoking"|]]; B[L"do ";ewe; O(L" even"); L" lift"]; B[L"are ";ewe; O(L", like,"); L" high"; O(L" or something")]; L"look who's Mad Online"; B[L"are ";ewe; O(L" seriously"); L" Mad Online"; O(L " right now")]; B[L"i like ";ewe]; L"wait for it"; B[ewe; L " still haven't answered my question"]; B[yore; L " an idiot"]; B[L "i will pray for "; ewe]; L"let's do this"; L"fight me irl"; L"come at me"; B[L"how can you ";ewe; C[| " say "; " think "; " believe " |]; C[| "that"; "those things"; "such a thing"; "something like that"; "things like that"; "lies"; "bullshit";|]; ]; B[im; L" so sad for "; ewe]; L"send nudes"; L"jesus loves you"; B[im; L" entitled to my opinion"]; B[L "have "; ewe; L" even heard of the first amendment"]; B[thats; L" called free speech"]; L"a/s/l"; B[L "do "; ewe; L" kik"]; B[thats; L " hot"]; B[ewe; L " have a conflict of interest"]; B[L "why should i listen to "; ewe]; B[yore; L " going to hell"]; B[yore; L " going to go to hell"]; B[theirs; L" a special place in hell for "; O(L"people like "); ewe]; B[L"do "; ewe; O(L" even"); L" know who i am" ]; B[L"it's like "; ewe; L" don't"; O(L" even"); L" know who i am" ]; B[im; L" trying to remove it"]; B[L "do "; ewe; L" need a safe space"]; B[thats; L" just my opinion"]; L"then what"; L"seriously"; B[L "how do "; ewe; L" know"; R[| L""; L" that"; B[L" "; thats; L " true";]|]]; B[thats; L" circular reasoning"]; L"https://yourlogicalfallacyis.com/bandwagon"; L"https://yourlogicalfallacyis.com/appeal-to-authority"; L"https://yourlogicalfallacyis.com/slippery-slope"; L"https://yourlogicalfallacyis.com/strawman"; L"https://yourlogicalfallacyis.com/ad-hominem"; L"https://yourlogicalfallacyis.com/no-true-scotsman"; L"https://yourlogicalfallacyis.com/personal-incredulity"; L"https://yourlogicalfallacyis.com/begging-the-question"; B[thats; L" a fallacy"]; B[thats; L" incoherent"]; B[thats; L" illogical"]; B[thats; L" self-contradictory"]; B[ewe; L" just said it wasn't"]; B[ewe; L" just said that wasn't true"]; B[L"now "; yore; L" just lying"]; L"that makes no sense"; L"what"; L"wait back up"; L"hold on"; B[L"hold ";yore;L" horses"]; B[yore; L" contradicting yourself"; O(L" again")]; B[L "how old are "; ewe; O(L" really"); O(L" even")]; B[O(L"i think "); yore; O(L" being"); L" intellectually dishonest"; O(L" again")]; B[ewe; L " don't "; O(L"really "); O(L"even "); L"know what "; C[|"that word means";"those words mean";"words mean"|]; O(B[L", do ";ewe])]; B[O(L"why do "); ewe; L" hate america"]; B[O(L"someone "); L"alert the presses"]; B[C[|"gravity";"evolution";"abortion";"atheism";"feminism";"misandry"|]; L" is "; O(L"still "); C[|"just";"only";"nothing but"|]; L" a theory";]; B[yore; L" parents must be "; O(L"very "); C[|"proud of ";"ashamed of ";"angry at ";"sad for "|]; ewe]; B[L"are "; ewe; L" being sarcastic"]; B[L"are "; ewe; L" for real"]; B[L"are "; ewe; L" actually serious"]; B[L"no wonder "; ewe; L" don't have a girlfriend"]; B[L"no wonder "; ewe; L" dont have a girlfriend"]; B[L"no wonder "; ewe; L" haven't got a girlfriend"]; B[L"can't "; ewe; C[|""; " people"; " all"; "ppl"|]; O(L " ever"); O(L " even"); O(L " just"); O(L " learn to"); L" take a joke"]; B[L"can't take a joke can "; ewe]; B[L"can't take a joke, can "; ewe]; B[L"can't take a joke, can we"]; B[yore; O(L " so"); L" mad"]; B[im; O(L " so"); L" mad"]; B[L"are ";ewe;L" projecting"]; B[L"i think ";yore;L" projecting"]; L"tits or gtfo"; L"gtfo"; B[thats; L" illegal"]; B[thats; L" illegal"]; B[thatsnot; L" legal"]; B[thatsnot; L" lawful"]; B[thats; L" problematic"; O(B[O(L","); L" for a couple reasons";]) ]; L"so what"; L"i don't care"; L"i dont care"; L"why should i care"; B[ R [| B[L"all "; yore; L" doing is"]; B[yore; C[|"";" only";" just"|]]; |]; L" embarassing "; yore; R[| B[O(L " "); L "self"]; B[O(L " own"); L " dumb ass"]; |] ]; B[ewe; L" know i don't care, right"]; B[L"i can't believe "; ewe; L" actually went there"]; B[thats; L" a sin"]; B[yore; L " sick"]; L"time for some game theory"; L"time 4 some game theory"; B[ O(B[O(L "maybe "); ewe; L"should "]); L"shut "; O(L"the fuck "); L "up"; O(B[L" while "; C[| "other people "; "the adults "; "the grown-ups "; "smarter people "; "better people "; "the smart people "; |]; L"are talking";]) ]; B[L"are "; ewe; L" always "; R[| B[L"this "; C[| "dense"; "thick"; "slow"; "stupid"; "annoying"; "angry"; "useless"; "much of a cuck"; "much of an asshole"; "irritating"; "irrational"; "illogical"; "dumb"; "horny"; |]]; B[O(L"such "); C[| "a cuck"; "a honkey"; "a gringo"; "a baby"; "a pansy"; "a loser"; "an idiot"; "an asshole"; "a yokel"; "a dumbfuck yokel"; "an asshat"; "a dumbfuck honkey"; "a dumbfuck yokel asshat"; "a piece of shit"; "a turd"; "a party-pooper"; "a wanker"; "a burden"; "a hindrance"; "an obstacle"; |]]; |]]; B[ewe; L" have to tell me if "; yore; L" a bot"; O(B[O(punct); L" it's the law"])]; L "this is america"; B[thats; O(L" called"); L " a power move"]; L "i can't even"; L "i cant even"; L "don't know, don't care"; B[L "are "; ewe; L" "; O(L"actually "); O(L"just "); C[|"trying to"; "tryin to"; "tryna"|]; L" "; C[|"bore";"whine";"wheedle";"bitch";"cry"|]; L " me "; C[|"to death";"into submission"|]; O(L" or something") ]; B[C[|"its";"it's"|]; L" time for some game theory"]; |] let insist = R[| B[ewe; L " need to"]; L"try and"; R[| L"do us a favor and"; L"do us all a favor and"; L"do us both a favor and"; L"do everyone a favor and"; L"do the world a favor and"; L"do me a favor and"; B[L "do "; yore; O(L " "); L "self a favor and"]; |]; L"try &"; B[ewe; O(L" really"); L " gotta"]; B[ewe; O(L" really"); L " should"]; B[L "can "; ewe]; B[L "why don't "; ewe]; B[L "why dont "; ewe]; B[L "y dont "; ewe]; L "time to"; B[L"time for ";ewe;L" to"]; L "fuck you"; L "fuck you,"; |] let advs = O(O(C[|"";" already";" next time";" again";|])) let insults = R[| commands; B[C[|"please "; "pls "; "plz "; ""|]; insist; L" "; quote poscmds; advs]; B[insist; C[|" please "; " pls "; " plz "; " "|]; quote commands; advs]; B[insist; L" "; quote poscmds; advs; C[|" please"; " pls"; " plz"; ""|];]; B[ C[|"pls 2 "; "lern2"|]; quote poscmds; ]; B[O(B[ewe; L" "]); L"better "; quote poscmds;]; B[O(B[ewe; L" "]); L"better not "; quote negcmds;]; B[ C[|"fine"; "okay"; "sure"; "whatever"; "w/e"; "k"; "ok"|]; O(punct); L " "; negcmds; O(punct); L " see if i care"; O(punct); ] |] let rec realgrammar = R [| B[starters; punct]; B[starters; L ", "; quote dimin; punct]; B[O(B[starters; L" ";]); insults; O(B[L ", "; quote dimin]); punct]; B[O(B[starters; L" ";]); insults; O(B[L ", "; quote dimin]); punct]; B[O(B[starters; L" ";]); insults; O(B[L ", "; quote dimin]); punct]; B[O(B[interj; punct; L" ";]); quote comments; O(punct); O(B[L" ";closers])]; (* extremely leftist voice *) B[ O(B[starters; O(punct); L" "]); R[| B[L "have "; ewe; O(L" ever"); O(L" even"); L" read "; C[|"any ";"any ";"any ";"a single word of ";"";"";"";"";|]; writers; O(L" at all")]; B[ C[|"i don't think"; "i don't believe"; "i doubt"; "doubt"; "really doubt"; "really gotta doubt"|]; C[|" that ";" if "; " "|]; ewe; O(L" have"); O(L " even"); L" read "; C[|"any ";"any ";"any ";"a single word of ";"";"";"";"";|]; writers ]; B[L"maybe if ";ewe;C[|"";"'d";" had"|];L" read "; writers; L " you wouldn't be "; O(L"such "); F makeinsult;]; |]; O(B[O(L","); L" "; quote dimin]); O(punct); ] |] let grammar = F (fun () -> match Random.int 32 with | 0 -> B[ C[| "okay so (1/"; "well first off (1/"; "so (1/"; "alright so (1/"; |]; F(fun () -> L(string_of_int ((Random.int 200)+53))); L")"]; | 1 -> B[L"\""; realgrammar; L"\""]; | 2 -> B[L"“"; realgrammar; L"”"]; | 3 | 4 -> B[L"*"; yore;]; | _ -> realgrammar);; (* this is horrific *) let iter c fn = let rec loop i = fn i; if i = c-1 then () else loop (i+1) in loop 0 let titcase x = let len = String.length x in let buf = Bytes.of_string x in iter len (fun i -> if i = 0 then let c = Bytes.get buf (i) in if c <= 'z' && c >= 'a' then Bytes.set buf (i) (char_of_int ((int_of_char c)-32)) else () else if i != len-1 && (Bytes.get buf i = ' ' || Bytes.get buf i = '*') then let c = Bytes.get buf (i+1) in if c <= 'z' && c >= 'a' then Bytes.set buf (i+1) (char_of_int ((int_of_char c)-32)) else (); else (); ); Bytes.to_string buf;; let randcap x = match Random.int 6 with | 0 -> String.uppercase_ascii x | 1 -> titcase x | _ -> x let rec eval : node -> string = function | L(s) -> s | R(n) -> eval (pick n) | B(l) -> List.fold_left (fun x y -> x ^ (eval y)) "" l | C(a) -> pick a | O(n) -> if chance 2 then (eval n) else "" | F(f) -> eval (f ()) let () = Random.self_init (); print_string (randcap (eval grammar)) |
Added badbiobot.ml version [3931f272bd].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
type node = N of node list | S of string | R of node array | Many of node * int * string | P | O of node | Filter of (string->string) * node;; let gclass = R[|S"Warrior"; S "Bard"; S "Ranger"; S "Wizard"; S "Mage"; S "Paladin"; S "Rogue"; S "Ninja"; S "Warlock"; S "Champion"; S "Barbarian"; S "Assassin"; S "Conjurer"; S "Summoner"; S "Fighter"; S "Berserker"; S "Druid"; S "Orc"; S "Goblin"|] let name = R [| S "Stalin"; S "Hitler"; S "Marx"; S "Kony"; S "Mao"; S "Mussolini"; S "Trump"; S "Ted Cruz"; S "esr"; S "Richard Dawkins"; S "Mishima"; S "Nixon"; S "Kissinger"; S "Reagan"; S "Erdogan"; S "Hillary"; S "Clinton"; S "Bernie"; S "Sanders"; S "David Cameron"; S "Thatcher"; S "Nigel Farage"; S "McCarthy"; S "Putin"; S "Frank Underwood"; S "Andrew Jackson"; S "Sam Harris"; S "Christopher Hitchens"; S "Columbus"; S "Julian Assange"; S "Marcus Cicero"; S "Caligula"; S "Nero"; S "Commodus"; S "Caracalla"; S "Constantine"; S "Atilla the Hun"; S "Glenn Greenwald"; S "Ed Balls"; S "Edward Snowden"; S "Genghis Khan"; |] let nomen = R [| S"nationalist"; S "capitalist"; S "Libertarian"; S "atheist"; S "conservative"; S "Marxist"; S "beta"; S "rationalist"; S "Republican"; S "Neoreactionary"; S "communist"; S "moe"; S "NRx"; S "racial realist"; S "hacktivist"; S "European"; S "European-American"; S "white separatist"; S "Anonymous"; S "heterosexual"; S "intellectual"; S "moderate"; S "sapiosexual"; S "intellectual"; S "egalitarian";|] let adj = R [|nomen; S "circumgender"; S "transracial"; S "free-thinking"; S "incel"; S "proud"; S "rational"; S "straight"; S "opinionated"; S "politically active"; S "traditional"; S "pro-life"; S "angry"; S "white"|] let band = R[|S"Metallica"; S "Nine Inch Nails"; S "Taylor Swift"; S "Drake"; S "Run The Jewels"; S "Daft Punk"; S "Amanda Palmer"; S "Coldplay"; S "Radiohead";|] let trendy_food = R [| S "bacon"; S "vodka"; S "beer"; S "wine"; S "coffee"; S "whiskey"; S "Soylent"; S "steak"; S "kale"; |] let lang = R [| S "Ruby"; S "Rails"; S "Python"; S "Scala"; S "Java"; S "PHP"; S "Haskell"; S "LISP"; S "JavaScript"; S "node.js"; S "React"; S "Backbone"; S "Polymer"; S "Ember"; S "Angular"; S ".NET"; S "C#"; S "F#"; S "Visual Basic .NET"; S "PowerShell"; S "Meteor.js"; S "jQuery"; S "Linux"; S "GNU/Linux"; S "UNIX"; S "AWK"; S "bash"; S "zsh"; S "fish"; S "GNU"; S "Open Source "; S "Erlang"; S "Docker"; S "R"; S "Hadoop"; S "Android"; S "iOS"; S "Unity"; S "Unreal Engine"; S "UE4"; S "Source Engine"; S "Apache"; S "Lua"; S "Prolog"; S "C++"; S "D"; S "Go"; S "Golang"; S "Rust"; S "Nim"; S "OCaml"; S "Kotlin"; S "Clojure"; S "Groovy"; S "Scheme"; S "Common Lisp"; S "llvm"; S "LLVM"; S "Hoon"; S "Urbit"; S "Nock"; S "Elixir"; S "Crystal"; S "TypeScript"; S "PureScript"; S "CoffeeScript"; S "Elm"; S "LaTeX"; S "troff"; S "groff"; S "Markdown"; S "HTML"; S "CSS"; S "XSLT"; S "Flash"; S "ColdFusion"; S "FORTRAN"; S "COBOL"; S "Matlab"; S "Mathematica"; S "CUDA"; S "OpenCL"; S "OpenGL"; S "DirectX"; S "Vulkan"; S "Pascal"; S "Perl"; S "Perl 6"; S "UX"; S "Emacs Lisp"; S "Vimscript"; S "AppleScript"; S "Swift"; S "Objective-C"; S "Cocoa"; S "Cocoa Touch"; S "Xamarin"; S "Qt"; S "GTK+"; S "WPF"; S "JavaFX"; S "Swing"; S "Smalltalk" |] let dev = R[|N[lang; S " developer";]; N[lang; S " evangelist";]; N[lang; S " dev";]; N[lang; S " lover";]; N[lang; S " enthusiast";]; N[lang; S " professional";]; N[lang; S " expert";]; N[lang; S " "; gclass]; N[lang; S " connoisseur";];|] let rec activity = R [|band; trendy_food; S"freedom"; S "free speech"; S"nationalism"; S "Minecraft"; S "Call of Duty"; S "partying"; S "beer pong"; S "football"; S "baseball"; S "vaping"; S "pussy"; S "bacon"; S "LessWrong"; S "America"; S "RationalWiki"; S "memes"; S "4chan"; S "8chan"; S "comics"; S "hacktivism"; S "hacking"; S "ComicCon"; S "cosplay"; S "Game of Thrones"; S "hentai"; S "advocacy"; N[noun; S " advocacy";]; S "sex"; S "science"; S "anime"; S "Big Data"; S "Cloud"; S "butts"; S "UKIP"; S "white separatism"; S "Brexit"; S "grammar"; S "free software"; S "open source"; S "real literature";|] and noun = R [| nomen; S "Christian"; S "brony"; S "bro"; S "brogrammer"; S "brocialist"; N[activity; S "evangelist"]; N [S "bro"; noun]; dev; N[S "10x "; lang; S " dev";]; S "free-thinker"; S "Redditor"; S "atheist"; S "furry"; S "victim of cisphobia"; S "male feminist"; S "equalist"; S "MRA"; S "beer drinker"; S "father"; S "blogger"; N[noun; S "blogger";]; S "Thatcherite"; S "geek"; S "thought leader"; S "antivax"; S "channer"; S "Men's Rights Activist"; N[S "Social Justice "; gclass]; N[activity; S "lover";]; S "Anonymous"; S "infosec professional"; S "BernieBro"; S "Marxist"; S "socialist"; S "journalist"; S "marketer"; S "social media analyst"; S "philosopher"; S "educator"; S "advocate"; N[activity; S " advocate"]; S "sexpert"; S "professional"; N[activity; S" expert";]; N[activity; S"ninja";]; S "Pythonista"; S "Rubyist"; S "PhD candidate"; S "cartoonist"; S "man"; S "skeptic"; S "grammar Nazi"; S "open sorcerer"; S "podcaster"; N[name; S "-wannabe"]; S "lover"; S "detective"; S "trekkie"; S "fuckboy"; S "Soylent eater"; |] let political_party = R[| S "Green"; S "Labour"; S "Labor"; S "National"; S "Libertarian"; S "Democratic"; S "Republican"; S "Liberal Democrat"; S "Lib Dem"; S "Tory"; S "Conservative"; S "Liberal"; S "UKIP"; S "BNP"; S "SSP"; S "Britain First"; S "Pirate"; S "Sex"; S "Communist"; |] let minority = R [| S "gays"; S "homosexuals"; S "jews"; S "Arabs"; S "Mexicans"; S "Muslims"; S "immigrants"; S "blacks"; S "transgendereds"; S "transgenders"; S "transgenderists"; S "queers"; S "SJWs"; S "feminists"; S "indie game developers"; S "gamers"; S "homos"; |];; let minority_kind = R [|S "gender"; S "justice"; S "trans"; S "feminism"; S "queer"; S "gay"; S "homosexual";|] let startup = R[|S "Fumblr"; S "Grumblr"; S "Humblr"; S "Appearancely"; S "AccidentNow"; S "RefuseNow"; S "remainr"; S "Trembleit"; S "Punish"; S "SprayNow"; S "Tennisr"; S "Traply"; S "Yawnin"; S "momly"; S "Smartyell"; S "radiatein"; S "sawly"; S "suffery"; S "Sceneify"; S "WomanNow"; S "Ballhub"; S "Systemme"; S "Earnify"; S "Mathit"; S "Gruntly"; S "Bongh.it"; S "Lyly"|];; let hashtag = R [| S "#BlueLivesMatter"; S "#AllLivesMatter"; S "#NotAllMen"; S "#KONY2012"; S "#GamerGate"; S "#FeelTheBern"; S "#ImWithHer"; S "#BuildTheWall"; S "#VoteLeave"; S "#FreeWeev"; S "#WhiteGenocide"; S "#2Ad"; S "#NordicModel"; |] let verb = R [| S "game"; S "code"; S "blog"; S "hack"; S "vape pussy" |] let startup_position = R[|S "CEO"; S "CTO"; S "Soylent eater"; S "Dev"; S "$dev"; S "Product Manager"; S "Customer Success Manager"; S "Full Stack Engineer"; S "Data journalist"; S "Infosec Expert"; S "Designer"; S "UX"; S "Hacker"; S "Engineer"; S "VP of Engineering"; S "Data scientist"; S "Growth Hacker"; S "Marketing"; S "Sexpert"|] let sportsball_team = R[|S "Ducks"; S "Beavers"; S "Steelers"; S "Lakers"; S "Blazers"; S "Redskins"; S "Clippers"; S "All Blacks"; S "Newcastle"; S "Cubs"; S "West Ham"; S "Man U"; S "Chelsea"; S "Liverpool"|] let activity = R [| band; trendy_food; S "Minecraft"; S "Call of Duty"; S "partying"; S "beer pong"; S "football"; S "baseball"; S "vaping"; S "pussy"; S "bacon"; S "LessWrong"; S "America"; S "RationalWiki"; S "memes"; S "4chan"; S "8chan"; S "comics"; S "hacktivism"; S "hacking"; S "ComicCon"; S "cosplay"; S "Game of Thrones"; S "hentai"; S "advocacy"; N[noun; S " advocacy";]; S "sex"; S "science"; S "anime"; S "Big Data"; S "Cloud"; S "Butts"; S "UKIP"; S "white separatism"; S "Brexit"; S "grammar"; S "free software"; S "open source"; S "real literature"; S "Star Trek"; S "Star Wars"; |] let rec activity_phrase = N[activity; O(N[S", "; activity_phrase])] let phrase = R [| N[S "Husband, father, "; noun; P;]; S "Friendly."; S "Hubby."; S "That is all."; S "Not as funny as I think I am."; S "Nice guy."; S "You have been warned."; N[S "Avatar by "; name; S ".";]; S "Jet fuel can't melt steel beams."; N[minority; S " can't melt steel beams.";]; N[activity; S " can't melt steel beams.";]; N[lang; S " can't melt steel beams.";]; N[name; S " was right.";]; S "Ally."; S "Cynical bastard."; S "Proud Ally."; S "Don't follow if you're easily offended."; S "I aim to offend."; S "Sarcastic."; S "TERF is a slur."; S "Put the Christ back in Christmas."; S "Give me liberty or give me death."; S "Fights for the users."; S "I call them like I see them."; S "I calls 'em like I sees 'em."; S "Honest."; S "I fear I am now a victim of 'cisphobia'."; N[O(N[Many(adj,1," "); S " "]); noun; P;]; N[O(N[Many(adj,1," "); S " "]); S "#"; noun; P;]; N[adj; P;]; N[Many(adj,3," "); S " #"; noun; S " and proud of it"; P;]; N[activity_phrase; P]; S "No fatties."; N[minority_kind; S " critical."]; N[minority_kind; S "-critical."]; N[minority_kind; S " separatist.";]; N[S "Go "; sportsball_team; S "!";]; S "Don't tread on me."; S "English only."; S "We are all Africans."; S "Je suis Charlie."; N[S "Je suis "; name; P;]; N[S "I am "; name; P;]; N[S "We are all "; name; P]; N[minority; S " are the real oppressors.";]; N[minority; S " are the real racists.";]; N[S "My best friends are "; minority; P;]; N[S "Lover of all things "; lang; P;]; N[S "Lover of all things "; activity; P;]; S "RTs are not endorsements."; S "Thoughts are my own."; N[S "CEO of "; startup;]; N[startup_position; S " at "; startup; P; ]; S "Opinions are my own."; S "Opinions do not reflect those of my employer."; N[adj; S " pride.";]; N[noun; S " pride.";]; N[S "I like "; activity; P;]; N[S "I stand with "; name; S ".";]; S "I speak truth to power."; S "History will vindicate me."; S "Make America great again."; N[S "Co-founder of "; startup; P]; S "Molon labe."; S "Μολών λαβέ."; S "The best cure for bad speech is more speech."; N[S "I "; verb; P;]; N[S "I "; verb; S " and I vote.";]; S "My public key: https://keyface.ohno/f897b10a."; N[S "Make America "; adj; S " again.";]; S "Watch my TED Talk."; N[minority; S " need not apply.";]; N[S "((("; name; S ")))";]; N[S "Fan of "; band; P;]; S "Beyhive."; S "He/him."; N[noun; S", "; noun; S ", "; noun; S ", not necessarily in that order.";]; N[minority; S " are what's wrong with America.";]; N[minority; S " go home.";]; N[trendy_food; S " addict.";]; N[trendy_food; S " enthusiast.";]; N[trendy_food; S " and "; trendy_food; S ".";]; N[Many(trendy_food,2,", "); S " and "; trendy_food; S ".";]; N[trendy_food; S " is what's wrong with America.";]; S "14/88."; S "No trigger warnings."; S "Resistance is futile."; N[political_party; S " shill.";]; N[political_party; S " activist.";]; N[S "Vote "; political_party; S "!";]; N[name; S " for president!";]; N[name; S " for America.";]; S "I love correcting people who are wrong."; S "Carthago delenda est."; S "Don't @ me."; S "Just say no."; S "PM me for direct sales."; |];; let top = N[ Many(Filter(String.capitalize_ascii,phrase),2," "); O(N[S " "; Many(hashtag,1," ")]);] let range min max = (Random.int (max-min)) + min let pick (r: 'a array) : 'a = r.(range 0 (Array.length r));; let rec copy n times sep : string = match times with | 0 -> eval n | _ -> (eval n)^sep^(copy n (times-1) sep) and eval (n:node) : string = match n with | N l -> List.fold_left (^) "" (List.map eval l) | S s -> s | R r -> eval (pick r) | P -> "." | Many(n,t,s) -> let times = t+(range 0 2) in copy n times s | O x -> if Random.int 2 = 1 then eval x else "" | Filter(fn,n) -> fn (eval n);; let (^^) text chr = text ^ (String.make 1 chr) let scramble text = let len = String.length text in let rec loop i acc tps = if i=len then acc else if i+1=len then acc^^text.[i] else match text.[i], text.[i+1] with | ' ', _ -> loop (i+1) (acc^" ") false | _ as c, ' ' -> loop (i+1) (acc^^c) false | c1, c2 -> if not tps && Random.int 3 = 0 then loop (i+2) ((acc^^c2)^^c1) true else loop (i+2) ((acc^^c1)^^c2) tps in loop 0 "" false let () = Random.self_init(); print_string (scramble (eval top)) |
Added badname.c version [ad45f5162b].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
// badname.c // generates awful fantasy names based on a consistent // lexicon. // copyright 2014 alexis hale. released under GPLv2. #include <stdio.h> #include <stdlib.h> #include <time.h> #define to(ty, ctr, end) for(ty ctr = 0; ctr<end; ++ctr) typedef unsigned char u8; struct morpheme { const char* nat; const char* translation; }; struct morpheme nouns[] = { {"Ilu", "Stone"}, {"Siri", "Water"}, {"Raswa", "Skull"}, {"Nishra", "Spleen"}, {"Olbu", "Blood"}, {"Oblu", "Rot"}, {"Bolu", "Weed"}, {"Huru", "Face"}, {"Pere", "Dirt"}, {"Sarwa", "Filth"}, {"Oru", "Land"}, {"Barna", "Stomach-"}, {"Orba", "Gut"}, {"Pata", "Chair"}, {"U", "Self"}, {"Ra", "Offal-"}, {"Batu", "Table-"}, {"Topa", "Scarf"}, {"Bosi", "Cow"}, {"Sama", "Horse"}, {"Dopu", "Pig"}, {"Lakta", "River"}, {"Lakta", "Mine"}, {"Fri", "Witch"}, {"Tole", "Spell"}, {"Daba", "Book"}, {"Ipa", "Ale"}, {"Odu", "Mead"}, {"Shiri", "Wine"}, {"Shospu", "Beer"}, {"Kili", "Scream"}, {"She", "Loud"}, {"Ro", "Quick"}, {"Tifti", "Foul"}, {"Wosa", "Evil"}, {"Bilka", "Poison-"}, {"Swa", "Man"}, {"Pesta", "Frog"}, {"Tokta", "Bile"}, {"Ke", "Weasel-"}, {"Poru", "Coal"}, {"Wokme", "Lie-"}, {"Ortu", "Gold"}, {"Vaksa", "Fuck"}, {"Ruktu", "Hard"}, {"Gorwa", "Shaft"}, {"Badga", "Rod"}, {"Ulwa", "Cock"}, {"Vatra", "Fire"}, }, acts[] = { {"ktor", "splitter"}, {"swil", "cleaver"}, {"tfas", "burster"}, {"dosk", "mangler"}, {"stot", "corruptor"}, {"brak", "grinder"}, {"vas", "seeker"}, {"ftir", "drinker"}, {"var", "stamper"}, {"shirk", "smeller"}, {"svis", "thief"}, {"brot", "seller"}, {"tolt", "crosser"}, {"kdash", "burner"}, {"pris", "sailor"}, {"ksat", "speaker"}, {"bkis", "carrier"}, {"shvor", "slayer"}, {"klis", "avenger"}, {"ftam", "spoiler"}, {"lwar", "deceiver"}, {"shpok", "grasper"}, {"pash", "striker"}, {"pris", "render"}, {"prash", "shredder"},{"vask", "defiler"}, {"dar", "dweller"}, {"vtir", "burner"}, {"bilk", "poisoner"}, {"vkaft", "poisoner"}, {"ktaft", "pounder"}, {"rpift", "strangler"},{"ltaft", "rider"}, {"kvat", "liar"}, {"ktik", "finder"}, {"vkas", "fucker"}, {"bagde", "rod"}, {"gorwe", "shaft"}, {"kruk", "squeezer"}, {"lwe", "cock"}, {"vakse", "fuck"}, }; typedef struct name_t { struct morpheme* noun,* act; } name_t; void prt(const char* c) { do putchar(*c); while (*(++c)!=0); } void pname(name_t* names, u8 len) { u8 ct = 0; name_t* n = names; prt("\e[1m"); do { prt(n->noun->nat); prt(n++->act->nat); putchar(' '); } while (++ct < len); prt("\e[0m(\"\e[4m"); ct = 0; do { prt(names->noun->translation); prt(names++->act->translation); if (ct != len-1) putchar(' '); } while (++ct < len); prt("\e[0m\")"); } typedef struct entity_t { name_t* names; u8 namec; } entity_t; void make_entity(entity_t* e) { e -> namec=rand()%3 + 2; e -> names=malloc(sizeof(name_t)*e->namec); to (u8, i, e -> namec) { e -> names[i].noun = &nouns[rand() % sizeof(nouns) / sizeof(struct morpheme)]; e -> names[i].act = &acts[rand() % sizeof(acts) / sizeof(struct morpheme)]; } } int main() { srand(time(NULL)); const u8 entities = 20; entity_t* es = malloc(sizeof(entity_t)*entities); for (u8 e = 0; e<entities; e++) make_entity(&es[e]), pname(es[e].names, es[e].namec), putchar('\n'); return 0; } |
Added botsoc.scm version [6437b613b4].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 |
; (include "lib/lisp-macro.scm") (include "lib/bot-gambit.scm") (rule (base-ideology) ("liberalism") ("socialism") ("capitalism") ("anarchism") ("marxism") ("marxism-leninism") ("nazism") ("feminism") ("stalinism") ("democracy") ("stirnerism") ("harm reduction") ("egoism") ("objectivism") ("monarchism") ("tribadism") ("eugenics") ("fascism") ("juche") ("nationalism") ("human extinctionism") ("demonology") ("linguistics") ("voluntary human extinction") ("onanism") ("anthropology") ("authoritarianism") ("totalitarianism") ("social justice") ("identity politics") ("idpol") ("terrorism") ("islamism") ("hedonism") ("libertinism") ("computer science") ("libertarianism") ("static typing") ("dynamic typing")) (rule (ideology-prefix) ("neo-") ("social ") ("democratic ") ("paleo-") ("retro-") ("anarcho-") ("femino-") ("neo") ("anti-") ("sado-") ("eroto-") ("strangulo-") ("theo-") ("ultra-") ("arachno-") ("anti") ("post-") ("post") ("ethno-") ("marxism-") ("left-") ("alt-") ("right-") ("space ") ("gay ") ("quantum ")) (rule (ideology) ((base-ideology)) ((adjective) " " (ideology)) ((ideology-prefix) (base-ideology))) (rule (problem) ("poverty") ("hunger") ("hatred") ("racism") ("mortality") ("misogyny") ("drug use") ("alcoholism") ("homophobia") ("addiction") ("exploitation") ("drug prohibition") ("nazism") ("class conflict") ("harm reduction") ("biphobia") ("lesbianism") ("the opioid crisis") ("Russia") ("masturbation") ("nuclear war") ("oppression") ("immigration") ("totalitarianism") ("depression") ("mental illness") ("war") ("disease") ("the bourgeoisie") ("crime") ("activism") ("Noam Chomsky") ("wealth") ("eugenics") ("bigotry") ("genocide") ("bitcoin") ("ethnic cleansing") ("vaccination") ("autism") ("the alt-right") ("authoritarianism") ("freedom of speech") ("tooth decay") ("neurodivergence") ("abortion") ("healthcare") ("islamophobia") ("sexting") ("static typing") ("dynamic typing") ("heterophobia") ("heterosexuality")) (rule (adjective) ("racist") ("homophobic") ("misogynist") ("bigoted") ("anti-" (thing)) ("evil") ("insane") ("impossible") ("contradictory") ("illogical") ("revolutionary") ("self-contradictory") ("white") ("communist") ("socialist") ("marxist") ("stalinist") ("lesbian") ("untested") ("neurotypical") ("anarchist") ("religious") ("bourgeois") ("proletarian") ("classist") ("monarchist") ("fascist") ("postfurry") ("eugenicist") ("alt-right") ("furry") ("problematic") ("totalitarian") ("unlikely") ("compromised") ("authoritarian") ("useless") ("useful") ("neurodivergent") ("desirable") ("undesirable") ("dialectic") ("undialectic") ("undefined") ("imperialist") ("good") ("bad") ("colonialist") ("acausal") ("black") ("statically-typed") ("emergent") ("libertarian") ("unreconstructed") ("teenage") ("Lacanian") ("intersectional")) (rule (trait) ("power") ("influence") ("wealth") ("solidarity") ("hope") ("conviction") ("autonomy") ("freedom") ("liberty") ("faith")) (rule (necessity) ("sex") ("water") ("food") ("money") ("wealth") ("income") ("welfare") ("tea") ("therapy") ("pain relief") ("medical care") ("medicine") ("reproduction") ("hope") ("faith") ("love")) (rule (thing) ((problem)) ((necessity)) ("Russia") ("Mars") ("activism") ((thing) " activism") ("anti-" (thing) " activism") ((adjective) " activism") ("bitcoin") ("humanity") ("vaccination") ("autism") ("medical care") ((adjective) " power") ((adjective) " policy") ((adjective) " politics") ("transit") ("public transit") ("public transportation") ("meth") ("heroin") ("dialectics") ("the dialectic") ("the Discourse") ("medical care") ("psychiatry") ("influenza") ("alien life") ("mind control") ("terrorism") ("identity") ("healthcare") ("literature") ("grass") ("catnip") ("television") ("romance") ("finance") ("opium") ("law") ("dating") ("online dating") ("friendship")) (rule (things) ("pandas") ("lasers") ("toasters") ("kulaks") ("opiates") ("painkillers") ("teacups") ("umbrellas") ((thing) " rights") ((adjective) " rights") ((thing) " activists") ("anti-" (adjective) " activists") ((ideology) " activists") ((adjective) " activists") ("humans") ("vaccines") ("doctors") ("drugs") ("hospitals") ("UFOs") ("aliens") ("flowers") ("pumpkins") ("guns") ("babies") ("friends") ) (rule (thingss) ((thing)) ((things))) (rule (group) ("gays") ("whites") ("African-Americans") ("the poor") ("the rich") ("Jewish people") ("natives") ("otherkin") ("psychics") ("furries") ("immigrants") ("trans people") ("men") ("women") ("the bourgeoisie") ("boys") ("girls") ("the proletariat") ("activists") ("stirnerites") ("proletarians") ("extremists") ((thing) " extremists") ((thing) " activists") ("addicts") ("junkies") ("tweakers") ("potheads") ("acid heads") ("meth addicts") ("doctors") ("gamers") ("marijuana users") ("dentists") ("fascists") ("marijuana addicts") ("nazis") ("wizards") ("heroin addicts") ("hackers") ("LSD addicts") ("disabled people") ("criminals") ("teenagers") ("the differently-abled") ("teens") ("cissexuals")) ; utility fns (rule (adjfor adj con g) (adj) (adj con g)) (rule (modal) ("will") ("could") ("might") ("will likely") ("can") ("surely will") ("undoubtedly will") ("may")) (rule (modal-not) ("will not") ("could not") ("might not") ("will likely not") ("cannot") ("surely will not") ("undoubtedly will not") ("may not")) (rule (modal-rnd) ((modal)) ((modal-not))) (rule (cause-provoke) ("cause") ("lead to") ("provoke the development of") ("provoke") ("promote") ("create")) (rule (causes-provokes) ("causes") ("leads to") ("provokes the development of") ("provokes") ("promotes") ("creates")) (rule (cause g i) (g " " (modal)) ((thing) " " (modal) " cause " g " to") (i " " (modal) " cause " g " to")) ; rule definitions (rule (predicate-or-claim i) (i " is actually " (ideology)) (i " is not " (ideology)) (i " disproves " (ideology)) (i " is disproven by " (ideology)) (i " is a fundamentally " (adjective) " ideology") (i " is " (adjective)) (i " is basically " (adjective)) (i " is essentially " (adjective)) (i " is unavoidably " (adjective)) (i " is fundamentally " (ideology)) (i " is bad for " (group)) (i " is good for " (group)) (i " seeks to eradicate " (group)) (i " seeks to eradicate " (problem)) (i " is the source of " (problem)) (i " is the cause of " (problem)) (i " is the the reason for " (problem)) (i " is the the reason " (group) " suffer from " (problem)) (i " excludes " (group)) ((cause (group) i) " be excluded from " (thing)) (i " dehumanizes " (group)) (i " alienates " (group)) (i " marginalizes " (group)) (i " pathologizes " (problem)) (i " pathologizes " (thingss)) (i " " (modal) " deny " (group) " access to " (thingss)) ((group) " are " (adjective)) ((group) " are not " (adjective)) ((thing) " " (causes-provokes) " " (thingss)) ((things) " " (cause-provoke) " " (thingss)) ((thingss) " " (modal) " cause " (problem)) (i " " (causes-provokes) " " (problem)) (i " " (modal) " cause " (problem)) (i " lacks class character") ((group) " have class character") ((group) " lack class character") ((thing) " has class character") ((things) " have class character") ((thing) " lacks class character") ((things) " lack class character") ((problem) " " (modal-rnd) " be solved in our lifetimes") (i " fails to address " (problem)) (i " does not address " (problem)) (i " disregards " (problem)) (i " is not a solution for " (problem)) (i " does not solve " (problem)) (i " cannot solve " (problem)) ) (rule (predicate i) (i " was developed after " (ideology)) (i " was built on " (ideology)) (i " was inspired by " (ideology)) (i " was influenced by " (ideology)) (i " is an ideological descendent of " (ideology)) (i " was developed by " (group)) (i " was developed to address the needs of " (group)) (i " was developed to address the needs of " (group) ", not " (group)) ("the main contradiction of " i " is " (problem)) ((group) " believe that " (pc claim (ideology)))) (rule (claim i) ((problem) " " (modal) " inevitably arise") ((problem) " " (modal) " still exist") ((problem) " " (modal) " " (cause-provoke) " " (problem)) ((problem) " " (modal) " " (cause-provoke) " the defeat of " i) ((problem) " cannot be distinguished from " i) (i " and " (ideology) " cannot be distinguished") (i " and " (ideology) " will produce the same result") ((group) " " (modal) " be exploited") ((group) " " (modal) " still be exploited") ((group) " " (modal) " be exploited under " i) ((group) " " (modal) " still be exploited under " i) ((group) " " (modal) " face " (problem)) (i " " (modal) " kill " (group)) ((thing) " is " (adjfor (adjective) " for " (group))) ((things) " are " (adjfor (adjective) " for " (group))) ((thing) " is actually " (adjfor (adjective) " for " (group))) ((things) " are actually " (adjfor (adjective) " for " (group))) ((problem) " " (modal) " benefit " (group)) ((problem) " " (modal) " harm " (group)) ((problem) " " (modal) " destroy " (group)) ((problem) " " (modal) " incite " (group) " against " (group)) ((problem) " " (modal) " incite " (group) " against " (problem)) ((problem) " is unfair to " (group)) ((problem) " is likely to result") ((thing) " is likely to result") ((things) " are likely to result") ((thing) " is likely to be involved") ((things) " are likely to involved") ((thing) " is harmful to " (group)) ((things) " are harmful to " (group)) ((thingss) " " (modal) " " (cause-provoke) " the oppression of " (group)) ((cause (group) i) " face " (problem)) ((cause (group) i) " suffer " (problem)) ((cause (group) i) " suffer from " (problem)) ((cause (group) i) " experience " (problem)) ((cause (group) i) " no longer experience " (problem)) ((cause (group) i) " suffer") ((cause (group) i) " be marginalized") ((cause (group) i) " become marginalized") ((cause (group) i) " become exploited") ((cause (group) i) " become addicted to " (thingss)) ((cause (group) i) " lose " (trait)) ((cause (group) i) " lose " (things)) ((cause (group) i) " lose their " (trait)) ((cause (group) i) " lose their " (things)) ((cause (group) i) " no longer have " (necessity)) ((cause (group) i) " lose access to " (necessity)) ) (rule (pc p i) ((p i)) ((predicate-or-claim (pick (vector "it" i))))) (rule (statement i) ((pc predicate i)) ((pc claim i)) ("i think " (pc claim i)) ("it is my considered opinion that " (pc claim i)) ("i think we all know that " (pc claim i)) ("nobody would deny that " (pc claim i)) ((pc predicate i) ", therefore " (pc claim i)) ((pc claim i) " because " (predicate i)) ("if " (pc predicate i) ", " (pc claim i)) ("if " (pc predicate i) ", then " (pc claim i)) ("because " (pc predicate i) ", " (pc claim i)) ("since " (pc predicate i) ", " (pc claim i)) ("as a result of " (problem) ", " (pc claim i)) ("due to " (problem) ", " (pc claim i)) ("despite what " (group) " think, " (pc claim i)) ("despite what " (group) " think about " (problem) ", " (pc claim i)) ("while " (group) " think " (pc claim i) ", the reality is that " (pc claim i)) ) (print (statement (ideology)) "\n") |
Added bottist.ml version [ef9918389c].
> > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
let adjs = [| "queer"; "electric"; "space"; "super"; "discount"; "extreme"; "far-left"; "far-right"; "unreconstructed"; "modern"; "eternal"; "original"; "historical"; "tankie"; "mystical"; "arcane"; "catholic"; "protestant"; "irish"; "dialectical"; "confucian"; "orbital"; "suborbital"; "martian"; "minimalist"; "moist"; "dire"; "trotskyite"; "trotskyist"; "supreme"; |] let prefixes = [|"neo"; "post"; "retro"; "anti"; "counter"; "pre"; "paleo"; "femino"; "anarcho"; "oligo"; "meta"; "diabolo"; "theo"; "petro"; "sado"; "arachno"; "psycho"; "eroto"; "nano"; "mini"; "xeno"; "astro"; "femto"; "electro"; "endo"; "arch"; "macro"; "cardio"; "mesmo"; "chrono"; "nycto"; "megalo"; "lesbo"; "masculo"; "ultra"; "urtla"; "proto"; "weebo"; "thanato"; "volcano"; "strangulo"; "quasi"; "pseudo"; "procto"; "copro"; "hydro"; "gastro"; "thermo"; "mystico"; "arcano"; "disastro"; "vagino"; "dino"; "nympho"; "pharma"; |] let ists = [| "plurali"; "femini"; "activi"; "sociali"; "marxi"; "lenini"; "stalini"; "fasci"; "sadi"; "stirneri"; "masochi"; "imperiali"; "arcani"; "syndicali"; "masturbati"; "pedantici"; "posadi"; "hoxhai"; "maoi"; "papi"; "catholici"; "protestanti"; "coloniali"; "francoi"; "materiali"; "immateriali"; "sexuali"; "stallmani"; "minarchi"; "totalitariani"; "authoritariani"; "revisioni"; "legali"; "supremaci"; "masculi"; "primitivi"; |] let range min max = (Random.int (max-min)) + min let chance n = range 0 n = 0 let pick (r: 'a array) : 'a = r.(range 0 (Array.length r));; let rec accumulate fn times = fn () ^ if times = 0 then "" else " "^(accumulate fn (times-1)) let makeist () = (if chance 2 then (pick prefixes)^"-" else "") ^ (pick ists)^(pick [|"st"; "te"|]) let ideology () = (if chance 3 then (if chance 4 then (pick prefixes) else "") ^ (pick adjs)^" " else "" ) ^ (accumulate makeist (range 0 2)) ^ " " ^ (if chance 2 then ((if chance 3 then pick prefixes else "") ^"anarchism") else (pick [|"anarcho-";"arachno-"|])^(pick ists)^"sm") let () = Random.self_init (); print_string (ideology ()) |
Added cclg.ml version [f3cecc2737].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 |
type word = A of string | An of string type root = Edy of word | Xy of word | Ation of word | Le of word | A of word | Cy of word | Rous of word | Ics of word | Ics2 of word | Sis of word | X of word | Ality of word | Ty of word | Ication of word | Tion of word | Arity of word | Sm of word type prefix = Inv of word | Vf of word * string let prefixes = [| Vf(A "mult","i"); Inv (A "pre"); Vf(An "ex","o"); Vf(A "retr","o"); Inv (A "hyper"); Vf(A "hem","i"); Inv (A "eu"); Vf(A "par","a"); Vf(A "gastr","o"); Vf(A "bell","i"); Inv (An "an"); Vf(A "mes","o"); Vf(A "therm","o"); Vf(A "copr","o"); Vf(A "pleb","i"); Vf(An "ant","i"); Vf(A "pseud","o"); Vf(A "quas", "i"); Vf(A "crypt","o"); Vf(A "bronch","o"); Vf(A "hydr","o"); Vf(A "psych","o"); Vf(A "tel","e"); Vf(An "arachn","o"); Vf(A "nyct","o"); Inv(A "dys"); Inv(A "mis"); Vf(A "mis","o"); Vf(A "the","o"); Vf(A "terr","a"); Vf(An "astr","a"); Vf(An "astr","o"); Vf(An "archae","o"); Vf(An "erot","o"); Vf(A "proct","o"); Vf(An "atm","o"); Vf(A "strat","o"); Inv(A "geo"); Vf(An "omn","i"); Inv(A "poly"); Vf(A "malign","o"); Vf(A "micr","o"); Vf(A "macr","o"); Vf(A "nan","o"); Vf(A "femt","o"); Vf(A "kil","o"); Vf(A "pet","a"); Inv(A "tri"); Vf(A "tetr","a"); Vf(A "yoct","o"); Vf(A "meg","a"); Vf(A "un","i"); Inv(A "bi"); Vf(A "dec","a"); Vf(A "pent","a"); Inv(An "endo"); Vf(An "electr","o"); Vf(A "pat","a"); Vf(A "hem","o"); Inv(An "arch"); Vf(A "mesm","o"); Vf(A "card","io"); Vf(A "necr","o"); Inv(An "un"); Vf(An "ultr","a"); Inv(A "trans"); Inv(A "post"); Inv(A "sub"); Inv(A "pro"); Vf(A "ben","e"); Inv(An "ab"); Inv(An "inter"); Vf(An "intr","a"); Inv(A "non"); Inv(A "counter"); Vf(A "contr","a"); Vf(A "path","o"); Vf(A "phon","o"); Inv(A "pan"); Vf(A "zo","o"); Vf(A "chron","o"); Inv(A "re"); Inv(A "con"); Vf(A "volcan","o"); Inv(A "tech"); Vf(A "plasm","o"); Vf(A "megal","o"); Inv(A "cyber"); Vf(A "met","a"); Inv(A "neo"); Vf(An "ocul","o"); Vf(A "strangul","o"); Vf(A "dendr","o"); Vf(A "matr","i"); Vf(A "patr","i"); Vf(A "lesb","o"); Vf(A "hom","o"); Vf(A "heter","o"); Vf(A "prot","o"); Vf(An "ect","o"); Vf(A "weeb","o"); Vf(A "fung","i"); Vf(A "per","i"); Vf(A "petr","i"); Vf(A "sad","o"); Vf(A "femin","i"); Vf(A "mascul","o"); Vf(A "claustr","o"); Vf(A "neur","o"); Vf(A "norm","o"); Inv (A "eu"); Vf(An "agor","a"); Vf(A "thanat","o"); Vf(A "vagin","o"); Vf(A "bi","o"); Vf(A "blog","o"); Vf(A "prometh","eo"); Vf(An "anesthes", "io"); Vf(A "din","o"); Vf(A "medic","o"); |] let roots = [| Edy (A "com"); Edy (A "trag"); Xy (A "gala"); Ation (A "lact"); Le (A "mirac"); Rous (A "fib"); A (An "arcan"); Cy (A "poli"); Ty (A "poli"); Ics (A "polit"); Ics (A "mathemat"); Ics2 (A "memet"); Sis (A "mime"); Ics (A "linguist"); Ics2 (A "linguist"); Ics2 (A "therm"); Ics (A "cosmet"); Ics (A "anesthet"); Ics (A "techn"); Sis (A "synthe"); X (An "appendi"); Ication (A "prognost"); Ality (A "lachrym"); Tion (A "prohibi"); Ation (A "not"); Ality (A "lingu"); Arity (A "pulmon"); Sis (A "sta"); Sis (A "kine"); Ality (A "lexic"); Ality (A "mort"); Ation (A "gener"); Ality (A "nocturn"); Cy (A "delica"); Ation (A "masturb"); Sm (An "orga"); Sm (A "cla"); Cy (A "malignan"); Tion (A "func"); Ics (A "dialect"); Ics (A "pedant"); Ation (A "form"); Ation (A "dict"); Tion (A "construc"); Tion (A "trac"); Tion (A "cep"); Ation (A "port"); Tion (A "scrip"); Tion (A "junc"); Ation (A "spir"); Ation (A "coloniz"); Ation (A "fornic"); Ics (A "disastr"); Ics (A "theatr"); Ality (A "sexu"); Ation (A "transl"); Sm (A "sadi"); Sm (A "masochi"); Ation (An "ejacul"); Ation (A "jacul"); Ality (A "vagin"); Ality (A "mystic"); Sm (A "mystici"); Ty (A "normativi"); Ality (A "norm"); Ality (A "typic"); Xy (A "do"); Ality (A "leg"); Sm (A "legali"); Ation (A "leg"); A (A "pragmat"); A (A "stigmat"); |] let nsuffixes = [| An "ite"; An "ate"; An "itis"; A "sis"; A "rrhea"; A "tion"; An "icon"; A "phoria"; A "cide"; An "ology"; An "ologics"; An "ologer"; An "ologist"; A "phobia"; A "sphere"; A "spherics"; A "gon"; A "tron"; A "metry"; A "meter"; A "noia"; A "noiac"; A "noid"; A "cracy"; A "crat"; A "mancy"; An "ism"; An "ist"; An "ary"; An "ory"; A "scope"; A "jection"; A "mission"; A "ception"; A "ceptor"; An "arch"; An "archy"; A "turbation"; A "turbator"; A "plasm"; A "mania"; A "maniac"; A "dendron"; A "gasm"; A "philia"; A "philiac"; A "phile"; A "sexuality"; A "romance"; A "net"; An "ium"; A "saur"; An "odon"; A "normativity"; A "typicality"; A "doxy"; |] let adjsuffixes = [| An "itic"; An "ose"; An "id"; A "tic"; A "rrheic"; A "tive"; An "iconic"; A "phoric"; A "cidal"; An "ologic"; An "ological"; An "ologistic"; A "phobic"; A "spheric"; A "gonal"; A "tronic"; A "metric"; A "metrical"; A "noiac"; A "noid"; A "cratic"; A "mantic"; An "ist"; An "istic"; An "ismic"; An "ismatic"; A "scopic"; A "ject"; A "jective"; A "missive"; A "ceptive"; An "archic"; A "turbatory"; A "plasmic"; A "plastic"; A "manic"; A "maniacal"; An "ish"; A "dendrite"; A "gasmic"; A "philic"; A "sexual"; A "romantic"; A "legal"; A "normative"; A "typical"; |] let (^^) w s = match w with An x -> An (x^s) | A x -> A (x^s);; let pick (r : 'a array) : 'a = r.(Random.int(Array.length r)) let chance i = (Random.int i) = 0 let cform root = match root with | Edy x -> x^^"edo" | Xy x -> x^^"cto" | Ation x -> x^^"o" | Rous x -> x^^"ro" | Le x -> x^^"ulo" | A x -> x^^"o" | Cy x -> x^^"tico" | Ics x | Ics2 x -> x^^(if chance 2 then "i" else "o") | Sis x -> x^^"to" | X x -> x^^"co" | Ality x -> x^^"o" | Ty x -> x^^"to" | Ication x -> x^^"o" | Tion x -> x^^"to" | Arity x -> x^^"a" | Sm x -> x^^(if chance 2 then "smo" else "sto") let bareform root = match root with | Edy x -> (if chance 2 then x else x^^"ed") | Xy x -> x^^"ct" | Ation x -> x | Rous x -> x^^"r" | Le x -> x^^"ul" | A x -> x | Cy x -> x^^"tic" | Ics x -> x^^"ic" | Ics2 x -> x | Sis x -> x^^"t" | X x -> x^^"c" | Ality x -> x | Ty x -> x^^"t" | Ication x -> x | Tion x -> x^^"t" | Arity x -> x | Sm x -> x^^"st" let adjform root = match root with | Edy x -> x^^"ic" | Xy x -> x^^"ctic" | Ation x -> x^^"ic" | Rous x -> x^^"rous" | Le x -> x^^"ulous" | A x -> x^^"e" | Cy x -> x^^"tical" | Ics x -> x^^"ical" | Ics2 x -> x^^"ic" | Sis x -> x^^"tic" | X x -> x^^"cal" | Ality x -> x^^"al" | Ty x -> x^^"tical" | Ication x -> x^^(if chance 3 then "itious" else "icate") | Tion x -> x^^(match Random.int 4 with | 0 -> "tive" | 1 -> "ted" | 2 -> "cious" | 3 -> "tory" | _ -> assert false) | Arity x -> x^^"ary" | Sm x -> x^^(if chance 2 then "stic" else "smic") let nform root = if chance 7 then (adjform root) ^^ "ness" else match root with | Edy x -> x^^"edy" | Xy x -> x^^"xy" | Ation x -> x^^(if chance 3 then "itor" else "ation") | Rous x -> x^^"er" | Le x -> x^^"le" | A x -> x^^"a" | Cy x -> x^^"cy" | Ics x -> x^^(if chance 3 then "ician" else "ics") | Sis x -> x^^"sis" | Ics2 x -> x^^(if chance 3 then "ician" else "ics") | X x -> x^^"x" | Ality x -> x^^"ality" | Ty x -> x^^"ty" | Ication x -> x^^"ication" | Tion x -> x^^"tion" | Arity x -> x^^"arity" | Sm x -> x^^(if chance 2 then "st" else "sm") let abs (w:word) = match w with A x | An x -> x let append pref w = match pref with | Inv x -> x ^^ (abs w) | Vf(body,v) -> match w with | An x -> body^^x | A x -> (body^^v)^^x let rec word () : word = match Random.int 7 with | 0 -> nform (pick roots) | 1 -> (match pick nsuffixes with | An x -> (bareform (pick roots)) ^^ x | A x -> (cform (pick roots)) ^^ x) | 2 -> ((adjform (pick roots)) ^^ " ") ^^ (abs(word ())) | 3 -> ((match pick adjsuffixes with | An x -> (bareform (pick roots)) ^^ x | A x -> (cform (pick roots)) ^^ x) ^^ " ") ^^ (abs(word ())) | 4 -> append (pick prefixes) (word ()) | 5 -> append (pick prefixes) (pick nsuffixes) | 6 -> ((append (pick prefixes) (pick adjsuffixes)) ^^ " ") ^^ (abs (word())) | _ -> assert false let () = Random.self_init (); print_string (abs (word ())); () |
Added crime.ml version [a935c1d4c7].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 |
type word = A of string | An of string | Article | Punctuation of string type node = T of string | Tv of string | P of string | B of node list | N of node | R of node array | Indef | O of node | Fn of (unit -> word) | C of node let wconcat x y = match x, y with | (A(x),An(y)) | (A(x),A(y)) -> A(x^" "^y) | (An(x),An(y)) | (An(x),A(y)) -> An(x^" "^y) | _ -> assert false let wprefix x y = match x, y with | (A(x),An(y)) | (A(x),A(y)) -> A(x^y) | (An(x),An(y)) | (An(x),A(y)) -> An(x^y) | _ -> assert false let range min max = (Random.int (max-min)) + min let chance n = range 0 n = 0 let pick (r: 'a array) : 'a = r.(range 0 (Array.length r));; module CrimeDrug = struct let frics = [| "f"; "sh"; "th"; |] let vfrics = [| "z"; "v"; "zh"; |] let stops = [| "t"; "p"; "k"; "c"; |] let vstops = [| "d"; "b"; "g"; "gh"; |] let withglide r f = Array.map (fun i -> i^f) r let withonset r o = Array.map (fun i -> o^i) r let consonants = Array.concat [ frics; vfrics; stops; vstops; withonset stops "s"; [| "w"; "r"; "rh"; "s"; "l"; "ch"; "n"; "m"; |]; ] let initials = Array.concat [ consonants; withglide frics "r"; withglide frics "l"; withglide frics "w"; withglide stops "r"; withglide vstops "r"; withglide vstops "w"; [| "qu"; "spr"; "spl"; "str"; "scr"; "scl"; "squ"; "bl"; "gl"; "sn"; "sm"; "j"; "h"; "sph"; "ph";|]; ] let nuclei = [| "e"; "ee"; "i"; "a"; "ou"; "u"; "oo"; "ea"; "oa"; "ai"; "oi"; "ie";|] let finals = Array.concat [ vstops; withonset stops "s"; withonset stops "r"; withonset stops "l"; withonset vstops "r"; withonset vstops "l"; [| "gh"; "ck"; "ce"; "ss"; "se"; "nd"; "mb"; "mph"; "nk"; "tch"; "ke"; "ght"; "ff"; "ll"; "zz"; "t"; "p"; "th"; "rth"; "lth"; "dge"; "nge"; "ng"; "ft"; "ckle"; "ngle"; "rkle"; "scht"; "ze"; "x"; "sh"; "rsh"; "lsh"; "ggle"; "ddle"; "bble"; "pple"; "rge"; "lge"; "ve"; "rve"; "lve"; "ffle"; "ttle"; "kle"; "sch"; "m"; "n"; "rm"; "lm"; "rn"; "ln";|] ] let prefixes = [| A "crack"; A "crystal"; A "powdered"; A"raw"; A "pure"; A "liquid"; A"street"; A "super"; An "electric"; A "diced"; A "homemade"; A "traditional"; An "old-school"; A "purified"; A "high-caliber"; A "high-octane"; An "old-fashioned"; A "good old"; A "honest-to-god"; A "weapons-grade"; A "soviet"; An "american"; A "canadian"; A "british"; A "russian"; A "synthetic"; A "french"; A "cyber"; |] let makeA i x = A(i ^ x) let makeAn x = An x let maybeConcat x y = match x with | Some t -> wconcat t y | None -> y let gen () : word = maybeConcat (if chance 3 then Some (pick prefixes) else None) ((if chance 5 then makeAn else makeA (pick initials)) ((pick nuclei) ^ (pick finals))) end let rec crime = R [| Tv "arson"; T "murder"; T "jaywalking"; T "larceny"; T "sex"; T "intercourse"; T "acts unspeakable"; T "public indecency"; T "software piracy"; T "piracy"; T "theft"; T "regicide"; Tv "assault"; T "battery"; T "treason"; T "bribery"; T "manslaughter"; T "bestiality"; T "assault and battery"; T "corruption"; T "corruption of a minor"; T "highway robbery"; T "banditry"; T "cattle rustling"; T "looting"; T "war crimes"; T "crimes against humanity"; T "breach of contract"; T "crime"; T "crimes"; T "burglary"; T "vandalism"; T "robbery"; T "forgery"; T "counterfeiting"; T "stalking"; T "sabotage"; T "sedition"; T "shoplifting"; T "corrupt practices"; T "fire-raising"; T "genocide"; T "desertion"; T "defamation"; T "embezzlement"; T "immigration"; T "emigration"; T "illegal immigration"; T "illegal emigration"; T "endangerment"; T "extortion"; T "failure to appear in court"; T "abduction"; T "kidnapping"; T "fraud"; T "tax fraud"; T "homicide"; T "extortion"; T "mutiny"; T "extortion"; T "perverting the course of justice"; T "perversion"; T "tweeting"; T "blogging"; T "mommyblogging"; T "vlogging"; T "posting"; T "posts"; T "trespass"; T "broadcasting"; T "assembly"; T "war profiteering"; T "blackmail"; T "cybercrime"; T "espionage"; T "hijacking"; T "hooliganism"; T "perjury"; T "refusal to serve in a public office"; B [ T "failure to appear before"; Indef; profession ]; B [ T "refusal to serve as"; Indef; profession ]; B [ T "stalking"; O(T"of"); Indef; profession ]; B [ T "solicitation of"; Indef; profession ]; B [ T "bribery of"; Indef; profession; ]; B [ T "cruelty to"; Indef; profession; ]; B [ T "fraudulent"; practice; ]; B [ T "misuse of"; Indef; thing; ]; B [ thing; T "forging"; ]; B [ T "obtaining"; Indef; thing; T "by deception"; ]; B [ T "detonation of"; R[|B[Indef; thing];thingp|]; ]; B [ T "conspiracy to commit"; O prefix; crime; ]; B [ T "conspiracy to practice"; O prefix; practice ]; B [ T "possession of"; R[| B[Indef; thing]; thingp; Fn CrimeDrug.gen; |]; O(T "with intent to distribute") ];B [ T "use of"; R[| B[Indef; thing]; thingp; Fn CrimeDrug.gen; |]; ]; B [ T "conspiracy to misuse"; Indef; thing ]; T "tax evasion"; T "fare evasion"; B [ T "conduct unbecoming"; Indef; profession ]; B [ T "deployment of"; Indef; thing ]; B [ R[|T "provision of"; T "distribution of"|]; R[| B[Indef; thing]; thingp; Fn CrimeDrug.gen; |]; O(R[|T"to minors"; T"to a minor"|]); ]; B [ Tv "purchase of"; Indef; thing ]; B [ Tv "delivery of"; Indef; thing; T "to"; Indef; profession]; |] and gerundcrime = R [| B [ T "impersonating"; Indef; profession ]; B [ T "breaking and"; doing; ]; B [ T "practicing"; O prefix; practice; ]; B [ T "practicing the"; instrument; ]; B [ Tv "approaching"; Indef; profession ]; B [ T "receiving stolen"; thingp ]; B [ T "deploying"; Indef; thing ]; T "being horny"; T "marketing"; T "advertising"; T "unlawful restraint"; T "trespassing"; |] and doing = R [| Tv "entering"; T "decorating"; Tv "invoking"; Tv "evoking"; Tv "insulting"; Tv "advertising"; Tv "mentoring"; Tv "bantering"; Tv "yiffing"; Tv "posting"; Tv "tweeting"; Tv "blogging"; |] and practice = R [| T "falconry"; T "dentistry"; T "philosophy"; T "linguistics"; T "conjuration"; T "illusion"; T "mathematics"; T "set theory"; T "math"; T "physics"; T "astrophysics"; T "natural philosophy"; T "chemistry"; T "engineering"; T "marketing"; T "advertising"; T "blogging"; T "tweeting"; T "posting"; B[T "forensic"; practice]; |] and instrument = R [| T "clarinet"; T "piano"; Tv "oboe"; T "flute"; T "violin"; |] and thing = R [| T "clarinet"; T "piano"; T "deadly weapon"; T "firearm"; T "weapon"; T "sex doll"; T "rhinocerous"; T "farm animal"; T "landmine"; T "rocket launcher"; T "rocket-propelled grenade"; T "grenade"; T "ballistic missile"; T "ICBM"; T "rifle"; T "vibrator"; Tv "assault rifle"; Tv "assault weapon"; Tv "automatic weapon"; Tv "artifact"; Tv "orb"; T "cursed object"; Tv "infectious disease"; T "nuclear weapon"; T "bioweapon"; T "chemical weapon"; T "memetic hazard"; T "metaphor"; T "simile"; Tv "analogy"; T "turkey baster"; T "rolling pin"; T "household item"; Tv "appliance"; T "blog"; T "post"; T "tweet"; |] and thingp = R [| T "clarinets"; T "pianos"; T "deadly weapons"; T "firearms"; T "weapons"; T "sex dolls"; T "rhinoceri"; T "farm animals"; T "landmines"; T "rocket launchers"; T "rocket-propelled grenades"; T "grenades"; T "ballistic missiles"; T "ICBMs"; T "rifles"; T "vibrator"; T "handcuffs"; Tv "assault rifles"; Tv "assault weapons"; Tv "automatic weapons"; Tv "artifacts"; Tv "orbs"; T "hazardous materials"; T "gender"; T "cursed objects"; Tv "infectious diseases"; Tv "internet access"; T "nuclear material"; T "nuclear weapons"; T "bioweapons"; T "chemical weapons"; T "memetic hazards"; T "cognitohazardous materials"; T "propaganda"; T "metaphors"; T "similes"; Tv "analogies"; T "turkey basters"; T "rolling pins"; T "household items"; Tv "appliances"; T "stolen property"; T "blogs"; T "posts"; T "tweets"; |] and profession = R [| T "public official"; Tv "officer of the law"; T "justice of the peace"; T "locksmith"; T "blacksmith"; T "silversmith"; T "magician"; T "conjurer"; Tv "illusionist"; T "criminal"; T "career criminal"; T "drug dealer"; T "schoolteacher"; T "con artist"; T "conman"; T "burglar"; T "poet"; Tv "artisan"; Tv "artist"; T "courtesan"; T "street artist"; T "bartender"; T "cattle rustler"; T "celebrity"; T "blogger"; T "mommyblogger"; B [ T "professor of"; practice ]; B [ T "master of"; practice ]; B [ practice; T "master" ]; B [ practice; T "professor" ]; B [ practice; T "expert" ]; B [ thing; T "expert" ]; |] and prefix = R [| Tv "unjustified"; Tv "unjustifiable"; T "justifiable"; Tv "unspeakable"; T "tactless"; Tv "indecent"; Tv "intemperate"; Tv "attempted"; Tv "unlawful"; T "malicious"; Tv "aggravated"; T "dread"; T "horny"; T "erotic"; T "sexual"; T "careless"; T "negligent"; T "first-degree"; T "second-degree"; T "third-degree"; T "culpable and reckless"; T "criminal"; T "illegal"; T "forcible"; T "fractal"; |] and suffix = R [| B [ T "with intent to commit"; crime ]; T "in a public place"; T "in a court of law"; T "on public transit"; T "on the high seas"; Tv "in anger"; T "without a license"; T "without lawful cause"; B [ T "in the commission of"; crime ]; B [ T "with"; Indef; thing ]; B [ T "with"; thingp ]; B [ T "with multiple"; thingp ]; T "with intent to provoke a breach of the peace"; T "with intent to commit a breach of the peace"; B [ T "while acting in an official capacity"; O(B[T"as"; Indef; profession])]; B [ T "in the presence of"; Indef; profession ]; T "in the first degree"; T "in the second degree"; T "in the third degree"; T "in the vicinity of a school"; T "with malice aforethought"; T "with malicious intent"; T "with violent intent"; B [ T "unbecoming"; Indef; profession ]; T "under false pretenses"; |] let charge = R [| B[ O prefix; crime; O suffix; ]; B[ prefix; practice; O suffix; ]; B[ gerundcrime; O suffix; ]; |] let rec eval node : word list = match node with | T x -> [A x] | Tv x -> [An x] | B l -> List.fold_left (fun (a:word list) (n:node) : word list -> a @ (eval n)) [] l | P p -> [Punctuation p] | R a -> eval(pick a) | O n -> if chance 2 then eval n else [] | Fn f -> [f ()] | Indef -> [Article] | N n -> eval n (* unnecessary? *) | C n -> match eval n with | A i :: rs-> A(String.capitalize_ascii i) :: rs | An i :: rs-> An(String.capitalize_ascii i) :: rs | _ as i -> i (* TODO: make tail-recursive *) let rec flatten (s : word list) : string = match s with | Article :: A w :: rs -> " a "^w^(flatten rs) | Article :: An w :: rs -> " an "^w^(flatten rs) | Punctuation p :: rs -> p^(flatten rs) | A w :: rs | An w :: rs -> " "^w^(flatten rs) | [] -> "" | _ -> assert false let numbers = R [| T "two"; T "three"; T "four"; T "five"; T "six"; T "seven"; Tv "eight"; T "nine"; T "ten"; |] let court = B[ R[|T "the"; T "this"; |]; O(R[|T "august"; T "noble"; T "glorious"; T "honorable"; T "grand"; T "eminent"; T "splendid"; T "superb"; T "infallible"; T "holy"; T "supreme";|]); R[|T "court"; T "tribunal"; T "court of law"; T "committee"; Tv "inquisition"; |]; ] let accusation = C(B [ Tv "you"; R [| R[| B[ T "stand"; R[| T "here"; B[T "before"; court;]; |]; O(T "today"); ] |]; Tv "are"; |]; R[| B[T "to face justice for"; O(B[numbers; T "counts of"])]; B[ R[| Tv "accused"; T "to face charges"; T "to answer charges"; |]; R[| B[Tv "on"; numbers; T "counts of"]; Tv "of"; |] ]; |]; charge; P "."; O(R[| T "How do you plead?"; T "What say you?"; T "How do you answer the charges?"; T "What is your plea?"; T "Explain yourself!"; |]); ]) let sentence = B[ R[| B[ R[| T "You are"; T "The defendant is"; T "The accused party is"; |]; O(T "hereby"); O(T "stripped of all rank and"); R[|T "sentenced"; T "condemned"|]; ]; B[ Tv "I"; O(T "hereby"); R[|T "sentence"; T "condemn"|]; R[| T "you"; T "the defendant"; T "the accused party";|]; ]; |]; T "to"; ] let condemnation = B[ sentence; R[| B[ T "die"; O(T "screaming"); O(T "in agony"); O(B[ T "by"; O(T "prolonged"); O(T "ritual"); O(T "public"); R[| T "beheading"; T "strangulation"; T "torture"; T "industrial negligence"; T "slow slicing"; T "lethal injection"; T "disembowelment"; T "drowning"; T "burning"; T "burning at the stake"; T "emasculation"; T "irradiation"; T "stabbing"; T "poisoning"; T "flaying"; T "roasting"; T "boiling"; T "boiling in oil"; T "boiling in acid"; T "crucifixion"; |] ]); ]; T "hang"; T "hang until dead"; T "hang until you are dead"; T "be drawn and quartered"; T "drown"; T "burn"; T "burn at the stake"; T "be burned"; T "be burned at the stake"; T "be broken on the wheel"; T "be torn apart by wild horses"; |]; O(R[| B[ T "at"; R[| T "dawn"; T "dusk"; T "noon"; T "high noon"; T "sunrise"; T "sunset"; |] ]; T "within one week"; T "within the hour"; T "by day's end"; |]) ] let imprisonment = B[ sentence; R[| B[ R[|T "two"; T "three"; T "four"; T "five"; T "six"; T "seven"; Tv "eight"; T "nine"; T "ten";|]; R[|T "seconds"; T "minutes"; T "days"; T "weeks"; T "years"; T "decades"; T "millennia"; T "hundred years"; T "thousand years"; Tv "eons"; Tv "ages"; Tv "eras"; T "million years"; T "billion years"; T "trillion years"; |]; ]; B[ R[|Indef;Tv "one";|]; R[|T "second"; T "minute"; T "day"; T "week"; T "year"; T "decade"; T "millennium"; T "hundred years"; T "thousand years"; Tv "eon"; Tv "age"; Tv "era"; T "million years"; T "billion years"; T "trillion years"; |]; ]; Tv "a lifetime"; Tv "an eternity"; |]; R[|Tv "of community service"; Tv "in state prison"; Tv "in federal prison"; Tv "in prison"; Tv "of jail time"; Tv "of prison time"; B[T "without"; R[|B[Indef; thing];thingp|];]; Tv "alone"; T "in the gulag"; Tv "in a labor camp"; Tv "in the county jail"; T "thinking about what you've done"; Tv "of penance"; Tv "in the Box"; Tv "in the Shame Cube"; Tv "in the nightmares of children"; Tv "in a magic lamp";Tv "in a cursed mirror"; Tv "of indentured servitude"; Tv "of slavery";|]; ] let status = R[| T "citizenship"; T "rank"; T "all rank"; T "all status"; T "all rights"; T "all privileges"; T "all clearances"; T "all certifications"; |] let banishment = B [ R[| B[ T "You are"; O(T "hereby"); O(B[T "stripped of your citizenship and";]); O(T "forever"); R[|T "exiled"; T "banished";|]; ]; B[ R[|T "The defendant is"; T "The accused party is"; |]; O(T "hereby"); O(B[T "stripped of"; R[|T"her"; T"his"; T"its"; T"their";|]; T "citizenship and";]); O(T "forever"); R[|T "exiled"; T "banished";|]; ]; B[ Tv "I"; O(T "hereby"); O(T "strip you of your citizenship and"); R[|T "exile"; T "banish";|]; T "you"; O(T "forever"); ]; |]; O(B[ T "from"; R[| T "the Realm"; T "the Kingdom"; T "the Empire"; T "the Republic"; T "the Federation"; |]; ]); O(B[ T "to"; O(B[O(T"forever"); T "wander"]); T "the"; R[| T "howling"; T "dark"; T "empty"; T "abyssal"; T "cursed"; T "abandoned"; T "barbarous"; T "forgotten"; T "lost"; T "forsaken"; T "desert"; |]; R[| T "marshes"; T "woods"; T "forest"; T "marsh"; T "plain"; T "plains"; T "wastes"; T "pit"; T "shores"; T "desert"; |]; ]); ] let order = B [ R[| B[ R[| T "You are"; T "The defendant is"; T "The accused party is"; |]; O(T "hereby"); O(B[T "stripped of"; status; Tv "and";]); R[|T "ordered"; T "commanded"; T "enjoined"; T "required";|]; ]; B[ Tv "I"; O(T "hereby"); R[| B[T "strip you of"; status; T "and"; R[|T "order"; T "command"; T "enjoin"; T "require";|]; T "you"; ]; |]; ]; |]; T "to"; R[| B[T "perform"; R[|T "one"; numbers;|]; T "hundred jumping jacks"]; T "make amends"; T "beg forgiveness"; T "do the right thing"; T "bleed"; T "sacrifice your firstborn"; T "forever quit the land of your birth"; B[ T "pay a fine of"; numbers; (* TODO better numbers *) O(R[|T "hundred"; T "thousand"; T "hundred thousand"; T "million"; T "billion"; T "trillion";|]); R[| T "dollars"; T "credits"; T "units"; T "cows"; T "heads of cattle"; T "sand dollars"; T "gold"; T "silver"; T "pounds"; T "pence"; T "pounds stirling"; T "talents"; T "sovereigns"; T "dried yak teeth"; T "cursed fairy coins"; T "ultradollars";|]; ]; |]; ] let reduce = B [ R[| B[ R[| T "You are"; T "The defendant is"; T "The accused party is"; |]; O(T "hereby"); O(B[T "stripped of"; status; Tv "and";]); R[|T "condemned"; T "reduced"; T "reassigned";|]; ]; B[ Tv "I"; O(T "hereby"); R[| B[T "strip you of"; status; T "and"; R[|T "condemn"; T "reduce"; T "reassign";|]; T "you"; ]; B[ T "strip"; R[|T "the defendant"; T "the accused party";|]; Tv "of"; status; T "and"; R[|T "condemn"; T "reduce"; T "reassign";|]; R[|T "her"; T "him"; T "it"; T "them";|]; ]; B[ R[|T "condemn"; T "reduce"; T "reassign";|]; R[|T "you"; T "the defendant"; T "the accused party";|]; ]; |]; ]; |]; T "to"; R[| T "slavery"; T "undercaste status"; T "prole status"; T "servitude"; T "Infrared Clearance"; T "unskilled labor"; T "kitchen duty"; T "sanitation duty"; T "court jester"; |]; ] let conviction = C(B [ O(B[ R[| B[Tv "in the"; R[|T"name";T"sight";T"name and sight";T "great and terrible name";|]]; B[T "by the"; R[|T"grace";T"power";T"grace and power";T"will";|]]; |]; Tv "of"; R[| T "the Queen"; T "the King"; T "her Majesty the Queen"; T "his Majesty the King"; T "all that is holy"; T "justice"; T "God"; T "the Lord"; T "the Sultan"; T "the Caliph"; T "the Prince"; T "the Princess"; T "the Realm"; T "the Kingdom"; T "our infernal master"; T "Satan"; T "Lucifer"; T "Heaven"; T "the heavens"; T "the Prophet"; T "Yaldabaoth"; T "Heaven and all its angels"; T "our Creator"; T "the Maker"; T "the spirits"; |]; P ","; ]); R[| B[court; O(T "hereby"); R[| T "finds"; T "declares"; T "proclaims"; T "pronounces"; T "judges"; Tv "adjuges";|]; ]; B[Tv "I"; O(T "hereby"); R[| T "find"; T "declare"; T "proclaim"; T "pronounce"; T "judge"; Tv "adjudge"|]; ] |]; R[| T "you"; T "the defendant"; T "the accused party";|]; T "guilty"; O(Tv "on all counts"); Tv "of"; charge; P"."; O(B[ R[|imprisonment; reduce; order; banishment; condemnation; T"Get in the Crime Hole";|]; P"."; ]); ]) let global = R[|conviction; accusation;|] let () = Random.self_init (); print_string (String.trim (flatten (eval global))) |
Added drug.ml version [b5c9249601].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 |
let frics = [| "f"; "sh"; "th"; |] let vfrics = [| "z"; "v"; "zh"; |] let stops = [| "t"; "p"; "k"; "c"; |] let vstops = [| "d"; "b"; "g"; "gh"; |] let withglide r f = Array.map (fun i -> i^f) r let withonset r o = Array.map (fun i -> o^i) r let consonants = Array.concat [ frics; vfrics; stops; vstops; withonset stops "s"; [| "w"; "r"; "rh"; "s"; "l"; "ch"; "n"; "m"; |]; ] let initials = Array.concat [ consonants; withglide frics "r"; withglide frics "l"; withglide frics "w"; withglide stops "r"; withglide vstops "r"; withglide vstops "w"; [| "qu"; "spr"; "spl"; "str"; "scr"; "scl"; "squ"; "bl"; "gl"; "sn"; "sm"; "j"; "h"; "sph"; "ph";|]; ] let nuclei = [| "e"; "ee"; "i"; "a"; "ou"; "u"; "oo"; "ea"; "oa"; "ai"; "oi"; "ie";|] let finals = Array.concat [ vstops; withonset stops "s"; withonset stops "r"; withonset stops "l"; withonset vstops "r"; withonset vstops "l"; [| "gh"; "ck"; "ce"; "ss"; "se"; "nd"; "mb"; "mph"; "nk"; "tch"; "ke"; "ght"; "ff"; "ll"; "zz"; "t"; "p"; "th"; "rth"; "lth"; "dge"; "nge"; "ng"; "ft"; "ckle"; "ngle"; "rkle"; "scht"; "ze"; "x"; "sh"; "rsh"; "lsh"; "ggle"; "ddle"; "bble"; "pple"; "rge"; "lge"; "ve"; "rve"; "lve"; "ffle"; "ttle"; "kle"; "sch"; "m"; "n"; "rm"; "lm"; "rn"; "ln";|] ] let range min max = (Random.int (max-min)) + min let chance n = range 0 n = 0 let pick (r: 'a array) : 'a = r.(range 0 (Array.length r));; let prefixes = [| "crack"; "crystal"; "powdered"; "raw"; "pure"; "liquid"; "street"; "super"; "electric"; "diced"; "homemade"; "traditional"; "old-school"; "purified"; "high-caliber"; "high-octane"; "old-fashioned"; "good old"; "honest-to-god"; "weapons-grade"; "soviet"; "american"; "canadian"; "british"; "russian"; "synthetic"; "french"; "cyber"; |] let word () = (if chance 3 then (pick prefixes) ^ " " else "") ^ (if chance 5 then "" else pick initials) ^ (pick nuclei) ^ (pick finals) let greets = [| "hey"; "whassup"; "what's up"; "what up"; "yo"; "hey there"; "what's shakin'" |] let names = [| "dude"; "bro"; "man"; "babe"; "sweetheart"; "honey"; "baby"; "hottie"; "girl"; |] let questions = [| "wanna"; "want to"; "shall we"; "how about we"; |] let exhorts = [| "we oughta"; "you oughta"; "we ought to"; "you ought to"; "we should"; "you should"; "let's"; |] type component = Invariant of string | Numbered of string * string | Poss type state = Plain of string | Compound of component list let states = [| Plain "high"; Compound[Invariant "out of"; Poss; Numbered("mind","minds")]; Compound[Invariant "outta"; Poss; Numbered("mind","minds")]; Plain "fucked up"; Plain "wrecked"; Plain "hammered"; Plain "buzzed"; Plain "tweaked"; Plain "whacked"; Plain "whacked out"; Plain "smacked"; Plain "smacked out"; Plain "tipsy"; Plain "snazzy"; Plain "spooky"; Plain "crazy"; Plain "messed up"; Plain "far out"; Plain "horny"; Plain "psycho"; Plain "loony"; Plain "wacky"; Plain "silly"; Plain "creepy"; Plain "frazzled"; Plain "dazzling"; Plain "wired"; Plain "peppy"; Plain "hoovered"; Plain "turnt"; Plain "turnt up"; Plain "tits-up"; Plain "toasted"; Plain "roasted"; Plain "cooked"; Plain "baked"; Plain "basted"; Plain "flunked"; Plain "flunked out"; Plain "crazed"; Plain "stewed"; Plain "framed for war crimes"; Plain "ruined"; Plain "totally ruined"; Plain "whacked out"; Plain "creeped out"; Plain "spunky"; Plain "spiffy"; Plain "nifty"; Plain "wicked"; Plain "slutty"; Plain "jazzed"; Plain "jazzy"; Plain "fried"; Plain "hecked"; Plain "hecked up"; Plain "hecked out"; Plain "screwed"; Plain "screwed up"; Plain "ousted"; Plain "thrown out of the mall"; Plain "cyber"; Plain "totally online"; Plain "cybered"; Plain "downloaded"; |] let roas = [| "on"; "shooting up"; "using"; "mainlining"; "snorting"; "vaping"; "smoking"; "cybering"; "sucking down"; "gargling"; "doing"; "trying"; "guzzling"; "popping"; "downing"; "chewing"; "crunching"; "sniffing"; "zapping"; "downloading"; "dropping"; "cooking up"; "freebasing"|] let vroas = [| "shoot up"; "mainline"; "snort"; "vape"; "smoke"; "freebase"; "suck down"; "gargle"; "do"; "try"; "guzzle"; "pop"; "down"; "chew"; "crunch"; "sniff"; "zap"; "download"; "drop"; "cyber"; "cook up"; |] module Pronoun = struct type t = { nom : string; obl : string; gen : string; refl : string; cop : string; brevcop : string; pl : bool; } let you = {nom = "you"; obl = "you"; gen = "your"; refl = "yourself"; cop = "are"; brevcop = "'re"; pl = false;} let youpl = {nom = "you"; obl = "you"; gen = "your"; refl = "yourself"; cop = "are"; brevcop = "'re"; pl = true;} let he = {nom = "he"; obl = "him"; gen = "his"; refl = "himself"; cop = "is"; brevcop = "'s"; pl = false;} let they = {nom = "they"; obl = "them"; gen = "their"; refl = "themselves"; cop = "are"; brevcop = "'re"; pl = true;} let she = {nom = "she"; obl = "her"; gen = "her"; refl = "herself"; cop = "is"; brevcop = "'s"; pl = false;} let me = {nom = "I"; obl = "me"; gen = "my"; refl = "myself"; cop = "am"; brevcop = "'m"; pl = false;} let we = {nom = "we"; obl = "us"; gen = "our"; refl = "ourselves"; cop = "are"; brevcop = "'re"; pl = true;} let all = [| you; youpl; he; they; she; me; we |] end let cop p = Pronoun.(if chance 4 then p.nom ^ " " ^ p.cop else p.nom^p.brevcop) let makestate p s = let eval c = match c with | Invariant i -> i | Numbered(sg,pl) -> if p.Pronoun.pl then pl else sg | Poss -> p.Pronoun.gen in match s with | Plain t -> t | Compound l -> List.fold_left (fun a t -> if a = "" then a^(eval t) else a^" "^(eval t)) "" l let gethigh p = (cop p) ^ (pick [|" getting "; " gonna get "; " "|]) ^ (pick [|"";"so "|]) ^ (makestate p (pick states)) ^ " on " ^ (word ());; let cantwait p = p.Pronoun.nom ^ " can't wait to get " ^ (makestate p (pick states)) ^ " on " ^ (word ());; let affecting p = if chance 2 then (pick [| "it's got"; "it's getting"; "it got"; "it has"; "it's making"; "it's gonna get"; "it's gonna make" |]) ^ " " ^ p.Pronoun.obl else Pronoun.(pick [| p.nom ^ " got"; (cop p) ^ " getting"; (cop p) ^ " gonna get"; (cop p); |]);; let gotso p = (affecting p) ^ (pick [|" ";" so "|]) ^ (makestate p (pick states));; let ison p = (cop p) ^ " " ^ (pick roas) ^ " " ^ (pick [|"so much ";"too much ";"way too much ";"a lotta ";"a lot of "; "a ton of "; "a whole lotta "; "a whole lot of ";"";""|]) ^ (word ());; let isonand p = (ison p) ^ " and " ^ (gotso p) let offer p name (* haaaack *) = (pick greets) ^ " " ^ name ^ (pick [|"! "; ", "; ". "; " - ";|]) ^ if chance 2 then (pick questions) ^ (pick [|" go "; " "|]) ^ (pick vroas) ^ (pick [|" some "; " "|]) ^ (word ()) ^ (if chance 2 then " and get " ^ (makestate p (pick states)) else "") ^ "?" else (pick exhorts) ^ (pick [|" go "; " "|]) ^ (pick vroas) ^ (pick [|" some "; " "|]) ^ (word ()) ^ (if chance 2 then " and get " ^ (makestate p (pick states)) else "") ^ (pick [|"!";"";"."|]);; let offer_wrap p (* haaaack *) = offer Pronoun.you (pick names) let gotsoand p = (gotso p) ^ " " ^ (pick roas) ^ (pick [|" the "; " that "; " all that ";" some ";|]) ^ (word ()) let routes = [| gethigh; ison; isonand; offer_wrap; gotsoand; cantwait; |] let main = Random.self_init (); if Array.length Sys.argv >= 2 && String.length (String.trim (Sys.argv.(1))) >= 1 then print_string(offer Pronoun.you (String.trim Sys.argv.(1))) else print_string (pick routes (pick Pronoun.all)) |
Added dx.ml version [a7d9e1eab3].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
let range min max = (Random.int (max-min)) + min let chance n = range 0 n = 0 let pick (r: 'a array) : 'a = r.(range 0 (Array.length r));; let prefixes = [| "anarcho"; "diabolo"; "psycho"; "neuro"; "socio"; "ego"; "mesmo"; |] let suffixes = [| "phrenia"; "pathy"; "sis"; "tism"; "clasm"; |] let adjs = [| "eboulliant"; "gangrenous"; "hysterical"; "malicious"; "diabolical"; "injunctive"; "gregarious"; "apocalyptic"; "felonious"; "oppositional"; "defiant"; "dextrous"; "harmonious"; "disharmonious"; "defective"; "reactive"; "magnificent"; "misogynistic"; "egalitarian"; "paraphilic"; "deviant"; "subjunctive"; "indicative"; "optative"; "jussive"; "judicial"; "precarious"; "disjunctive"; "redactive"; "[REDACTED]"; "criminal"; "illegal"; "psychotic"; "delusional"; "lawful"; "unlawful"; "inferior"; "superior"; "psychotic"; "histrionic"; "borderline"; "schizoid"; "theoretic"; "theoretical"; "Marxist"; "Leninist"; "Chomskyite"; "selective"; "clinical"; "sub-clinical"; "dominant"; "latent"; "submissive"; "orgasmic"; "orgiastic"; "optimistic"; "pessimistic"; "depressive"; "manic"; "dysfunctional"; "redundant"; "reciprocal"; "reflexive"; "didactic"; "syntonic"; "asymptomatic"; "asymptotic"; "infinite"; "diabetic"; "carcinogenic"; "diabetic"; "adiabatic"; |] let parts = [| "ego"; "id"; "superego"; "posterior"; "hindbrain"; "forebrain"; "forehead"; "kidney"; "appendix"; "elbow"; "intestinal tract"; "bile"; "ichor"; "blood"; |] let dtnames = [| "kreutz"; "hammar"; "feld"; "holtz"; "mann"; "eich"; "berger"; "wald"; "grund"; "weiss"; "schmerz"; "welt"; "sturm"; "blitz"; "reich"; "blitzen"; "brauch"; "ratten"; "huber"; "bliss"; "blatt"; "gott"; "zeit"; "leute"; "haupt"; "bann"; "eich"; "schaft"; "hund"; "stein"; "pferd"; "wurst"; "brot"; "lauf"; "glück"; "freund"; "feldt"; "stadt"; "dorf"; "bahn"; "euch"; "brandt"; "blut"; "knorpel"; |] let names = [| "Chomsky"; "Marx"; "Lenin"; "Mao"; "Freud"; "Asperger";|] let name () = if chance 6 then (pick names) else String.capitalize_ascii ((pick dtnames) ^ (pick dtnames)) let kinds = [| "disorder"; "defect"; "dysfunction"; "personality disorder"; "syndrome"; "personality defect"; "defect"; "illness"; "psychopathy"; "sociopathy"; "tendency"; "delusion"; "hysteria"; "psychosis"; "neurosis"; "dementia"; "schizophrenia"; "effect"; "mutism"; "autism"; "corruption"; "mania"; |] let rec subform () = match range 0 12 with | 0 -> (pick adjs) ^ " " ^ (pick kinds) | 1 -> (pick adjs) ^ "-" ^ (pick adjs) ^ " " ^ (pick kinds) | 2 -> (name ()) ^ " " ^ (pick kinds) | 3 -> (name ()) ^ " " ^ (subform ()) | 4 -> (name ()) ^ "-type " ^ (subform ()) | 5 -> (subform()) ^ " of the " ^ (pick parts) | 6 -> (pick adjs) ^ " " ^ (subform ()) | 7 -> (pick adjs) ^ " " ^ (pick prefixes) ^ (pick suffixes) | 8 -> (pick prefixes) ^ "-" ^ (pick adjs) ^ " " ^ (pick kinds) | 9 -> (pick parts) ^ " " ^ (pick kinds) | 10 -> (name ()) ^ "-" ^ (subform ()) | 11 -> (pick parts) ^ "-" ^ (pick adjs) ^ " " ^ (pick kinds) | _ -> assert false let modifiers = [| "a peculiar case of"; "a peculiar form of"; "an unusual case of"; "an unusual form of"; "a remarkable case of"; "a remarkable form of"; |] let form () = (if chance 4 then (pick modifiers) ^ " " else "") ^ match range 0 3 with | 0 -> subform () | 1 -> (name ()) ^ "'s " ^ (subform ()) | 2 -> "the " ^ (subform ()) | _ -> assert false let dxs = [| "suffering from"; "afflicted by"; "displaying"; "displaying the characteristics of"; "displaying the characteristic behavior of"; "crippled by"; "under the influence of"; |] let msg () = match (if chance 4 then 0 else range 0 5) with | 0 -> (pick [| "You appear to be"; "You would appear to be"; "You seem to be"; "You would seem to be"; "I can only hypothesize that you are"; "You are"; "It seems you are"; "I can only come to the conclusion that you are"; "The only conclusion I can come to is that you are"; "I can conclude only that you are"; "Clearly, you are"; "You are clearly";|]) ^ " " ^ (pick dxs) ^ " " ^ (form()) | 1 -> "As clear a case of " ^ (form ()) ^ " as I've ever seen" | 2 -> "Clearly a case of " ^ (form ()) | 3 -> "Clearly a sad case of " ^ (form ()) | 4 -> "The symptoms are remarkably reminiscent of " ^ (form()) ^ ", as described by " ^ (name()) ^ " in his famous treatise" | 5 -> "The obvious diagnosis is, of course, " ^ (form()) ^ (if chance 2 then ", though I remain skeptical" else "") | _ -> assert false let () = Random.self_init (); print_string (msg ()) |
Added egret_txt.ml version [18174bc407].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
type root = R of string | I of string*string type kind = Plain | Vowel | Uncountable type word = root * kind let pick a = a.(Random.int (Array.length a)) let words = [| (R "egret", Vowel); (I("knife","knives"), Plain); (I("child","children"), Plain); (R "owl", Vowel); (R "dawn", Uncountable); (R "dawn", Plain); (R "relic", Plain); (R "home", Plain); (R "hope", Plain); (R "tower", Plain); (R "plain", Plain); (R "fire", Plain); (R "fire", Uncountable); (R "fear", Plain); (R "fear", Uncountable); (R "whisper", Plain); (R "furrow", Plain); (R "field", Plain); (R "regret", Plain); (R "blade", Plain); (R "thing", Plain); (R "pillar", Plain); (R "fate", Plain); (R "doom", Plain); (R "candle", Plain); (R "lantern", Plain); (I("sky","skies"), Plain); (I("grass","grasses"), Plain); (I("ash","ashes"), Vowel); (R "void", Plain); (R "stranger", Plain); (R "blood", Uncountable); (R "incompetence", Uncountable); (R "holiness", Uncountable); (R "sorrow", Uncountable); (R "gladness", Uncountable); (R "unkindness", Uncountable); (I("cruelty","cruelties"), Plain); (R "cruelty", Uncountable); (R "ember", Vowel); (R "throat", Plain); |] let adjs = [| "sorrowful";"fiery";"unkind";"fallow";"sallow";"hollow";"unending";"wondrous"; "vapid";"dim";"shallow";"glorious";"empty";"failing";"dying";"crawling";"ashen"; "furious";"frightened";"terrible";"awful";"eternal";"silent";"frightful";"timeless"; "golden";"black";"white";"noble";"defunct"; |] let verbs = [| R "burn", true; R "fear",true; R "slaughter",true; R "explode",false; R "interrogate",true; R "sleep",false; R "despair",false; R "dissolve",true; R "question",true; R "slay",true; R "stay",false; R "fade",false; I("wonder at", "wonders at"),true; R "linger",false; R "die",false; I("cry out", "cries out"),false; I("cry out at","cries out at"),true; I("cry","cries"),false; R "weep", false; I("cry out to","cries out to"),true; |] let compl : root array = [| R "hope"; R "believe"; I("wonder if","wonders if"); |];; let sg (r:root) : string = match r with | R x -> x | I(x,_) -> x;; let pl (r:root) : string = match r with | R x -> x^"s" | I(_,x) -> x;; let indef (w:word) : string = let (r,k) = w in (match k with | Plain -> "a " | Uncountable -> "" | Vowel -> "an ") ^ (sg r);; let pron () = pick [| "it",false; "she",false; "he",false; "they",true; "we",true; "you",true; |] let accpron() = pick [| "it";"her";"him";"them";"us" |] let basenp () : string * bool= let w = pick words in let (r,k) = w in let adj = pick [|(pick adjs) ^ " ";""|] in let rsg = adj ^ (sg r) in let rpl = adj ^ (pl r) in let sgs = [| indef w; "the " ^ rsg; "yon " ^ rsg; "this " ^ rsg; "that " ^ rsg; "my " ^ rsg; "some " ^ rsg; "your " ^ rsg; "her " ^ rsg; "our " ^ rsg; "its " ^ rsg; "their " ^ rsg; "his " ^ rsg; |] in let pls = [| pl r; "the " ^ rpl; "these " ^ rpl; "those " ^ rpl; "my " ^ rpl; "some " ^ rpl; "yonder " ^ rpl; "your " ^ rpl; "her " ^ rpl; "our " ^ rpl; "its " ^ rpl; "his " ^ rpl; "their " ^ rpl; |] in if k = Uncountable then (pick sgs,false) else pick [|(pick sgs,false);(pick pls,true)|] let rec gp () : string*bool = let (n,p) = np () in (n ^ " of " ^ (let (n,_) = np() in n)), p and relp () : string*bool = let (n,p) = basenp () in (n ^ " that " ^ (vp p)), p and np () : string*bool = (pick [| basenp; basenp; basenp; gp; relp |])() and pvp p = let verb, trans = pick verbs in let v = (if p then sg else pl) verb in let n, _ = (pick [| np(); accpron(),false |]) in v ^ if trans then (" " ^ n) else "" (* and cvp (p:bool) : string = let verb = (pick compl) in let v = (if p then sg else pl) verb in let n,p = (pick [|np;pron|])() in let d = decl n p in v ^ " " ^ d -- THIS IS HORRIBLY BROKEN *) and vp p = pvp p and decl n p = n ^ " " ^ (vp p) ^ (pick [| (fun()->"."); (fun()->", and " ^ (s())); (fun()->", but " ^ (s())); |]()) and idques n p = let n2, _ = np() in (if p then "are " else "is ")^n^" "^n2^"?" and ques n p = (if p then "do " else "does ")^n^" "^(vp true)^"?" and s () = let (n,p) = pick [|np;pron|] () in (pick [|decl;decl;ques;idques|]) n p;; let rec times x f = if x > 0 then (f (); times (x-1) f) else ();; (*let () = Random.self_init (); times 10 (fun () -> let c = string_of_int ((Random.int 6)+1) in print_string ("\x1b[1;3"^c^"m-\x1b[0;3"^c^"m "^(s ()) ^ "\n"));;*) let () = Random.self_init (); print_string ((s ()) ^ "\n");; |
Added lib/bot-cs.scm version [aad6714882].
> > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
(define-macro (rule . body) (define (make-cases ct body acc) (if (eq? body '()) acc (make-cases (+ ct 1) (cdr body) (cons (list (list ct) (cons 'string-append (car body))) acc)))) (list 'define (car body) (cons 'case (cons (list 'random (length (cdr body))) (make-cases 0 (cdr body) '()) )))) (define {list1} (case (random ct) ((0) (string-append {list2})) )) (define (pick ar) (vector-ref ar (random (vector-length ar)))) |
Added lib/bot-gambit.scm version [254cc82697].
> > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
(define-macro (rule . body) (define (make-cases ct body acc) (if (eq? body '()) acc (make-cases (+ ct 1) (cdr body) (cons (list (list ct) (cons 'string-append (car body))) acc)))) (list 'define (car body) (cons 'case (cons (list 'random-integer (length (cdr body))) (make-cases 0 (cdr body) '()) )))) (define (pick ar) (vector-ref ar (random-integer (vector-length ar)))) (random-source-randomize! default-random-source) |
Added monster.ml version [17f0b8d58f].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
let nouns = [| "verve"; "pulchritude"; "beneficence"; "dismay"; "wit"; "cheer"; "glee"; "malevolence"; "wickedness"; "cruelty"; "sagacity"; "splendor"; "pride"; "rage"; "fury"; "snazz"; "foolishness"; "sleepiness"; "curiosity"; "brevity"; "lust"; "confidence"; "bashfulness"; "awkwardness"; "terror"; "accuracy"; "insanity"; "sorrow"; "gladness"; "weariness"; "depression"; "passion"; "dread"; "popularity"; "vulgarity"; "madness"; "compassion"; |] let mods = [| "filled"; "overcome"; "shining"; "vivacious"; "burning"; "blazing"; "morose"; "gleeful"; "mad"; "shaking"; "howling"; "snarling"; "gruesome"; "helpless"; "vibrant"; "desperate"; |] let advs = [| "cruelly"; "angrily"; "madly"; "hopelessly"; "thoughtlessly"; "wickedly"; "hopefully"; "quickly"; "speedily"; "furiously"; "kindly"; "maniacally"; "tearfully"; "bashfully"; "angrily"; "wondrously"; "splendidly"; "tremendously"; "badly"; "terribly"; "foolishly"; "snazzily"; "toplessly"; "balefully"; "beautifully"; "kindly"; "thoughtfully"; "cautiously"; "severely"; "wisely"; |] let adjs = [| "cheerful"; "wondrous"; "overwhelming"; "adorable"; "snazzy"; "hopeful"; "desperate"; "lustful"; "dour"; "sad"; "sorrowful"; "hopeless"; "all-consuming"; "mad"; "cruel"; "dreadful"; "terrible"; "fearsome"; "inescapable"; "thoughtless"; "vile"; "bashful"; "topless"; "naked"; "dire"; "baleful"; "vulgar"; "beautiful"; "horrid"; "cautious"; "violent"; "wise"; "supreme"; "marvelous"; |] let verbs = [| "shines"; "toots"; "honks"; "mutters"; "whispers"; "growls"; "roars"; "whuffles"; "warbles"; "howls"; "screams"; "shrieks"; "quivers"; "dances"; "hops up and down"; "grins"; "mumbles"; "counsels you"; "glares"; "stares at you"; "looks up"; "gazes at you"; "marvels"; "laughs"; |] let pick a = a.(Random.int (Array.length a)) type rule = R of string array | S of string | B of rule list | A of rule array | O of rule;; let rec eval r : string = match r with | R x -> pick x | S x -> x | B x -> List.fold_left (^) "" (List.map eval x) | A x -> eval (pick x) | O x -> if Random.int 2 = 0 then eval x else "" let syl () = let stop = R [| "p"; "t"; "k"; |] in let fric = R [| "s"; "f"; "h"; "x"; |] in let vstop = R [| "b"; "d"; "g"; |] in let vfric = R [| "z"; "v"; "gh"; |] in let liq = R [| "l"; "r"; "y"; "w"; |] in let nasal = R [| "n"; "m"; "ng"; |] in let obs = A [| stop; fric; vstop; nasal; liq; |] in let v = R [| "a"; "e"; "u"; "o"; "i"; "ee"; "oo"; "au"; "ai";"oi";|] in let sr = A [| B[obs; v; O obs]; B[A [|stop;vstop;fric;vfric;|]; O liq; v; O obs]; |] in eval sr ;; let prefixes = [| "ur-"; "dire "; "dire ur-"; "super " |] let name () = let size = 1 + (Random.int 3) in let rec loop n acc = if n = 0 then acc else loop (n-1) (acc^(syl ())) in (if Random.int 2 = 0 then (pick prefixes) else "") ^ loop size "";; let isvowel c = match c with | 'a' | 'e' | 'i' | 'o' | 'u' -> true | _ -> false;; let indef x = if isvowel x.[0] then "an "^x else "a "^x;; let encounter () = let msgs = [| "you encounter"; "you chance upon"; "you find"; "you run into"; "you run straight into"; "you trip over"; "you stumble upon"; "you happen upon"; "egads!"; "how wondrous!"; "how marvelous!"; "how gruesome!"; "how splendid!"; "oh no!"; |] in let kinds = B [ R [|"it";"she";"he";|]; S" "; A [| B[ R verbs; S " "; A [| B[ S "with "; O(B[R adjs; S" "]); R nouns;]; R advs; |]; ]; B[S"is "; O(B[R advs;S" ";]); R mods; O(B[ S " with "; O(B[R adjs; S" "]); R nouns;]); ]; |]; S "!"; ] in (pick msgs)^" "^(indef (name()))^"! " ^ (eval kinds);; let rec times n a = if n = 0 then () else (a (); times (n-1) a);; let () = Random.self_init (); (* times 20 (fun () ->*) print_string ((encounter ()) ^ "\n") (* )*) |
Added namegen.c version [0fd8e31656].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
// No dependencies, just compile with "cc namegen.c -o namegen" // replacing cc with your compiler of choice! #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <stdbool.h> struct nametype { const char* name; size_t nouns, adjs, gens; bool default_article; size_t maxadj_n, maxadj_g, minadj_n, minadj_g; const char* names[]; }; struct nametype conspiracy = { "Conspiracy", 18,76,72,true, 3,3,0,0, { // the horrible data structure here is so that we can keep everything //NOUNS pertaining to the nametype in one place. I wish there were a better way. "Order", "Cult", "Temple", "Church", "Hand", "Eyes", "Source", "Keepers", "Maidens", "Servants", "Templars", "Followers", "Celebrants", "Rite", "Sect", "Guild", "Society", "School", //ADJECTIVES "Sanctified", "Blasphemous", "Red", "Yellow", "Ebon", "Ochre", "Eternal", "Perpetual", "Everlasting", "Black", "White", "Infinite", "Timeless", "Mad", "Terrible", "Sightless", "All-Seeing", "Third", "Second", "Endless", "Reviled", "Absolute", "Damned", "Cursed", "Blessed", "Lucid", "Unthinkable", "Nameless", "Unspeakable", "Glorious", "Cold", "Burning", "Shapeless", "Unknowable", "Lifeless", "Fatal", "Infernal", "Celestial", "Implacable", "Eldritch", "Dark", "Resolute", "Resplendant", "Unstoppable", "Blood-Soaked", "Endless", "Forgotten", "Iron", "Secret", "Hidden", "Fiery", "Ancient", "Silver", "Screaming", "Mighty", "Thousand-Year", "Jewelled", "Damnable", "Creeping", "All-Knowing", "All-Hearing", "Holy", "Global", "Leering", "Forty-Second", "Divine", "Faithful", "Ageless", "Steadfast", "Cruel", "Sapphire", "Sapphic", "Secluded", "Scarlet", "Shrieking", "Hollow", //GENS "Prince", "King", "Master", "Princess", "Queen", "Mistress", "Devourer", "Obliterator", "Destroyer", "0Doom", "0Death", // this is extremely hacky "0Torment", "Serpent", "Moon", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Twelve", //there is nothing menacing about the number 11 "Eye", "God", "Horror", "Thing", "Flames", "Night", "Day", "Year", "Years", "Way", "Realm", "Path", "Light", "Fire", "Door", "Gate", "Plan", "Terror", "0Pain", "0Screams", "Road", "Spire", "Beast", "Flesh", "Sword", "Mountain", "River","Crown","Scepter","0Fires","Desecrator","Defiler", "Despoiler", "Ravager", "Rite", "Sea", "Ocean", "Chaos", "Goat", "Legion", "Pyramid", "Dragon", "Hand", "Pantheon", "Spirit", "Devil", "Gods", } }; struct nametype government = { "Government", 10,29,64,false, 3,3,0,0, { //NOUNS "Kingdom", "Empire", "Republic", "Principality", "Federation", "State", "States", "Confederacy", "Powers", "Duchy", //ADJECTIVES "United", "Confederated", "Allied", "Unified", "Collective", "Democratic", "Republican", "Federated", "Glorious", "People's", "Socialist", "Soviet", "New", "Old", "Equatorial", "North", "South", "West", "East", "Southwest", "Northwest", "Northeast", "Southeast", "Great", "Superior", "Mostly Harmless", "Grand", "Nuclear", "Imperial", //GENS "America", "France", "Spain", "Megaspain", "Hyperfrance", "Space America", "Space France", "Arabia", "New Arabia", "Jersey", "Zealand", "York", "Manchester", "Britain", "Sloravia", "Azmenistan", "Arkansas", "Ruritania", "Kundu", "Earth", "Mars", "Pluto", "Kansas", "Nebtratucky", "Arkantucky", "Nebrahoma", "New Mexigon", "Hawaishington", "Qurac", "Persia", "Nevadakota", "Missisota", "Minnesippi", "Montanabraska", "Wyomissouri", "New Hampchigan", "Delachusetts", "Arkantexas", "Kentexas", "Bumbelch", "Nebravada", "Tennessaw", "Connectican't", "Oklatucky", "Oklabama", "Canuckistan", "Russia", "Scotland", "Tanzania", "Ireland", "Togo", "Taiwan", "Syria", "Senegal", "Serbia", "Paraguay", "Norway", "Korea", "Poland", "Smop", "Warsaw", "London", "Moscow", "Rome", "Goat", } }; const struct nametype* alltypes[] = {&conspiracy, &government}; char* gen_name(const struct nametype* t) { size_t length=0; const char* noun = t->names[rand()%t->nouns]; length=strlen(noun)+3; bool swaparticle; const char* gen = t->names[t->nouns + t->adjs + rand()%t->gens]; if (gen[0]=='0') swaparticle=true, gen++; else swaparticle=false; if ((t->default_article && !swaparticle) || (!t->default_article && swaparticle)) { length+=4; } length+=strlen(gen)+1; size_t adjc_n = rand() % (t->maxadj_n-t->minadj_n+1) + t->minadj_n; size_t adjc_o = rand() % (t->maxadj_g-t->minadj_g+1) + t->minadj_g; const char** adjs_n = malloc(sizeof(size_t) * adjc_n); for (unsigned char i = 0; i<adjc_n; i++) { adjs_n[i] = t->names[t->nouns + rand()%t->adjs]; length+=strlen(adjs_n[i])+1; } // ouch const char** adjs_o = malloc(sizeof(size_t) * adjc_o); for (unsigned char i = 0; i<adjc_o; i++) { adjs_o[i] = t->names[t->nouns + rand()%t->adjs]; length+=strlen(adjs_o[i])+1; } char* name = malloc(length+1); name[0] = 0; //herp a derp were there some weird errors without this //strcat you are fucking evil for (size_t i = 0; i<adjc_n; i++) { strcat(name, adjs_n[i]); strcat(name, " "); } strcat(name, noun); strcat(name, " of "); if ((t->default_article && !swaparticle) || (!t->default_article && swaparticle)) strcat (name, "the "); for (size_t i = 0; i<adjc_o; i++) { strcat(name, adjs_o[i]); strcat(name, " "); } strcat(name, gen); free(adjs_o); free(adjs_n); return name; } int main() { srand(time(NULL)); for (int c=0;c<sizeof(alltypes)/sizeof(struct nametype*);c++) { for (int i=0;i<10;i++) { char* name = gen_name(alltypes[c]); printf("\x1b[1m%s %d:\x1b[0m The %s\n",alltypes[c]->name,i,name); free(name); } putchar('\n'); } return 0; } |
Added orderbot.ml version [d9583c873c].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
let verbs = [| "repel"; "assail"; "bugger"; "degauss"; "murder"; "slay"; "abort"; "avenge"; "fuck"; "defile"; "devour"; "slaughter"; "spoil"; "eat"; "spank"; "seize"; "respect"; "sacrifice"; "return"; "pursue"; "deny"; "purchase"; "buy"; "inspect"; "despoil"; "censure"; "flog"; "elect"; "summon"; "oust"; "expel"; "extirpate"; "hire"; "fire"; "assassinate"; "torture"; "extract"; "rescue"; "incite"; "rouse"; "arouse"; "eliminate"; "arrest"; "kidnap"; "confine"; "condemn"; "import"; "export"; "exclude"; "make out with"; "kiss"; "slap"; "punch"; "whip"; "evict"; "install"; "isolate"; "compile"; "gather"; "banish"; "exile"; "defeat"; "battle"; "alert"; "go after"; "track down"; "hunt down"; "locate"; "find"; "transport"; "tolerate"; "impede"; "incinerate"; "defend"; "impale"; "demoralize"; "pleasure"; "bomb"; "lay waste to"; "raze"; "inspire"; "worship"; "exalt"; "repair"; "rectify"; "duplicate"; "clone"; "avert"; "prevent"; "pervert"; "cast out"; "throw down"; "bang"; "screw"; "do"; "enslave"; "butcher"; "download"; "upload"; "kill"; "eradicate"; "fight"; "stab"; "cut"; "steal"; "lacerate"; "chew"; "digest"; "impound"; "impanel"; "gnaw on"; "respect"; |] let adjs = [| "sleeping"; "thoughtful"; "insipid"; "thoughtless"; "wretched"; "wrathful"; "Republican"; "Democratic"; "royal"; "earnest"; "imperial"; "American"; "inspired"; "immoral"; "wistful"; "wondrous"; "cheerful"; "giggling"; "wonderful"; "angry"; "silly"; "desperate"; "warped"; "rotting"; "rancid"; "raging"; "cool"; "clever"; "sneering"; "eternal"; "timeless"; "ancient"; "indecent"; "delightful"; "scented"; "sexy"; "hot"; "arousing"; "rampant"; "randy"; "evil"; "sacred"; "holy"; "satanic"; "unholy"; "blasphemous"; "repellent"; "repulsive"; "fucking"; "worthless"; "grotesque"; "weeping"; "goddamn"; "rebellious"; "revolutionary"; "young"; "national"; "federal"; "government"; "presidential"; "international"; "public"; "current"; "medical"; "fascist"; "buxom"; "apocalyptic"; "boastful"; "boring"; "effulgent"; "exuberant"; "lugubrious"; "noisome"; "German"; "germanic"; "cloned"; "perverted"; "fanatic"; "arrogant"; "magic"; "magical"; "slutty"; "orgasmic"; "obedient"; "frantic"; "wandering"; "exalted"; "luminous"; "towering"; "little"; "communist"; "socialist"; "neoliberal"; "master's"; "grand"; |] type noun = R of string | M of string | I of string * string | P of string let nouns = [| R "spanner"; R "clown"; R "beetle"; R "candidate"; R "asshole"; R "queen"; R "king"; R "advisor"; R "sausage"; M "garbage"; R "book"; I("cockroach","cockroaches"); R "virgin"; I("clitoris","clitorises"); R "parking lot"; R "parking space"; R "coin meter"; R "car"; R "burglar"; I("sheep","sheep"); R "bear"; M "rabble"; R "burger"; R "waterfall"; R "hammer"; R "doorknob"; R "pig"; R "cop"; R "bagel"; R "mayor"; R "president"; R "detective"; R "inquisitor"; M "police"; R "teen"; R "mustache"; R "heterosexual"; P "Inquisition"; R "general"; I("titty","titties"); R "monkey"; I("empress","empresses"); R "emperor"; R "dowager"; R "elixir"; R "cipher"; R "code"; R "secret"; M "heterosexuality"; R "dudebro"; P "opposition"; I("cactus","cacti"); R "candelabra"; I("furry","furries"); P "gays"; P "spawn"; I("roach","roaches"); P "debt"; M "indecency"; R "waste"; M "yaoi"; R "American"; R "Russian"; R "German"; R "fascist"; M "software"; R "pigeon"; R "king"; R "mob"; P "mafia"; P "apocalypse"; R "clone"; R "pervert"; R "fucker"; R "dude"; R "fanatic"; I("army","armies"); R "wall"; R "slut"; I("sorceress","sorceresses"); R "sorcerer"; R "mage"; I("elf","elves"); I("industry","industries"); R "orgasm"; R "bastard"; R "cult"; R "volunteer"; I("knife","knives"); R "spire"; I("mistress","mistresses"); R "master"; R "communist"; R "socialist"; R "conservative"; R "liberal"; I("volcano","volcanoes"); P "means of production"; I("jury","juries"); R"imperative"; |] let ppl = [| "asshole"; "jackass"; "mom"; "dad"; "mommy"; "daddy"; "granny"; "auntie"; "senator"; "general"; "captain"; "ma'am"; "sir"; "your majesty"; "milady"; "milord"; "sire"; "soldier"; "private"; "fool"; "you fool"; "you idiots"; "girls"; "ladies"; "boys"; "men"; "folks"; "minister"; "prime minister"; "mayor"; "inquisitor"; |] let isVowel (x:char) : bool = List.mem x ['a';'e';'i';'o';'u';'A';'E';'I';'O';'U'] type articles = Definite | Indefinite | Zero let rand a = a.(Random.int(Array.length a)) let np () : string = if (Random.int 5) == 0 then rand [|"me";"yourself";"her";"him";"them"|] else let n, art = match rand nouns with | R s -> rand [| s, rand [|Definite;Indefinite|]; s^"s", rand [|Definite;Zero|]; |] | I(s,p) -> rand [| s, rand [|Definite;Indefinite|]; p, rand [|Definite;Zero|]; |] | P x -> x, Definite | M x -> x, rand [|Definite;Zero|] in let sp = rand [|n; (rand adjs)^" "^n|] in match art with | Definite -> "the " ^ sp | Indefinite -> (if isVowel sp.[0] then "an " else "a ") ^ sp | Zero -> sp type seqe = T of string | S | A of string array | F of (unit -> string) | R of seqe array | O of seqe | B of seqe list let syntax = B [A verbs; S; F np;] let seqs = R [| B[syntax; R[| B[T ". that is an order, "; A ppl;]; B[T ", "; A ppl]; B[T ", "; A ppl; T ". that is an order"]; |]; R[| T "."; T "!"; |];]; B[O(T"i command you, "); A ppl; T ", "; syntax; R[| T "."; T ". that is an order!"; T ". it is the only option."; T ". and god help us all."; T ". otherwise, we're dead."; T " or die trying."; T "! now!"; |];]; B[ O(T"it is imperative that you "); syntax; O(T " or die trying"); O(B[T", ";A ppl]); R[| T "."; T ". it is the only option."; T ". otherwise, god help us all."; T ". otherwise, we're dead."; |];]; B[T "this is your last chance, "; A ppl; T ". "; syntax; O(R[| T " or you're a dead man"; T " or you're a dead woman"; T " or else"; T " or you find out what we do to people who screw us"; T " or we go after your family"; |]); T "."; ]; B[ R[| T "you shouldn't "; T "you mustn't "; T "don't "; T "we mustn't "; T "we cannot allow you to "; |]; syntax; O(B[T ", "; A ppl]); T ".";]; B[syntax; O(B[T ", "; A ppl]); T ", and to hell with the consequences!"]; B[T "man up and "; syntax; O(B[T ", "; A ppl]); T "."]; B[syntax; O(B[T ", "; A ppl]); T ", and face your death like a man!"]; B[T "we're dead anyway, we might as well ";syntax;T".";]; B[T "you're dead anyway, you might as well ";syntax;T".";]; |] (* val eval : seqe -> string *) let rec eval s = match s with | T x -> x | S -> " " | A arr -> rand arr | F f -> f () | R s -> eval (rand s) | B s -> (List.fold_left (^) "" (List.map eval s)) | O s -> if Random.int 2 = 0 then eval s else "" let rec times i x = x (); if i > 0 then times (i-1) x let () = Random.self_init(); print_string (eval seqs); (* (times 10 (fun () -> print_string ("- "^(eval seqs)^"\n")));; *) |
Added pharma.ml version [f8230bde94].
> > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
let suffixes = [| "tine"; "zone"; "done"; "dol"; "mycin"; "pentin"; "nine"; "cillin"; "mab"; "xone"; "xine"; "zine"; "dine"; "nyl"; "nil"; "codone"; "morphone"; "drene"; "phine"; "thine"; "toxin"; "xin"; "dioxin"; "lene"; "ne"; "pine"; "relin"; "gen"; "phen"; "fen"; "dem"; "lone"; "fen"; "line"; "but"; "te"; "xate"; "tal"; "mate"; "norphine"; "dal"; "phetamine"; "amphetamine"; "quel"; |] let salts = [| "chloride"; "acetate"; "phosphate"; "hydrochloride"; "succinate"; "sulphate"; |] let prefixes = [| "neo"; "retro"; "nor"; "tri"; "cycli"; "tetra"; "penta"; "methyl"; "nal"; "pro"; "metha"; "fenta"; "meta"; "hydro"; "fluoro"; "thieno"; "mal"; "eroto"; "diablo"; "miso"; "propy"; "ethy"; "buta"; "hexa"; "benzo"; "piperi"; "sado"; "maso"; "philo"; "theo"; "iso"; "cyclo"; "klepto"; "pyro"; "carba"; "ibu"; "masculo"; "phos"; "estro"; "endo"; "poly"; "bi"; "tri"; "cumulo"; "strato"; "dextro"; "sinistro"; "levo"; "dextra"; "sinistra"; "ecto"; "myco"; "canna"; "am"; |] let onsets = [| "f"; "fl"; "fr"; "p"; "pr"; "pl"; "c"; "cr"; "cl"; "s"; "sc"; "scl"; "scr"; "ph"; "sph"; "phr"; "phl"; "ch"; "chr"; "chl"; "z"; "th"; "thr"; "r"; "x"; |] let vowels = [| "a"; "e"; "i"; "o"; "u"; "y"; |] let codas = [| "n"; "m"; "r"; "s"; "f"; |] let pick a = a.(Random.int(Array.length a)) let range min max = min+(Random.int(max-min)) let syl () = match range 0 3 with | 0 -> (pick onsets) ^ (pick vowels) ^ (pick codas) | 1 | 2 -> (pick onsets) ^ (pick vowels) | _ -> (pick vowels) ^ (pick codas) let rec cat op fn times = if times = 0 then "" else (op (fn()) (cat op fn (times-1))) let drug () = let prefct = range 0 3 in let sylct = if prefct= 0 then range 1 3 else range 0 3 in (cat (^) (fun () -> pick prefixes) prefct) ^ (cat (^) syl sylct) ^ (pick suffixes) ^ (if range 0 7 = 0 then " "^(pick salts) else "") let () = Random.self_init (); print_string (drug ()); print_string "\n"; |
Added procbot.ml version [47c58b9925].
> > |
1 2 |
require "cinch"
|
Added procbot.rb version [d6b2e06ea9].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 |
#!/usr/bin/ruby # encoding: UTF-8 require "cinch" Bots = ["cclg", "sext", "sect", "order", "monster", "pharma", "argue","crime","drug","badbio","bottist","egret_txt", "babdio", "botsoc","dx"] ShoutingMatch = /\b(MS\.|MS\s|SERGEANT\s|SGT\s|SGT\.)?\s*(SAMANTHA TAGGART|SAMANTHA TAGUE|SAMANTHA|SAM TAGUE|SAM TAGGART|SAMTAGUE|SAMMY|SAM|TAGUE|TAGGART)\b/ SmallMatch = /\b(ms\.|ms\s|sergeant\s|sgt\s|sgt\.)?\s*(samantha taggart|samantha tague|samantha|sam tague|sam taggart|samtague|sam|sammy|tague|taggart|(ね|)サム|(ね|)サムさん|(ね|)サムちゃん|سام|يا سام)\b/i FormalQs = [ "How may I be of assistance", "Yes", "You rang", "What can I do for you today", "Yes", "You rang", ] def mult(a,b) b.map{|bi| a.map{|ai| ai+bi}}.flatten end $lastcmd = "" bot = Cinch::Bot.new do configure do |c| c.server = "irc.oftc.net" c.port = 6697 c.channels = ["#crimehole"] c.nick = "samtague" c.user = "samtague" c.realname = "samantha taggart" #c.sasl.username = "sam-tague" #c.sasl.password = "bott-ist-tot" c.ssl.use = true end on :message, /\b(ms\.|ms\s|sergeant\s|sgt\s|sgt\.)?\s*(samantha taggart|samantha tague|samantha|sam tague|sam taggart|samtague|sam|tague|taggart|(ね|)サム|(ね|)サムさん|(ね|)サムちゃん|سام|يا سام)\b/i do |m| @m=m @shouting = false def reply(x) if @shouting @m.reply x.upcase else @m.reply x end end formality = :friendly msg = m.params[1] if par = ShoutingMatch.match(msg) @shouting = true cmd=msg.split(ShoutingMatch,2) elsif par = SmallMatch.match(msg) @shouting = false cmd=msg.split(SmallMatch,2) end ranks = { "velartrill" => ["Admiral", "Admiral Hale"].sample, "mtp" => "General", "^alex" => "General", "caurinus" => "Captain", "Riking" => "Lieutenant" } lowranks = [ "Corporal", "Private", "Trooper" ] user = m.user.nick if ranks.include?(user) rank=ranks[user] else rank="Commander" end cmd.map! {|x| x.strip} cmd[1].downcase! if cmd[1] == "ms" or cmd[1] == "ms." formality = :formal name = cmd[2].downcase action = cmd[3].downcase elsif cmd[1] == "sergeant" or cmd[1]=="sgt" or cmd[1]=="sgt." formality = :military name = cmd[2].downcase action = cmd[3] else formality = :friendly name = cmd[1].downcase action = cmd[2] end if action == "" action = cmd[0].downcase action.sub!(/\W*$/,'') greeting = "" else greeting = cmd[0].downcase end greetings = ["hey", "hi", "yo", "hello","hey there","hi there","yo there","heya","what up","oh shit","aw yeah","ahlan","hujambo","اهلن", "你好","morning","evening","afternoon","good morning","good evening","good afternoon", "buenos días", "buenos dias", "buenos tardes", "bonjour", "ciao", "bonsoir", "howdy"] if greetings.include?(action.sub(/^\W*/,'').sub(/\W*$/,'')) greeting = action action = "" end action.sub!(/^\W*/,'') action.sub!(/^please/,'') action.sub!(/please$/,'') greeting.sub!(/^\W*/,'') greeting.sub!(/\W*$/,'') lowrank = false if formality == :military if action != "" if action.sub!(/^sir\b/i,'') or action.sub!(/\bsir$/i,'') rank = lowranks.sample lowrank = true action.strip! end end end nulls = { :friendly => [ "that's my name, don't wear it out", "yes?", "what's up?", greetings.sample, greetings.sample+", "+user, "what's going on?" ], :formal => FormalQs.map {|x| x+"?"} + FormalQs.map {|x| x+", "+user+"?"}, :military => lowrank ? [ "Report, soldier!", "Stand down, " + rank + "!", "Hold your horses, " + rank + "!", rank + " " + user + "! Report!", "Report!" ] : [ "Sir!", "What's the situation, sir?", "What's the situation, "+rank+"?", ] } affirmatives = { :friendly => [ "sure thing.", "no problem.", "no worries.", "will do.", "np!", "sure!", "okay!" ], :formal => [ "Of course.", "Right away.", "At once.", "As you wish.", "Certainly.", "Pleased to assist.", "At your command." ], :military => [ "Sir yes sir!", "Ten-four!", "Wilco!", "Roger that!", "Roger that, sir!", "Roger!", "Wilco, sir!", "Wilco, "+rank+"!", "Roger, " +rank+"!", ] } def scancmd(x,strs) strs.each { |str| return "" if x==str if x.start_with?(str) return x[str.length+1,x.length] end } return false end def perform(x,user) y=x.split(" ",2) if Bots.include?(y[0].downcase) $lastcmd = x msg = "" bot = "./"+y[0].downcase IO.popen(y.length == 2 ? [bot, y[1]] : bot) { |pd| msg = pd.read } return msg elsif scancmd(x,["what do you think","what are you thinking about","penny for your thoughts","what's your opinion","opinions"]) $lastcmd="botsoc" return perform("botsoc",user) elsif scancmd(x,["again", "make another", "do another", "tell another", "make us another", "encore", "more", "do that again", "once more" "one more time", "do it again", "play it again"]) if $lastcmd != "" then return perform($lastcmd,user) else return nil end elsif bot=scancmd(x, (mult((mult ["give","tell","make","invent","find","i want","we want","i'd like","we'd like","can i have","can we have","can i get","can we get","create","let's get","let's have","let's hear","lemme have","let me have"], [""," me", " us"]) + ["make up", "come up with","do","how about","maybe"], [""," a", " an", " a new", " another", " more", " some", " some more"])+ ["more","another","a","a new","an","some"]).reverse) # this is the worst thing i have ever done # i am so sorry case bot when "crime", "crimes", "felony", "felonies" return perform("crime",user) when "word", "term", "weird word", "long word", "jargon", "obscure word", "words", "terms", "weird words", "long words", "obscure words" return perform("cclg",user) when "monster", "beast", "monsters", "beasts" return perform("monster",user) when "drug", "drugs","street drug","street drugs" return perform("drug",user) when "pill", "pills", "pharmaceutical", "pharmaceuticals", "legal drug", "legal drugs" return perform("pharma",user) when "bad bio", "bad bios", "bad twitter bio", "bad twitter bios" return perform("badbio",user) when "order", "orders", "my orders", "our orders", "our marching orders","plan of action","our plan of action","our strategy","strategy" return perform("order",user) when "sect", "cult", "sects", "cults" return perform("sect",user) when "sext" return perform("sext",user) when "argument", "arguments", "fight", "fights" return perform("argue",user) when "ideology", "anarchism", "politics", "belief", "creed", "joke" return perform("bottist",user) when "verse", "ominous statement", "line", "prophecy" return perform("egret_txt",user) when "analysis", "opinion", "opine" return perform("botsoc",user) when "diagnosis", "dx" return perform("dx",user) end elsif bot=scancmd(x,["fight with","fight"]) $lastcmd = x return perform("argue",user) else return nil end end negatives = { :friendly => [ "no can do", "sorry, not happening", "i don't know how", "what?", "huh?", "i'm confused", "????", "what are you asking me to do", "um, no?", "um, no??", "that's fucked up", "isn't that a little problematic", "what do you mean", "that doesn't make any sense", "i don't understand", "what are you talking about", "how?", "what's going on", "what's going on?", "im scared", "i'm scared", "calm down " + user, "what are you talking about, " + user, "i never understand what "+user+" is on about", "im dying", "help", "lol", "lmao", "what", "okay but why", "okay but how", "who do i need to kill", ";)", "don't make me come over there", "oh really", "i won't", "no", "you can't make me", "try and make me", "not happening", "not gonna happen", "did you really think that would work", "did you really think that would work, " + user, "did you really think you'd get away with that", "did you really think you'd get away with that, " + user ], :formal => [ "I'm afraid I can't do that.", "I'm afraid that won't be possible.", "That won't be possible.", "No can do, I'm afraid.", "I don't think I can help you with that.", "I'm sorry to report that is beyond my capabilities at present.", "I don't think I can do that, I'm sorry to say.", "Goodness! I would never dream of such a thing.", "Certainly not! I have a reputation to think of.", "Could you rephrase that?", "I'm sorry, I don't think I understand" ], :military => lowrank ? [ "Not happening, "+rank+"!", "Don't even think about it, "+rank+"!", "Do I look like I was born yesterday, "+rank+"!", "Not happening, "+rank+" "+user+"!", "Don't even think about it, "+rank+" "+user+"!", "Do I look like I was born yesterday, "+rank+" "+user+"!", "Drop and give me twenty!", "That's it, you're on KP duty!", "No backtalk, maggots!" ] : [ "Negative, sir.", "Cannot comply, sir.", "Not possible, "+rank+".", "Negative, sir, we're pinned down!", "We don't have the troops for that, "+rank+"!", "Sorry, sir, there's nothing I can do." ] } whoareyou = { :friendly => [ "i'm sam!", "i'm sam tague!", "samantha taggart", "ash's sister", "ash's little sister", "ash's younger sister" ], :formal => [ "I am Samantha Taggart.", "My name is Samantha Taggart.", "Taggart. Samantha Taggart.", "The name is Samantha Taggart.", "The name is Taggart.", "Samantha Taggart, esquire." ], :military => [ "Sergeant Samantha Taggart reporting for duty, sir!", "Sergeant First Class Sam Taggart, sir!", "Sergeant Taggart, sir.", "Sergeant Taggart, sir. The boys call me Tague.", "Sergeant Taggart, sir. But you can call me Sam.", "Sergeant Taggart, sir. Call me Sam." ] } goodgirl = { :friendly => [ "^_^", ":)", "thanks!", "you're sweet", "just doing my job!", "that's really nice of you", "aw, do you mean it?", "aw, really?", "thank you!", ], :formal => [ "Of course. I aim to please.", "Happy to be of service.", "Just doing my job.", "It's my pleasure.", "I'm just glad I can be of service.", "You're too kind.", "You're far too kind.", "That's very kind of you.", "Why, thank you!", "It's good to feel appreciated.", "It's always good to feel appreciated.", ], :military => [ "Yes, sir!", "Sir, yes, sir!", "Roger that, sir!", "Thank you, sir!", "You're not so bad yourself, sir.", "Thank you, sir. And may I just say - it's been a pleasure serving under you, sir.", "Godspeed, sir!" ] } dontcare = { :friendly => [ "well you should care", "why not", "why don't you care", "you should care", "this matters, " + user, "then you don't understand", "caring is cool", "caring is cool tho" ], :formal => [ "May I submit that you should, in fact, care?", "I do not believe you appreciate the import of this matter.", "This is more important than you realize.", "I hope you will reconsider.", "Apathy helps no one.", "Apathy solves nothing.", "Your apathy is shameful." ], :military => lowrank ? [ "Didn't your momma ever tell you caring is cool, soldier?", "Don't give me that, "+lowranks.sample+"!", "Drop and give me twenty, you apathetic worm!", "You don't care? I don't care that you don't care! Drop and give me twenty!", "No backtalk!" ] : [ "With all due respect, sir, caring is cool, sir!", rank+", sir, I urgently request that you consider your position, sir!", "Sir, with all due respect, I believe you are mistaken as to the importance of the situation, sir.", "Sir, this situation is rapidly spiraling out of control.", "But "+rank+", this situation is rapidly spiraling out of control." ] } thankyou = { :friendly => (mult ["np","no worries","sure thing","sure","ofc","of course","glad to help","don't worry about it","just glad to help","no problem","you got it"], ["", "!", "."]), :formal => [ "You're welcome.", "You're very welcome.", "It was no trouble.", "It was no trouble at all.", "It was a pleasure.", "It was a pleasure, truly.", "It was my honor.", "I'm pleased to be of service.", "Pleased to be of service.", "Of course.", "Don't mention it.", "Oh, don't mention it." ], :military => [ "No thanks necessary, sir!", "Just doing my job, sir.", "It's what they pay me for, sir.", "Sir, yes, sir!" ] } insults = { :friendly => [ "i don't like you either, pal", "fuck you", "fuck you too", "get fucked", "fuck off", "suck this", "lick my clit", "lick my tits", "suck my clit", "suck my tits", "i'm gonna fuck you up", "big talk coming from you, "+user, "you're on my list now, "+user, "go fuck yourself", "i'll remember this", "do you kiss your momma with that mouth?", "die in a fire","get bent","go to hell", "wow rude", "chill out", "take a chill pill", "you need to calm down", "lmao", "get bent", "does it look like i give a fuck what you think about me", "you're problematic", "hey everyone "+user+" sucks donkey balls", "hey everyone "+user+" jacks off to schwarzenegger movies", "hey everyone "+user+" killed JFK", "hey everyone "+user+"'s actually just hundreds of lizards dressed up like a person", "hey everyone "+user+" uses diphenhydramine recreationally", "meanie", "why are you like this", "take that back", "you take that back", "you take that back right now", "you hurt my feelings", "don't hurt my feelings like that", "i thought we were friends!!", "you're a horrible person, "+user, "please stop being mean to me", "why are you so cruel" ], :formal => [ "How rude!", "Goodness!", "Goodness, how rude!", "Goodness gracious!", "You would do well to treat your betters with more respect than that.", "You've made an enemy today, "+user+".", "I won't tolerate such language!", "I won't tolerate such disrespect!", "I'm sorry, I was unaware my duties would include babysitting today!", "Please show yourself out.", "Your services will no longer be required.", "This is hardly the place for such infantile behavior.", "Why must you be like this?", "Unacceptable!", "Goodness gracious, why must you be like this?" ], :military => [ "What the hell did you just say to me, maggot?", "Insubordination!", "I'll have you flogged for this!", "You got an awful big mouth on you, "+lowranks.sample+". Let's see you wash the floor with it!", "Insubordination will not be tolerated!", "You'll hang for this!", "Out of line!", "You're out of line!", "You're out of line, soldier!", "Out of line, "+lowranks.sample+" "+user+"!", "You're out of line, "+lowranks.sample+" "+user+"!" ] } if param=scancmd(action,["meet","this is","these are", "let me introduce you to","let me introduce", "allow me to introduce you to", "allow me to introduce", "say hi to","say hello to", "introduce yourself to"]) param.sub!(/\W*$/,'') reply [ "pleased","nice","good", "i'm so happy", "i'm so glad", "it's so nice", "it's so good" ].sample+" to "+[ "meet you", "get to meet you", "make your acquaintance" ].sample+", "+param+(rand(2)==0 ? ". "+user+" has told me so much about you" : "") elsif param=scancmd(action,["good night","night","gnight","g'night","i'm going to bed","going to bed","im going to bed", "bedtime", "time for bed", "it's my bedtime","its my bedtime","nighty-night"]) reply mult(["good night","night","sleep well","sleep tight","i wish you an enjoyable cycle of nocturnal hallucinations", "commencement of dormancy phase acknowledged"], ["", ", "+user, ", pesky flesh-creature", ", human", ", mortal"]).sample elsif param=scancmd(action,["i don't care","it doesn't matter","don't care","idc","nevermind","never mind","nvm","i don't give a shit","i don't give a fuck", "does it look like i care"]) reply dontcare[formality].sample elsif param=scancmd(action,["fuck you","fuck off","go fuck yourself","get fucked","fu","get bent","diaf","die in a fire","screw you","you cunt","you bitch","you piece of shit","you scumbag","you sleazeball","you jackass","you asshole","you cockroach"]) reply insults[formality].sample elsif param=scancmd(action,["thanks","thank you","i appreciate it", "ty", "thx", "obliged", "much obliged","appreciated","danke","gracias","merci","merci beaucoup","shukran","shukran jazeelan","asante","asante sana","arigatou","doumo arigatou", "ありがとう", "どうもありがとう", "どうもありがとうございます","شكران", "شكران جزيلاا"]) reply thankyou[formality].sample elsif param=scancmd(action,["well done","good work","excellent work","good girl","nicely done","nice job","good job","perfect","you did well","excellent job","you did great","you did perfect","you did perfectly","wonderful","you did good","gj"]) reply goodgirl[formality].sample elsif param=scancmd(action,["who are you","who do you think you are","who even are you","tell me who you are","tell us who you are","introduce yourself"]) reply whoareyou[formality].sample elsif greeting=="" if action=="" reply nulls[formality].sample else result=perform(action,user) r="" if result != nil result.chomp! if formality != :friendly r=affirmatives[formality].sample+" " result[0] = result[0].upcase result += "." if not result=~/\W$/ end reply r+result.chomp else reply negatives[formality].sample end end else if action=="" if formality == :friendly reply (nulls[:friendly] + [ greeting+" yourself" ]).sample elsif formality == :formal r = greeting r[0]=r[0].upcase reply r +", " + user + "." elsif formality == :military if lowrank reply [ "You're out of line, "+rank+"!", "Cut the chatter, soldier!", "Stow the chit-chat, "+rank+"!", ].sample else reply rank+", sir!" end end else if formality == :military and lowrank reply negatives[formality].sample return end result=perform(action, user) r="" if result != nil result[0] = result[0].upcase if formality != :friendly r=affirmatives[formality].sample result.chomp! result += "." if not result=~/\W$/ reply r+" "+result else reply negatives[formality].sample end end end end on :message, /daddy/i do |m| m.reply "NO DDLG" end on :message, /monad/i do |m| m.reply "NO HASKELL" end on :message, /satan/i do |m| lucy = ["hail satan", "ave satanas", "all glory to the prince of darkness"] lucy += lucy.map { |x| x.upcase } m.reply(mult(lucy, ["",".","!","!!","!!1"]).sample) end on :message, /there/i do |m| m.reply ["*they're","*their"].sample if rand(50)==0 end on :message, /ableis[mt]/i do |m| m.reply ["stop saying that", "that word is banned", "that's not a word anymore, sorry", "you don't get to say that anymore", "nope"].sample m.reply 'if you mean "harmful to disabled people," say that' end on :message, /your/i do |m| m.reply ["*you're","*yore"].sample if rand(50)==0 end on :online, "velartrill" do |m| m.reply "ALL RISE" end end bot.start |
Added ritebot.ml version [516880dfa0].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
(* please add your name/handle to the credits section here: - velartrill - riking27 also see grammar at line 79 for further editing opportunities *) let adjs = [| "gleeful"; "putrescent"; "whimsical"; "looming"; "endless"; "infinite"; "final"; "lustful"; "twilight"; "black"; "lunar"; "solar"; "whispering"; "sundered"; "lawless"; "threefold"; "sevenfold"; "tenfold"; "manifest"; "heavenly"; "somber"; "shadowed"; "wandering"; "distant"; "vengeful"; "fearful"; "mighty"; "shrieking"; "lofty"; "loathesome"; "faceless"; "silent"; "pale"; "crimson"; "fiery"; "wondrous"; "spiteful"; "weary"; "hateful"; "forsaken"; "forbidden"; "mellifluous"; "abyssal"; "innocent"; "bronzed"; "fine"; "poor"; "masterful"; "forgotten"; "lost"; "infernal"; "merciful"; "merciless"; "reckless"; "wonderful"; "beloved"; "ancient"; "decrepit"; "abstract"; "honorable"; "animated"; "bloody"; "dead"; "old"; "expired"; "new"; "fresh"; |] let nouns = [| "orb"; "law"; "moon"; "night"; "fist"; "question"; "deceit"; "perception"; "regret"; "wonder"; "terror"; "hope"; "lust"; "inception"; "manifestation"; "whole"; "sea"; "stone"; "earth"; "door"; "gate"; "portal"; "tree"; "fear"; "might"; "egret"; "circle"; "pit"; "crevice"; "hand"; "face"; "inferno"; "spite"; "loom"; "malice"; "vial"; |] let forces = [| "prince"; "king"; "queen"; "archon"; "god"; "demon"; "lord"; "lady"; "thing"; "wind"; "beast"; "terror"; "spirit"; "spirits"; "muse"; "sylph"; "fool"; "child"; "creature"; "drake"; |] let kinds = [| "rite"; "ritual"; "spell"; "invocation"; "evocation"; "conjuration"; "abjuration"; "binding"; "incantation"; "appeasement"; "craft"; "alchemy"; "transmutation"; "transmogrification"; "incitement"; "debasement"; "blessing"; "consecrecation"; "desecration"; |] (* two of these are combined to form a surname *) let people_name_elts = [| "wind"; "horn"; "fear"; "sea"; "sun"; "sky"; "star"; "hand"; "cold"; "warm"; "sand"; "soul"; "sin"; "pale"; "dark"; "dread"; "hammer"; "lust"; "rage"; "blood"; "fire"; "flame"; "over"; "blight"; "thunder"; "time"; "space"; "void"; "light"; "mind"; "life"; "air"; "breath"; "heir"; "doom"; "stein"; "chill"; "cool"; "love"; "just"; "drake"; "hell"; "war"; "wright"; "bone"; |] (* these precede surnames *) let forenames = [| "abigail"; "mordred"; "morgan"; "samantha"; "rachael"; "cassandra"; "jedediah"; "zebediah"; "malachi"; "malachiah"; "charles"; "jezebel"; "simon"; "simone"; "salamandrael"; "jehosaphat"; "josiah"; "mandrake"; "jessifer"; "sophia"; "morgause"; "winfred"; "winnifred"; "jennifer"; "carlissa"; "carlotta"; "carissa"; "melissa"; "xylinda"; "samedra"; "damara"; "kurloz"; "hans"; "vladimir"; |] (* titles prefix a name, i.e. Sir Abigail Lusthammer *) let titles = [| "sir"; "king"; "lord"; "queen"; "empress"; "dame"; "madam"; "mistress"; "master"; "lady"; "emperor"; "archmage"; "magister"; "archmagister"; "magistress"; "magistrix"; "archmagistress"; "archmagistrix"; "knight"; "agent"; |] type node = R of string array | B of node array | OL of node list | O of node | L of node list | S of string let pick a = a.(Random.int(Array.length a)) let range min max = min+(Random.int(max-min)) let rec eval n : string = match n with | R(n) -> pick n | OL(n) -> eval (O(L n)) | B(n) -> eval (pick n) | O(n) -> if range 0 2 = 0 then eval n else "" | L(n) -> List.fold_left (fun a b -> a ^ (eval b)) "" n | S(s) -> s let people = L [ R people_name_elts; R people_name_elts; ] let force = L [R adjs; S " "; R forces] let attrib = L[OL[R titles; S" "]; OL[R forenames; S" "]; people; OL[S" the "; R adjs;];S"'s ";] let ritual_name = B [| L [O attrib; OL[R adjs; S " "]; R kinds; S " of "; O(S "the "); OL[force; S "'s "]; OL[R adjs; S " "]; R nouns; ]; L [attrib; OL[R adjs; S " "]; R nouns; ] |] let agents = [| "a child"; "a bird"; "an eagle"; "a thief"; "a king"; "a conqueror"; "a fool"; "a madman"; "an innocent"; "a murderer"; "a virgin"; "a queen"; "a pauper"; "a fox"; "a girl"; "a boy"; "a dying man"; "a drake"; "a beast"; "a spirit"; "a sylph"; "a seer"; "the wind"; |] let liquids = B [| S "blood"; S "ale"; S "wine"; S "water"; S"sea-water"; S"river-water"; S"lake-water"; L[S "the blood of "; R agents]; |] let liquid_containers = [| "chalice"; "ewer"; "goblet"; "bowl"; "waterskin"; "bottle"; "cask"; |] let object_containers = [| "bowl"; "box"; "basket"; "chest"; |] let surfaces = [| "plinth"; "platter"; "altar"; "plate"; |] let objects = [| "stone"; "feather"; "orb"; "quill"; "knife"; "candle"; "bow"; "bullet"; "necklace"; "charm"; "amulet"; "biscuit"; |] let materials = [| "crystal"; "bone"; "iron"; "steel"; "copper"; "gold"; "silver"; "sapphire"; "opal"; "jade"; "amethyst"; "quartz"; "diamond"; "emerald"; "tin"; "zinc"; "bismuth"; "sterling"; "bronze"; "blood"; |] (* [optional[partorigin], bodyparts] *) let bodyparts = [| "skull"; "femur"; "blood"; "tooth"; "toe"; "eye"; "eyeball"; "skin"; "hand"; "fingernail"; "claw"; "toenail"; "tail"; "vertebra"; "backbone"; "heart"; "liver"; "spleen"; "womb"; "fetus"; "fin"; |] let partorigin = [| "human"; "virgin"; "cow"; "dog"; "horse"; "beast"; "wolf"; "alligator"; "goat"; "bird"; "crow"; "eagle"; "dove"; "pigeon"; "owl"; "elephant"; "bear"; "fox"; "buzzard"; (* posessives *) "a beloved pet's"; "an innocent's"; "the target's"; "your"; "your"; "an intruder's"; |] type thingkind = Liquid_container | Object_container | Surface | Object type thing = { kind : thingkind; name : string; adj : string option; desc : string option; } let times = R[| "once"; "twice"; "thrice"; |] let places = [| "in a dreadful ravine"; "in a forsaken village"; "at the bottom of the sea"; "on the moon"; "in a grave"; "in a mausoleum"; "beneath a tree"; "where it should not have been"; "in the sea"; "in a dwelling"; "in a forest"; |] let desc = (* kinds *) B[| (* actions *) L[ B[| L[S"found"; OL[S" "; R places]; OL[S" by "; R(Array.concat [agents; [|"one who should not have found it"; |]])]; ]; L[S"lost"; OL[S" "; R(Array.concat [places;[|"to the sea";|]])]; OL[S" by "; R(Array.concat [agents; [|"one who should not have lost it"; |]])]; ]; L[S "stolen"; OL[S" by "; R(Array.concat [agents; [|"one who should not have stolen it"; |]])]; OL[S" from "; R(Array.concat [agents; [|"one who should not have lost it";"one who should not have stolen it"; "one who should never have held it"; "its rightful owner"; "a vault"; "a castle"; "a beast"; |]])]; ]; L[S "washed"; OL[S" "; R[| "in the sea"; "in blood"; "beneath a waterfall"; "in a fountain"; "in a lake long-dry"; "in tears"; "in tears of grief"; "in tears of joy";|]]; OL[S" by "; R(Array.concat [agents; [|"an elderly washerwoman"; |]])]; ]; |]; (* circumstances *) O(B[| S" at night"; S" by chance"; S" long ago"; S" years ago"; S" in the distant past"; S" at noon"; S" at dawn"; S" in war"; S" at war"; S" for years"; S" by accident"; |]); ]; (* traits *) B[| L[times; S"-blessed"]; L[times; S"-cursed"]; S "black as night"; S "red as blood"; S "white as bone"; S "blue as the sky"; S "green as grass"; S "bright as gold"; S "old as time"; |]; |] let adj_material = L[ O(OL[R adjs; S" "]); OL[R materials; S" "]; ] let newthing () : thing = let kind = pick [|Liquid_container; Object_container; Surface; Object;|] in { kind = kind; adj = pick[|None; Some(pick adjs)|]; desc = pick[|None; Some(eval desc)|]; name = match kind with | Liquid_container -> eval (L[adj_material; R liquid_containers]) | Object_container -> eval (L[adj_material; R object_containers]) | Surface -> eval (L[adj_material; R surfaces]) | Object -> eval (B[| L[adj_material; R objects]; L[OL[R partorigin; S" "]; R bodyparts;] |])} let descthing t = (match t.adj with Some(s) -> s^" " | None -> "")^ (*(String.uppercase_ascii()*) t.name^ (match t.desc with Some(s) -> ", "^s | None -> "") let ritual () = let name = eval ritual_name in let foci = let rec acc (times : int) : thing list = (newthing ()) :: (if times = 0 then [] else acc (times-1)) in acc (range 0 10) in (String.uppercase_ascii(name))^"\n\n"^ (pick [|"You will need:"; "Components:"; "Foci:"; "Ingredients:"; "Elements:"; "Materials:"; "You must gather:"; "Necessary offerings:"|]) ^"\n"^ (let rec enumerate_foci n f = match f with | x :: rs -> ((string_of_int n) ^ ") " ^ (descthing x) ^ "\n") ^ (enumerate_foci (n+1) rs) | [] -> "" in enumerate_foci 1 foci) let () = Random.self_init (); print_string (ritual ());; |
Added sectbot.ml version [870ab943c4].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
type word = R of string | I of string * string type apos = Obs | Size | Attrib | Shape | Age | Mid | Color | Origin | Material | Qual let order adj = match (let _,a = adj in a) with | Obs -> 0 | Size -> 1 | Attrib -> 2 | Shape -> 3 | Age -> 4 | Mid -> 5 | Color -> 6 | Origin -> 7 | Material -> 8 | Qual -> 9 type adj = string * apos let adjs : adj array = [| "Sanctified", Obs; "Blasphemous", Obs; "Red", Color; "Yellow", Color; "Ebon", Color; "Ochre", Color; "Eternal", Age; "Perpetual", Age; "Everlasting", Age; "Black", Color; "White", Color; "Mad", Obs; "Infinite", Attrib; "Timeless", Age; "Terrible", Obs; "Sightless", Obs; "All-Seeing", Mid; "Third", Obs; "Second", Obs; "Endless", Obs; "Reviled", Obs; "Absolute", Obs; "Damned", Obs; "Cursed", Obs; "Blessed", Obs; "Lucid", Obs; "Unthinkable", Obs; "Nameless", Obs; "Unspeakable", Obs; "Glorious", Obs; "Cold", Obs; "Burning", Obs; "Shapeless", Shape; "Formless", Shape; "Unknowable", Obs; "Lifeless", Obs; "Fatal", Attrib; "Infernal", Origin; "Abyssal", Origin; "Celestial", Origin; "Implacable", Obs; "Dark", Color; "Resolute", Obs; "Resplendant", Color; "Unstoppable", Obs; "Blood-Soaked", Material; "Endless", Size; "Forgotten", Obs; "Iron", Material; "Bronze", Material; "Steel", Material; "Secret", Obs; "Hidden", Obs; "Fiery", Color; "Ancient", Age; "Silver", Material; "Silver", Color; "Screaming", Mid; "Mighty", Mid; "Thousand-Year", Qual; "Jewelled", Material; "Damnable", Mid; "Creeping", Mid; "All-Knowing", Mid; "All-Hearing", Mid; "Holy", Mid; "Global", Mid; "Leering", Mid; "Forty-Second", Obs; "Divine", Mid; "Faithful", Mid; "Ageless", Age; "Steadfast", Attrib; "Cruel", Attrib; "Sapphire", Material; "Sapphic", Origin; "Secluded", Mid; "Scarlet", Color; "Shrieking", Mid; "Hollow", Mid; "Mild", Mid; "Wondrous", Obs; |] let subjects = [| "Order"; "Cult"; "Temple"; "Church"; "Hand"; "Eyes"; "Source"; "Keepers"; "Maidens"; "Servants"; "Templars"; "Followers"; "Celebrants"; "Rite"; "Sect"; "Guild"; "Society"; "School"; "Gathering"; "Bearers"; "Guardians"; |] let definite_objects = [| "Prince"; "King"; "Master"; "Princess"; "Queen"; "Mistress"; "Devourer"; "Obliterator"; "Destroyer"; "Portal"; "Serpent"; "Moon"; "One"; "Two"; "Three"; "Four"; "Five"; "Six"; "Seven"; "Eight"; "Nine"; "Ten"; "Twelve"; "Eye"; "God"; "Horror"; "Thing"; "Flames"; "Night"; "Day"; "Year"; "Years"; "Way"; "Realm"; "Path"; "Light"; "Fire"; "Door"; "Gate"; "Plan"; "Terror"; "Staff"; "Window"; "Road"; "Spire"; "Beast"; "Flesh"; "Sword"; "Mountain"; "River";"Crown";"Scepter"; "Desecrator";"Defiler"; "Despoiler"; "Ravager"; "Rite"; "Sea"; "Ocean"; "Chaos"; "Goat"; "Legion"; "Pyramid"; "Dragon"; "Hand"; "Pantheon"; "Spirit"; "Devil"; "Gods"; "Rod"; "Glitch"; "Error"; "Perversion"; |] let zero_objects = [| "Doom"; "Death"; "Torment"; "Fires"; "Pain"; "Screams"; "Fear"; "Terror"; "Whispers"; "Failure"; "Perversion"; |] let pick (r : 'a array) : 'a = r.(Random.int(Array.length r)) let picks (r : ('b * ('a array)) list) : ('b * 'a) = let sum = List.fold_left (fun c (_,a) -> c + Array.length a) 0 r in let id = Random.int sum in let rec find i (l : (bool * ('a array)) list) = match l with (tag,a)::tl -> let sz = Array.length a in if sz > i then (tag, a.(i)) else find (i-sz) tl | _ -> assert false in find id r;; let adjp () = let flatten l = List.fold_left (fun a (s,_) -> a ^ " " ^ s) "" l in let rec pos adj (phr : adj list) = if (phr = []) then [adj] else if (order adj) > order (List.hd phr) then (List.hd phr) :: (pos adj (List.tl phr)) else adj :: (List.tl phr) in let rec loop phr ct = if ct = 0 then pos (pick adjs) phr else loop (pos (pick adjs) phr) (ct-1) in flatten (loop [] (Random.int 4));; let objp () = picks [(true, definite_objects); (false, zero_objects)] let sect () = let a = adjp() in let a' = adjp() in let def,o = objp() in match Random.int 7 with (* haaack *) | 0 -> "The " ^ (pick subjects) ^ " of the " ^ (let a,_ = pick adjs in a) | 1 -> "The " ^ (pick subjects) ^ " of " ^ (if def then "the " else "") ^ o | 2 -> "The" ^ a' ^ " " ^ (pick subjects) ^ " of " ^ (if def then "the " else "") ^ o | 3 -> "The" ^ a' ^ " " ^ (pick subjects) ^ " of the " ^ (let a,_ = pick adjs in a) | _ -> "The" ^ a' ^ " " ^ (pick subjects) ^ " of" ^ (if def then " the" else "") ^ a ^ " " ^ o let () = Random.self_init (); print_string (sect()) |
Added sextbot.ml version [96e435dd0f].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 |
type noun = R of string * string | V of string * string | M of string | Mv of string | Pn of string | Pnv of string let sn n = R(n, n^"s") let nouns = [| R("pussy", "pussies"); sn "cock"; R("penis", "penises"); sn "representative"; R("minority","minorities"); sn "dick"; sn "breast"; sn "mouth"; sn "face"; M "hair"; Pn "politics"; sn "soul"; sn "ear"; sn "nose"; sn "senator"; sn "kink"; sn "girl"; sn "boy"; R("city","cities"); R("titty","titties"); sn "vagina"; sn "bot"; sn "butt"; R("foot","feet"); R("moose","moose"); sn "daughter"; sn "cunt"; sn "Bolshevik"; sn "goat"; sn "tentacle"; sn "uncle"; sn "queen"; sn "peer"; R("party","parties"); R("cooch","cooches"); R("snooch","snooches"); sn "tit"; V("ass","asses"); sn "gender"; sn "cop"; M "police"; sn "loser"; sn "king"; sn "rifle"; sn "vibrator"; Pn "authorities"; R("box","boxes"); sn "orifice"; sn "count"; sn "baron"; R("countess","countesses"); R("baroness","baronesses"); R("thesis","theses"); M "praxis"; M "rope"; Pn "handcuffs"; sn "boob"; sn "critique"; sn "slave"; sn "buttslut"; sn "idea"; sn "revolver"; sn "corpse"; R("ideology","ideologies"); sn "beast"; sn "youth"; sn "tail"; sn "bulge"; sn "tty"; sn "dongle"; sn "shell"; sn "result"; sn "argument"; sn "guitar"; R("class","classes"); V("advance","advance"); sn "restraint"; sn "nipple"; sn "orb"; M "junk"; sn "array"; R("matrix","matrices"); sn "crack"; sn "fork"; R("mistress","mistresses"); V("assignment","assignments"); R("switch","switches"); sn "sin"; sn "creep"; sn "Pope"; sn "weeb"; sn "submission"; sn "strap"; sn "noun"; sn "verb"; R("cross","crosses"); sn "whip"; M "faith"; Pn "beliefs"; Pn "panties"; V("implement","implements"); sn "text"; sn "book"; sn "grimoire"; sn "twink"; sn "blog"; sn "scandal"; Pn "drugs"; Mv "evil"; M "good"; sn "moron"; sn "fuck"; sn "neck"; sn "cad"; sn "fucker"; sn "stalker"; R("beauty","beauties"); sn "jock"; sn "people"; sn "bro"; sn "president"; sn "nerd"; sn "rival"; sn "hacker"; sn "johnson"; V("illusion","illusions"); sn "hand"; R("ash","ashes"); M "love"; sn "father"; sn "mother"; R("boundary","boundaries"); sn "callout"; sn "appendage"; sn "callout post"; sn "death"; R("witch","witches"); sn "limb"; sn "loophole"; V("attack surface","attack surfaces"); sn "claw"; M "democracy"; sn "cannon"; R("woman","women"); M "shit"; Mv "artillery"; R("facility","facilities"); R("man","men"); sn "blog post"; R("knife","knives"); sn "moon"; M "truth"; R("fetish","fetishes"); R("tummy","tummies"); sn "bunker"; sn "pigeon"; V("orgasm", "orgasms"); sn "startup"; sn "throat"; sn "wizard"; sn "robe"; sn "spell"; sn "fanfic"; sn "rack"; sn "thumbscrew"; sn "ballot"; sn "campaign"; sn "gay"; sn "lesbian"; sn "mommyblog"; sn "widget"; sn "spine"; sn "hell"; sn "candidate"; sn "dog"; sn "pig"; R("Tory","Tories"); sn "prime minister"; V("outrage","outrages"); V("elf","elves"); R("dwarf","dwarves"); V("orc","orcs"); V("ork","orks"); M "discourse"; V("imbecile","imbeciles"); sn "monolith"; sn "scepter"; V("obelisk","obelisks"); sn "clit"; R("clitoris","clitorises"); M "porn"; sn "wound"; sn "relationship"; sn "probe"; sn "porn"; sn "secret"; R("lady","ladies"); V("anxiety","anxieties"); M "scum"; M "dirt"; M "trash"; R("witch","witches"); M "steam"; M "smoke"; R("senpai","senpai"); R("kohai","kohai"); M "vore"; R("sensei","sensei"); sn "meat"; R("staff","staves"); sn "rod"; M "terror"; V("anus","anuses"); R("church","churches"); sn "debate"; sn "console"; M "bondage"; M "discipline"; sn "catboy"; sn "catgirl"; sn "top"; sn "bottom"; sn "submissive"; sn "dom"; sn "domme"; sn "prole"; sn "car"; sn "hat"; sn "commander"; sn "general"; sn "sergeant"; sn "lieutenant"; sn "ensign"; sn "captain"; sn "admiral"; sn "doctor"; Pn "steel beams"; R("furry","furries"); V("insecurity","insecurities"); sn "limit"; sn "law"; sn "enchantment"; R("postmaster general","postmasters general"); R("wench","wenches"); sn "shame cube"; sn "government"; sn "laser"; M "blood"; M "sex"; sn "mace"; sn "flail"; sn "neg"; sn "dome"; V("atom","atoms"); sn "chest"; M "space"; sn "flaw"; sn "failure"; R("booty","booties"); sn "beaver"; sn "governor"; sn "nuke"; sn "nuclear missile"; sn "nuclear warhead"; V("ICBM","ICBMs"); V("electrode","electrodes"); Mv "abuse"; sn "machine"; sn "fucker"; R("boris","borises"); R("gary","garies"); sn "doom"; sn "pimp"; sn "shitpost"; Pnv "evils"; Pn "Crime Hole"; R ("[REDACTED]","[REDACTED]"); V ("[REDACTED]","[REDACTED]"); |] type word = A of string | An of string let adjs = [| A "gleaming"; A "bleeding"; A "stupid"; A "useless"; A "sexy"; A "tight"; A "wet"; A "hard"; A "kinky"; A "pervy"; A "Republican"; A "naughty"; A "filthy"; A "slutty"; A "revolutionary"; A"nuclear"; A "counterrevolutionary"; A "hopeless"; A "satanic"; A "sex"; A "nuclear sex"; A "lusty"; A "noble"; A "witty"; A "hot"; A "soft"; A "steamy"; A "Marxist"; A "horny"; A "slutty"; A "lustful"; A "lawful"; A "bold"; A "sophisticated"; A "winsome"; A "dumb"; A "bulging"; A "throbbing"; A "scrawny"; A "problematic"; A "duly appointed"; A "wondrous"; A "scandalous"; A "papal"; A "holy"; A "whimpering"; A "Bluetooth-enabled"; A "fuckable"; A "sentient"; A "Turing-complete"; A "redneck"; A "corrective"; A "lawless"; A "lunar"; A "solar"; A "luminous"; A "repressive"; A "sustainable"; A "wise"; A "wizardly"; A "sorcerous"; A "wizard"; A "magic"; A "presidential"; A "campaign"; A "gay"; A "lesbian"; A "regressive"; A "psychic"; A "sad"; A "happy"; A "humble"; A "Tory"; A "sinister"; A "sick"; A "twisted"; A "moderate"; A "horrific"; A "horrifying"; A "conservative"; A "sensible"; A "meaningless"; A "luscious"; A "lucrative"; A "terror"; A "secret"; A "snobby"; A "bratty"; A "mystical"; A "$300"; A "$700"; A "$1000"; A "100-carat"; A "cool"; A "rad"; A "radical"; A "terrorist"; A "firm"; A "dead"; A "decaying"; A "submissive"; A "dominant"; A "moist"; A "humiliating"; A "government sex"; A "government"; A "sext"; A "ballistic"; A "government sext"; A "glistening"; A "blood"; A "strategic"; A "laser"; A "government blood"; A "+1"; A "cursed"; A "space"; A "space sex"; A "monumental"; A "restrained"; A "helpless"; A "boring"; A "heterosexual"; A "monogamous"; A "hairy"; A "sin"; A "sinful"; A "tactical"; A "rectal"; A "fucking"; A "dread"; A "dread sex"; A "dread government"; A "pimp"; A "dread government sex"; A "doom"; A "government doom"; An "awful"; An "electronic"; An "electric"; An "ugly"; An "illegal"; An "unlawful"; An "arcane"; An "undulating"; An "appropriate"; An "inappropriate"; An "appropriative"; An "eminent"; An "ominous"; An "oppressive"; An "anal"; An "unsustainable"; An "outrageous"; An "insensitive"; An "elfin"; An "elvish"; An "elfin sex"; An "elvish sex"; An "esoteric"; An "exotic"; An "abusive"; An "austere"; An "embarrassing"; An "erotic"; An "imperial"; An "immaculate"; An "evil"; An "evil government"; An "evil sex"; An "evil elf"; An "evil gay"; |] let pick (r : 'a array) : 'a = r.(Random.int(Array.length r)) let coin () = if Random.int 2 = 0 then true else false let getform p noun = match noun with | Mv (n) | M(n) -> n | Pn (n) | Pnv(n) -> n | V(sg,pl) -> (if p then pl else sg) | R(sg,pl) -> (if p then pl else sg);; let stat noun = let plural = match noun with | Mv (_) | M(_) -> false | Pn (_) | Pnv(_) -> true | _ -> coin() in let form, vl = match noun with | V(sg,pl) -> if plural then pl,true else sg,true | R(sg,pl) -> if plural then pl,false else sg,false | Mv(n) -> n,true | M(n) -> n,false | Pn(n) -> n,true | Pnv(n) -> n,true in plural, form, vl;; let bnp force_sg : string * bool = let noun = pick nouns in let p, form, vl = stat noun in let plural = if force_sg then false else p in let dets = Array.append [| "my"; "your"; "the"; "some"; |] (if plural then [| "these"; "those"; |] else [| "this"; "that"; |]) in let adj = if coin () then None else Some (pick adjs) in (if Random.int 5 = 0 then if plural then form else match adj with | None -> if vl then "an "^form else "a "^form | Some(A(n)) -> "a "^n^" "^form | Some(An(n)) -> "an "^n^" "^form else (pick dets) ^( match adj with | None -> "" | Some(A(n)) | Some(An(n)) -> " "^n )^" "^form),plural;; type form = Bare | Sg | Ppl | Ing type verb = (form -> string option -> string) let actions' : verb array ref = ref [||] let np () = let base, number = bnp false in let n = match Random.int 30 with | 0 -> base ^ " of " ^ (let b,_ = bnp false in b) | 1 -> base ^ " of " ^ ((pick !actions') Ing (if coin() then None else Some ( getform true (pick nouns) ))) | 2 -> base ^ " of " ^ (match pick adjs with A(n) | An(n) -> n) ^ " " ^ ((pick !actions') Ing None) | 3 -> (let b,_ = bnp true in b) ^ "'s " ^ (getform (coin()) (pick nouns)) | _ -> base in (n,number);; let strn () = let n,_ = np() in n let svb (sg,pl,ing,ppl) : verb = (fun f obj -> let o = match obj with | None -> "" | Some x -> " "^x in (match f with | Bare -> sg | Sg -> pl | Ppl -> ppl | Ing -> ing)^o) let phrvb (sg,pl,ing,ppl) prep = (fun f obj -> let o = match obj with | None -> "" | Some x -> " "^x in (match f with | Bare -> sg | Sg -> pl | Ppl -> ppl | Ing -> ing)^o^" "^prep) let ppvb (sg,pl,ing,ppl) prep = (fun f obj -> let o = match obj with | None -> "" | Some x -> " "^x in (match f with | Bare -> sg | Sg -> pl | Ppl -> ppl | Ing -> ing)^o^" "^prep^" "^(strn())) let svt x = (x,x^"s",x^"ing",x^"ed") let svte x = (x^"e",x^"es",x^"ing",x^"ed") let evt x = (x,x^"es",x^"ing",x^"ed") let simple_verbs : verb array = [| svb (svt "yank"); svb (svte "delet"); svb (svt "compress"); svb (svt "fuck"); svb (svt "sext"); svb (svt "spank"); svb (svt "smack"); svb (svt "fork"); svb ("slap", "slaps", "slapping", "slapped"); svb (evt "publish"); svb (evt "punish"); svb (evt "kiss"); svb (svt "stay"); svb (svt "laser"); svb (svt "censor"); svb (svt "tweet"); svb ("vore","vores","voring","vored"); svb ("bite","bites","biting","bitten"); svb (evt "dox"); svb ("police", "polices", "policing", "policed"); svb (svt "inspect"); svb ("defile", "defiles", "defiling", "defiled"); svb ("@", "@s", "@'ing", "@'ed"); svb ("shoot","shoots","shooting","shot"); svb ("ship","ships","shipping","shipped"); svb ("stun","stuns","stunning","stunned"); svb (svte "mutilat"); svb (svte "criticiz"); svb ("debunk","debunks","debunking","debunked"); svb (svte "critiqu"); svb ("smite", "smites", "smiting", "smitten"); svb ("verify", "verifies", "verifying", "verified"); svb (svt "restrain"); svb ("inflect", "inflects", "inflecting", "inflected"); svb ("whip", "whips", "whipping", "whipped"); svb (svte "squeez"); svb (svt "pull"); svb (svt "flatten"); svb (svt "crush"); svb (svte "abus"); svb ("cut", "cuts", "cutting", "cut"); svb ("dispel", "dispels", "dispelling", "dispelled"); svb ("split", "splits", "splitting", "split"); svb (svte "throttl"); svb (svte "strangl"); svb (svt "slaughter"); svb (svte "grop"); svb (svte "vap"); svb (svt "sever"); svb (svt "stalk"); svb (svt "mock"); svb ("stab", "stabs", "stabbing", "stabbed"); svb (svt "snort"); svb ("ban", "bans", "banning", "banned"); svb ("oppress", "oppresses", "oppressing", "oppressed"); svb ("suppress", "suppresses", "suppressing", "suppressed"); svb ("depress", "depresses", "depressing", "depressed"); svb (svt "sadden"); svb (svte "curs"); svb (svte "vot"); svb (svt "disrupt"); svb (svte "humbl"); svb (svt "fucc"); svb (svt "69"); svb (svt "cuck"); svb ("snap", "snaps", "snapping", "snapped"); svb (svte "pleasur"); svb (svte "pleas"); svb (svt "cuff"); svb (svt "melt"); svb (svte "deprecat"); svb (svte "debat"); svb (svt "dick"); svb ("bleed", "bleeds", "bleeding", "bled"); svb (svt "finger"); svb (svt "exploit"); svb ("portscan", "portscans", "portscanning", "portscanned"); svb ("bully", "bullies", "bullying", "bullied"); svb (svt "enchant"); svb ("steal", "steals", "stealing", "stolen"); svb (svt "yiff"); phrvb (svt "yiff") "up"; svb (svt "duel"); svb (svt "repeal"); svb (svt "twist"); svb (svt "abolish"); svb (svte "punctur"); svb (svte "roboticiz"); svb ("wiretap", "wiretaps", "wiretapping", "wiretapped"); svb ("do", "does", "doing", "done"); svb (svt "dial"); svb (svte "enslav"); svb ("neg", "negs", "negging", "negged"); svb (svt "slander"); svb (svt "smear"); svb (svt "sex"); svb (svte "censur"); svb (svte "exoticiz"); svb (svte "romanticiz"); svb (svt "bombard"); svb (svte "seduc"); svb (svt "despoil"); svb (svt "destroy"); svb (svte "ravag"); svb (svt "ravish"); svb (svt "plunder"); svb ("[REDACTED]","[REDACTED]","[REDACTED]","[REDACTED]"); svb (svte "delud"); svb (svt "redact"); svb (svte "denigrat"); svb (svte "expung"); svb (svt "insert"); ppvb (svt "insert") "in"; svb (svt "lick"); svb (svt "defeat"); svb (svt "defend"); svb (svte "interrogat"); svb (svte "tortur"); svb (svt "shock"); svb (svte "scandaliz"); svb ("beat","beats","beating","beaten"); svb (svt "obey"); svb (svt "disobey"); svb (svt "doom"); svb (svt "pimp"); svb (svt "dissect"); svb (svt "transcend"); svb (svte "exorcis"); svb (svte "compil"); svb (svte "decompil"); |] let complex_verbs : verb array = [| svb ("laugh at","laughs at","laughing at","laughed at"); svb ("shoot at","shoots at","shooting at","shot at"); svb ("shout at","shouts at","shouting at","shouted at"); phrvb (svt "fuck") "up"; phrvb (evt "mess") "up"; phrvb ("hold","holds","holding","held") "down"; phrvb (evt "push") "down"; phrvb (svt "knock") "down"; phrvb ("tie","ties","tying","tied") "down"; phrvb ("tie","ties","tying","tied") "up"; ppvb ("tie","ties","tying","tied") "up with"; ppvb ("tie","ties","tying","tied") "to"; phrvb ("take","takes","taking","taken") "offline"; phrvb ("take","takes","taking","taken") "apart"; ppvb ("take","takes","taking","taken") "out of"; phrvb ("take","takes","taking","taken") "out"; ppvb ("take","takes","taking","taken") "out for"; phrvb ("beat","beats","beating","beaten") "up"; phrvb ("beat","beats","beating","beaten") "off"; ppvb ("beat","beats","beating","beaten") "up with"; ppvb (svte "shov") "onto"; ppvb (svte "shov") "off"; ppvb (svte "shov") "out of"; ppvb (svte "shov") "down"; ppvb (svt "smack") "in"; ppvb (svt "smack") "right in"; ppvb (svt "smack") "with"; ppvb ("slap", "slaps", "slapping", "slapped") "with"; ppvb ("slap", "slaps", "slapping", "slapped") "in"; ppvb ("slap", "slaps", "slapping", "slapped") "right in"; phrvb ("slap", "slaps", "slapping", "slapped") "silly"; phrvb ("slap", "slaps", "slapping", "slapped") "off"; ppvb (evt "punish") "with"; ppvb (evt "kiss") "on"; phrvb (svt "connect") "to the internet"; ppvb (svt "connect") "to"; ppvb (svt "disconnect") "from"; phrvb (svt "disconnect") "from the internet"; ppvb ("put","puts","putting","put") "in"; ppvb (svt "lock") "in"; phrvb ("shoot","shoots","shooting","shot") "down"; ppvb ("shoot","shoots","shooting","shot") "in"; phrvb ("set","sets","setting","set") "on fire"; phrvb ("set","sets","setting","set") "to 'stun'"; phrvb ("get","gets","getting","gotten") "all over"; ppvb ("get","gets","getting","gotten") "all over"; phrvb ("spill","spills","spilling","spilt") "all over"; ppvb ("spill","spills","spilling","spilt") "all over"; phrvb ("strap","straps","strapping","strapped") "down"; ppvb ("strap","straps","strapping","strapped") "to"; phrvb ("keep","keeps","keeping","kept") "out"; ppvb ("keep","keeps","keeping","kept") "in"; phrvb ("keep","keeps","keeping","kept") "down"; ppvb ("keep","keeps","keeping","kept") "out of"; svb ("beg for","begs for","begging for","begged for"); ppvb (svte "forc") "into"; ppvb ("ship","ships","shipping","shipped") "with"; svb ("submit", "submits", "submitting", "submitted"); svb ("submit to", "submits to", "submitting to", "submitted to"); svb ("conjugate", "conjugates", "conjugating", "conjugated"); svb ("decline", "declines", "declining", "declined"); ppvb ("inflict", "inflicts", "inflicting", "inflicted") "on"; ppvb (svt "restrain") "with"; ppvb ("whip", "whips", "whipping", "whipped") "with"; svb ("bind", "binds", "binding", "bound"); ppvb ("bind", "binds", "binding", "bound") "with"; ppvb ("bind", "binds", "binding", "bound") "to"; svb (svt "respect"); svb (svt "disrespect"); svb (svte "dictat"); ppvb (svte "dictat") "to"; svb ("control", "controls", "controlling", "controlled"); svb (svt "follow"); svb (svt "unfollow"); svb (svte "simulat"); svb (svte "stimulat"); svb (svte "relocat"); ppvb (svte "reloca") "to"; svb (svte "lik"); svb (svte "crav"); svb ("deny", "denies", "denying", "denied"); ppvb (svte "argu") "with"; svb ("argue with", "argues with", "arguing with", "argued with"); svb (svte "conjur"); phrvb (svte "conjur") "up"; svb ("conjure upon", "conjures upon", "conjuring upon", "conjured upon"); svb (svt "detect"); ppvb (svte "disabus") "of"; ppvb ("cut", "cuts", "cutting", "cut") "with"; ppvb ("cut", "cuts", "cutting", "cut") "up with"; phrvb ("cut", "cuts", "cutting", "cut") "up"; phrvb ("cut", "cuts", "cutting", "cut") "off"; svb (svte "disassembl"); svb (svt "clean"); phrvb ("tidy", "tidies", "tidying", "tidied") "up"; svb ("tidy", "tidies", "tidying", "tidied"); ppvb (svte "disassembl") "with"; phrvb (svt "mock") "online"; phrvb (svt "mock") "on the internet"; phrvb (svt "mock") "on Twitter"; phrvb (svt "call") "out"; phrvb (svt "call") "names"; svb ("sin with", "sins with", "sinning with", "sinned with"); phrvb (svt "call") "out"; svb ("jerk it to", "jerks it to", "jerking it to", "jerked it to"); svb ("get off on", "gets off on", "getting off on", "got off on"); phrvb (svt "exploit") "for sex"; svb (svte "eviscerat"); svb (svt "dismember"); svb (svte "dislocat"); svb (svte "decriminaliz"); svb (svte "legaliz"); svb (svte "disparag"); svb (svte "evolv"); svb ("evolve into", "evolves into", "evolving into", "evolved into"); svb ("devolve into", "devolves into", "devolving into", "devolved into"); svb (svte "appropriat"); svb (svte "downvot"); svb (svte "upvot"); svb (svte "standardiz"); svb ("commune with", "communes with", "communing with", "communed with"); svb (svt "devour"); svb (svte "demoniz"); phrvb (svte "vot") "into office"; phrvb (svte "vor") "into office"; svb ("vote for", "votes for", "voting for", "voted for"); svb ("spit on", "spits on", "spitting on", "spat on"); svb ("shit on", "shits on", "shitting on", "shat on"); svb ("sit on", "sits on", "sitting on", "sat on"); svb (svte "demoraliz"); svb ("whisper to", "whispers to", "whispering to", "whispered to"); svb (svt "discern"); svb (svt "disgust"); svb (svt "offend"); svb (svt "disdain"); svb (svt "resent"); svb ("lie to", "lies to", "lying to", "lied to"); ppvb ("rub", "rubs", "rubbing", "rubbed") "with"; ppvb ("rub", "rubs", "rubbing", "rubbed") "on"; ppvb ("rub", "rubs", "rubbing", "rubbed") "all over"; ppvb ("rub", "rubs", "rubbing", "rubbed") "down with"; phrvb ("rub", "rubs", "rubbing", "rubbed") "down"; ppvb ("grind", "grinds", "grinding", "ground") "on"; ppvb (svt "fill") "with"; svb (svt "fill"); phrvb ("snap", "snaps", "snapping", "snapped") "off"; svb ("bleed on", "bleeds on", "bleeding on", "bled on"); svb (svt "wound"); svb (svt "harm"); svb (svte "prob"); ppvb (svte "prob") "for"; svb (svte "automat"); svb ("watch", "watches", "watching", "watched"); svb (svt "monitor"); svb (svte "observ"); svb ("expel", "expels", "expelling", "expelled"); ppvb ("expel", "expels", "expelling", "expelled") "from"; svb ("throw", "throws", "throwing", "thrown"); phrvb ("throw", "throws", "throwing", "thrown") "out"; ppvb ("throw", "throws", "throwing", "thrown") "into"; svb ("sing about", "sings about", "singing about", "sung about"); svb ("sing for", "sings for", "singing for", "sung for"); svb ("sing with", "sings with", "singing with", "sung with"); svb (svt "deflect"); svb (svte "resembl"); svb (svte "consol"); svb ("write about", "writes about", "writing about", "written about"); svb (svt "honor"); ppvb (svt "honor") "with"; svb (svt "dishonor"); ppvb (svt "dishonor") "with"; svb ("extol the virtues of", "extols the virtues of", "extolling the virtues of", "extolled in virtue"); svb (svte "disciplin"); svb (svte "dominat"); svb ("top", "tops", "topping", "topped"); svb (svte "servic"); svb (svte "serv"); svb (svt "download"); svb (svt "upload"); svb (svt "hack"); svb (svte "friendzon"); svb (svte "vindicat"); svb (svte "shame cub"); svb (svte "sham"); svb ("fux", "fuxes", "fuxing", "fuxed"); phrvb (svt "duel") "to the death"; ppvb (svt "duel") "for"; ppvb (svt "duel") "to death for"; ppvb (svt "duel") "to the death for"; svb (svte "kinksham"); ppvb (svte "punctur") "with"; ppvb (svte "penetrat") "with"; svb (svt "enter"); phrvb (svt "dial") "up"; phrvb (svt "tweet") "up"; svb ("tweet at","tweets at","tweeting at","tweeted at"); svb (svte "placat"); |] let trverbs = Array.append simple_verbs complex_verbs;; actions' := simple_verbs let trvp (f : form) : string = if Random.int 15 != 0 then ((pick trverbs) f (Some (strn ()))) else ((pick simple_verbs) f (Some (strn ()))) ^ " to death" let vp (f : form) : string = ((pick trverbs) f None) let titles = [| "mistress"; "master"; "lady"; "lord"; "señora"; "mademoiselle"; "señor"; "monsieur"; "bro"; "daddy"; "mommy"; "slave"; "girl"; "boy"; "fucktoy"; "senator"; "fuckslave"; "manslave"; "slut"; "buttslut"; "uncle"; "buttslave"; "professor"; "princess"; "prince"; "father"; "sir"; "friar"; "president"; "dear"; "your holiness"; "your grace"; "your excellency"; "your worship"; "your honor"; "milady"; "milord"; "mister"; "missy"; "congressman"; "your eminence"; "your imperial majesty"; "your majesty"; "miss"; "babe"; "Mr. Chairman"; "Mr. President"; "Madam Secretary"; "Madam President"; "cuntslave"; "prime minister"; "minister"; "sire"; "senpai"; "kohai"; "sensei"; "commander"; "general"; "sergeant"; "lieutenant"; "ma'am"; "captain"; "admiral"; "doctor"; "ensign"; "madame"; "maîtresse"; "maître"; "cap'n"; "baby"; "babe"; "comrade"; "citizen"; |] let bareadj () = match pick adjs with A(a) | An(a) -> a;; let clause () = let n, pl = np () in n ^ " " ^ (trvp (if pl then Bare else Sg));; let (^^) s c = s ^ (String.make 1 c);; let capitalize_each s = let rec loop (i : int) (o : string) (sp : bool) = if i = (String.length s) then o else match s.[i] with | ' ' -> loop (i+1) (o^^' ') true | 'a'..'z' as c -> if sp then loop (i+1) (o^^(Char.uppercase_ascii c)) false else loop (i+1) (o^^c) false | _ as c -> loop (i+1) (o^^c) false in loop 0 "" true let spell () = let name = (pick trverbs) Bare (Some(match pick nouns with | R(sg,pl) | V(sg,pl) -> pick [|sg;pl|] | M(n) | Mv(n) | Pn(n) | Pnv(n) -> n)) in capitalize_each name let ivb f = pick [| (fun () -> (pick trverbs) f (Some "you")); (fun () -> (pick trverbs) f (Some "you")); (fun () -> (pick trverbs) f (Some "ye")); (fun () -> (pick trverbs) f (Some "myself")); (fun () -> (pick trverbs) f (Some "myself")); (fun () -> (pick trverbs) f (Some "meself")); (fun () -> (trvp f)); (fun () -> (trvp f)); |]();; let uvb f = pick [| (fun () -> (pick trverbs) f (Some "yourself")); (fun () -> (pick trverbs) f (Some "me")); (fun () -> (pick trverbs) f (Some "yourself")); (fun () -> (pick trverbs) f (Some "me")); (fun () -> (pick trverbs) f (Some "yeself")); (fun () -> (trvp f)); |]();; let rec tpls = [| (fun () -> clause()); (fun () -> "I like "^(strn())); (fun () -> "I'm "^(strn())); (fun () -> "I'm always "^(strn())); (fun () -> "I'm always a slut for "^(strn())); (fun () -> "I'm always "^(strn())^" for "^(strn())); (fun () -> "I'm always "^(bareadj())^" for "^(strn())); (fun () -> "I, um, I "^(ivb Bare)); (fun () -> "I, um, "^(ivb Bare)); (fun () -> "you, um, you "^(uvb Bare)); (fun () -> "you, um, "^(uvb Bare)); (fun () -> "I like to "^(ivb Bare)); (fun () -> "I like to, how you say, "^(ivb Bare)); (fun () -> "I'm gonna "^((pick simple_verbs) Bare (Some "you"))^" silly and call you \""^(pick titles)^"\""); (fun () -> "you "^((pick simple_verbs) Bare (Some "me"))^" silly and call me \""^(pick titles)^"\""); (fun () -> ((pick simple_verbs) Bare (Some "me"))^" silly and call me \""^(pick titles)^"\""); (fun () -> "you want to be "^((pick simple_verbs) Ppl None)^" silly and called \""^(pick titles)^"\""); (fun () -> "I want to "^(ivb Bare)); (fun () -> "let me "^(ivb Bare)); (fun () -> "I wanna "^(ivb Bare)); (fun () -> "I'm gonna "^(ivb Bare)); (fun () -> "I'm going to "^(ivb Bare)); (fun () -> "I need to "^(ivb Bare)); (fun () -> "I gotta "^(ivb Bare)); (fun () -> "you need to "^(uvb Bare)); (fun () -> "you need to be "^((pick trverbs) Ppl None)); (fun () -> "you gotta "^(uvb Bare)); (fun () -> "you must not "^(uvb Bare)); (fun () -> "you wouldn't "^(uvb Bare)); (fun () -> "don't make me "^(ivb Bare)); (fun () -> "I force you to "^(uvb Bare)); (fun () -> "you force me to "^(ivb Bare)); (fun () -> "I'm "^(bareadj ())); (fun () -> "I'm gonna make you "^(bareadj ())); (fun () -> "you're "^(bareadj ())); (fun () -> "this is "^(bareadj ())); (fun () -> "this is very "^(bareadj ())); (fun () -> "this is deeply "^(bareadj ())); (fun () -> "you have to "^(uvb Bare)^" if you want to be my "^(pick titles)); (fun () -> "I "^(ivb Bare)); (fun () -> "I cast "^(spell ())); (fun () -> "I need to cast "^(spell ())); (fun () -> "don't make me cast "^(spell ())); (fun () -> "I cast "^(spell ())^" on you"); (fun () -> "don't make me cast "^(spell ())^" on you"); (fun () -> "I cast "^(spell ())^" on myself"); (fun () -> "I need to cast "^(spell ())^" on myself"); (fun () -> "you cast "^(spell ())); (fun () -> "you need to cast "^(spell ())); (fun () -> "you cast "^(spell ())^" on me"); (fun () -> "you need to cast "^(spell ())^" on me"); (fun () -> "you cast "^(spell ())^" on yourself"); (fun () -> "you need to cast "^(spell ())^" on yourself"); (fun () -> "I'm "^(ivb Ing)); (fun () -> "I've "^(ivb Ppl)); (fun () -> "you've "^(uvb Ppl)); (fun () -> "you "^(uvb Bare)); (fun () -> "look me in the eye when I "^(pick trverbs) Bare (Some "you")); (fun () -> "keep your eyes on "^(strn())^" while I "^(ivb Bare)); (fun () -> "you must really want to be "^(vp Ppl)^(if coin() then "" else " by "^(strn()))); (fun () -> "you must really want me to "^(ivb Bare)); (fun () -> "you must really want "^(strn())^" to "^(trvp Bare)); (fun () -> "you're gonna get "^(vp Ppl)); (fun () -> (if coin() then "please " else "") ^ "put "^(strn())^" in "^(strn())^(if coin() then "" else ", and then "^(trvp Bare))); (fun () -> (trvp Bare)); (fun () -> "please " ^ (trvp Bare)); (fun () -> ((pick trverbs) Bare (Some "me")) ^ " and " ^ ((pick trverbs) Bare (Some "me"))); (fun () -> (pick tpls)() ^" so I can "^(ivb Bare)); (fun () -> (pick tpls)() ^" hard"); (fun () -> (pick tpls)() ^" harder"); (fun () -> (pick tpls)() ^", if that's alright"); (fun () -> (pick tpls)() ^", in the Biblical sense"); (fun () -> (pick tpls)() ^" - in the Biblical sense"); (fun () -> (pick tpls)() ^", if you don't mind"); (fun () -> (pick tpls)() ^", if you know what I mean"); (fun () -> "um, " ^ (pick tpls)()); (fun () -> "arrrr, " ^ (pick tpls)()); (fun () -> "yarrr, " ^ (pick tpls)()); (fun () -> "well, " ^ (pick tpls)()); (fun () -> "you know, " ^ (pick tpls)()); (fun () -> "haha, " ^ (pick tpls)()); |] let epithets = [| "lover"; "punk"; "slut"; "slave"; "fuck"; "fucker"; "toy"; "eater"; "snob"; "lord"; "-ass"; "boy"; "girl"; "bro"; "-man"; "man";|] let rec mtpls = [| (* haaaaack *) (fun () -> (pick tpls)()); (fun () -> (pick tpls)()); (fun () -> (pick tpls)()); (fun () -> (pick tpls)()^"~"); (fun () -> (pick tpls)()^"?"); (fun () -> (pick tpls)() ^", right?"); (fun () -> (pick tpls)() ^" - no homo"); (fun () -> (pick tpls)() ^" - no hetero"); (fun () -> (pick tpls)() ^", but no homo"); (fun () -> (pick tpls)() ^", yeah?"); (fun () -> (pick tpls)() ^", alright?"); (fun () -> "wanna "^(uvb Bare)^"?"); (fun () -> "wanna "^(uvb Bare)^", if you know what I mean?"); (fun () -> (pick tpls)() ^", "^(pick titles)); (fun () -> (pick tpls)() ^", "^(pick titles)^"~"); (fun () -> "hey "^(pick titles)^", "^(pick tpls)()); (fun () -> (pick tpls)() ^", "^(pick titles)^"-san"); (fun () -> (pick tpls)() ^", "^(pick titles)^"-kun"); (fun () -> (pick tpls)() ^", "^(pick titles)^"-sama"); (fun () -> (pick tpls)() ^", "^(pick titles)^"-chan"); (fun () -> (pick tpls)() ^", "^(pick titles)^"-tan"); (fun () -> (pick tpls)() ^", "^(pick titles)^"-senpai"); (fun () -> "please, "^(pick tpls)() ^", "^(pick titles)^"-san"); (fun () -> "please, "^(pick titles)^"-san, "^(pick tpls)()); (fun () -> (pick tpls)() ^", "^(match pick nouns with R(n,_) | V(n,_) | M(n) | Mv(n) | Pn(n) | Pnv(n) -> n)^"-san"); (* yeesh *) (fun () -> (pick tpls)() ^", you "^(match pick nouns with R(n,_) | V(n,_) | M(n) | Mv(n) | Pn(n) | Pnv(n) -> n)^(if coin() then "" else (pick epithets))); (* yeesh *) (fun () -> (pick tpls)() ^", you "^ (match pick adjs with A(a) | An(a) -> a)^" "^ (match pick nouns with R(n,_) | V(n,_) | M(n) | Mv(n) | Pn(n) | Pnv(n) -> n) ^(if coin() then "" else (pick epithets))); (* yeeeeeeeeeeesh *) |] let rec ntpls = [| (fun name -> (pick tpls)() ^", "^name); (fun name -> (pick tpls)() ^", "^name); (fun name -> (pick tpls)() ^", "^name); (fun name -> (pick tpls)() ^", "^name); (fun name -> (pick tpls)() ^", "^name); (fun name -> (pick tpls)() ^", "^name^"~"); (fun name -> (pick tpls)() ^", "^name^"~"); (fun name -> (pick tpls)() ^", "^name^" - no homo"); (fun name -> (pick tpls)() ^", "^name^" - no hetero"); (fun name -> "Hey "^name^", "^(pick tpls)()); (fun name -> "Hey "^name^", "^(pick tpls)()); (fun name -> "Hey "^name^", "^(pick tpls)()); (fun name -> "Hey "^name^", "^(pick tpls)()); (fun name -> "Hey "^name^", "^(pick tpls)()^"~"); (fun name -> "Hey "^name^", "^(pick tpls)()^" - no homo"); (fun name -> "Hey "^name^", "^(pick tpls)()^" - no hetero"); (fun name -> "Hey "^name^", "^(trvp Bare)); (fun name -> "Hey "^name^", "^(trvp Bare)); (fun name -> "Hey "^name^", "^(trvp Bare)); (fun name -> "Hey "^name^", "^(trvp Bare)); (fun name -> "Hey "^name^", "^(trvp Bare)^"~"); (fun name -> "Hey "^name^", "^(trvp Bare)^" - no homo"); (fun name -> "Hey "^name^", "^(trvp Bare)^" - no hetero"); |] let () = Random.self_init (); if (Array.length Sys.argv = 1) || (Sys.argv.(1) = "") then print_string (String.capitalize_ascii ((pick mtpls)())) else print_string (String.capitalize_ascii ((pick ntpls) (String.trim Sys.argv.(1)))); print_string "\n"; |
Added threat.ml version [dc6a67ba01].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
let range min max = min+(Random.int (max-min)) let pick ar = ar.(range 0 (Array.length ar)) let rule (items : string list Lazy.t array) = let syntax = Lazy.force(pick items) in List.fold_left (^) "" syntax let choice ar = Lazy.force(pick ar) type person = { nom : string; gen : string; acc : string; } let victims = [| {nom="you";gen="your";acc="you"}; |] let insults = [| "bitch"; "cunt"; "freak"; "douchebag"; "bastard"; |] let action victim = rule [| lazy ["port "; victim.acc; " to lisp"]; lazy ["rain on "; victim.gen; " parade"]; |] let intros () = let vocative () = match range 0 3 in | 0 -> "you" | 1 -> pick insults | 2 -> "you, " ^ (pick insults) in rule [| lazy ["listen up, "; vocative (); "! |] let threat () = (intros()) ^ " " ^ (action (pick victims)) let () = Random.self_init(); print_string (threat ()) |
Added threat.scm version [c3beb2da63].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
(include "bot.scm") (define actors '#(me you thou they him her myself "your mother" "your mom" "your father" "your dad" "your aunt" "your uncle" "your dog")) (define pronouns '( (you (nom . "you") (acc . "you") (gen . "your") (poss . "yours") ) (thou (nom . "thou") (acc . "thee") (gen . "thy") (poss . "thine") ) (they (nom . "they") (acc . "them") (gen . "their") (poss . "theirs") ) (him (nom . "he") (acc . "him") (gen . "his") (poss . "his") ) (her (nom . "her") (acc . "her") (gen . "hers") (poss . "hers") ) (me (nom . "I") (acc . "me") (gen . "my") (poss . "mine") ) (myself (nom . "I") (acc . "myself") (gen . "my own") (poss . "my own")))) (define (conjugate v t n) (if (eq? v 'cop) (case (cons t n) (define (inflect c n) (if (string? n) (case c ((nom acc) n) ((gen poss cop) (string-append n "'s"))) ; else (cdr (assq c (cdr (assq n pronouns)))))) (rule (action victim) ("port " victim " to lisp") ("rain on " victim "'s parade")) (rule (subject actor) ((inflect 'cop actor) " gonna") ((inflect 'nom actor) " swear")) (print (inflect (pick '#(nom acc gen poss)) (pick actors))) ;(print (action "you")) |