├── .gitignore ├── LICENSE ├── README.md ├── doc ├── intro.md └── outline.md ├── project.clj ├── resources ├── US.dic └── sgb-words.txt ├── src └── automata │ ├── crossword_puzzle.clj │ ├── crossword_puzzle_5x5.clj │ ├── extra.clj │ ├── nurse_scheduling.clj │ └── viz.clj └── test └── automata └── core_test.clj /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /classes 3 | /checkouts 4 | pom.xml 5 | pom.xml.asc 6 | *.jar 7 | *.class 8 | /.lein-* 9 | /.nrepl-port 10 | .hgignore 11 | .hg/ 12 | *~ -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC 2 | LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM 3 | CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. 4 | 5 | 1. DEFINITIONS 6 | 7 | "Contribution" means: 8 | 9 | a) in the case of the initial Contributor, the initial code and 10 | documentation distributed under this Agreement, and 11 | 12 | b) in the case of each subsequent Contributor: 13 | 14 | i) changes to the Program, and 15 | 16 | ii) additions to the Program; 17 | 18 | where such changes and/or additions to the Program originate from and are 19 | distributed by that particular Contributor. A Contribution 'originates' from 20 | a Contributor if it was added to the Program by such Contributor itself or 21 | anyone acting on such Contributor's behalf. Contributions do not include 22 | additions to the Program which: (i) are separate modules of software 23 | distributed in conjunction with the Program under their own license 24 | agreement, and (ii) are not derivative works of the Program. 25 | 26 | "Contributor" means any person or entity that distributes the Program. 27 | 28 | "Licensed Patents" mean patent claims licensable by a Contributor which are 29 | necessarily infringed by the use or sale of its Contribution alone or when 30 | combined with the Program. 31 | 32 | "Program" means the Contributions distributed in accordance with this 33 | Agreement. 34 | 35 | "Recipient" means anyone who receives the Program under this Agreement, 36 | including all Contributors. 37 | 38 | 2. GRANT OF RIGHTS 39 | 40 | a) Subject to the terms of this Agreement, each Contributor hereby grants 41 | Recipient a non-exclusive, worldwide, royalty-free copyright license to 42 | reproduce, prepare derivative works of, publicly display, publicly perform, 43 | distribute and sublicense the Contribution of such Contributor, if any, and 44 | such derivative works, in source code and object code form. 45 | 46 | b) Subject to the terms of this Agreement, each Contributor hereby grants 47 | Recipient a non-exclusive, worldwide, royalty-free patent license under 48 | Licensed Patents to make, use, sell, offer to sell, import and otherwise 49 | transfer the Contribution of such Contributor, if any, in source code and 50 | object code form. This patent license shall apply to the combination of the 51 | Contribution and the Program if, at the time the Contribution is added by the 52 | Contributor, such addition of the Contribution causes such combination to be 53 | covered by the Licensed Patents. The patent license shall not apply to any 54 | other combinations which include the Contribution. No hardware per se is 55 | licensed hereunder. 56 | 57 | c) Recipient understands that although each Contributor grants the licenses 58 | to its Contributions set forth herein, no assurances are provided by any 59 | Contributor that the Program does not infringe the patent or other 60 | intellectual property rights of any other entity. Each Contributor disclaims 61 | any liability to Recipient for claims brought by any other entity based on 62 | infringement of intellectual property rights or otherwise. As a condition to 63 | exercising the rights and licenses granted hereunder, each Recipient hereby 64 | assumes sole responsibility to secure any other intellectual property rights 65 | needed, if any. For example, if a third party patent license is required to 66 | allow Recipient to distribute the Program, it is Recipient's responsibility 67 | to acquire that license before distributing the Program. 68 | 69 | d) Each Contributor represents that to its knowledge it has sufficient 70 | copyright rights in its Contribution, if any, to grant the copyright license 71 | set forth in this Agreement. 72 | 73 | 3. REQUIREMENTS 74 | 75 | A Contributor may choose to distribute the Program in object code form under 76 | its own license agreement, provided that: 77 | 78 | a) it complies with the terms and conditions of this Agreement; and 79 | 80 | b) its license agreement: 81 | 82 | i) effectively disclaims on behalf of all Contributors all warranties and 83 | conditions, express and implied, including warranties or conditions of title 84 | and non-infringement, and implied warranties or conditions of merchantability 85 | and fitness for a particular purpose; 86 | 87 | ii) effectively excludes on behalf of all Contributors all liability for 88 | damages, including direct, indirect, special, incidental and consequential 89 | damages, such as lost profits; 90 | 91 | iii) states that any provisions which differ from this Agreement are offered 92 | by that Contributor alone and not by any other party; and 93 | 94 | iv) states that source code for the Program is available from such 95 | Contributor, and informs licensees how to obtain it in a reasonable manner on 96 | or through a medium customarily used for software exchange. 97 | 98 | When the Program is made available in source code form: 99 | 100 | a) it must be made available under this Agreement; and 101 | 102 | b) a copy of this Agreement must be included with each copy of the Program. 103 | 104 | Contributors may not remove or alter any copyright notices contained within 105 | the Program. 106 | 107 | Each Contributor must identify itself as the originator of its Contribution, 108 | if any, in a manner that reasonably allows subsequent Recipients to identify 109 | the originator of the Contribution. 110 | 111 | 4. COMMERCIAL DISTRIBUTION 112 | 113 | Commercial distributors of software may accept certain responsibilities with 114 | respect to end users, business partners and the like. While this license is 115 | intended to facilitate the commercial use of the Program, the Contributor who 116 | includes the Program in a commercial product offering should do so in a 117 | manner which does not create potential liability for other Contributors. 118 | Therefore, if a Contributor includes the Program in a commercial product 119 | offering, such Contributor ("Commercial Contributor") hereby agrees to defend 120 | and indemnify every other Contributor ("Indemnified Contributor") against any 121 | losses, damages and costs (collectively "Losses") arising from claims, 122 | lawsuits and other legal actions brought by a third party against the 123 | Indemnified Contributor to the extent caused by the acts or omissions of such 124 | Commercial Contributor in connection with its distribution of the Program in 125 | a commercial product offering. The obligations in this section do not apply 126 | to any claims or Losses relating to any actual or alleged intellectual 127 | property infringement. In order to qualify, an Indemnified Contributor must: 128 | a) promptly notify the Commercial Contributor in writing of such claim, and 129 | b) allow the Commercial Contributor tocontrol, and cooperate with the 130 | Commercial Contributor in, the defense and any related settlement 131 | negotiations. The Indemnified Contributor may participate in any such claim 132 | at its own expense. 133 | 134 | For example, a Contributor might include the Program in a commercial product 135 | offering, Product X. That Contributor is then a Commercial Contributor. If 136 | that Commercial Contributor then makes performance claims, or offers 137 | warranties related to Product X, those performance claims and warranties are 138 | such Commercial Contributor's responsibility alone. Under this section, the 139 | Commercial Contributor would have to defend claims against the other 140 | Contributors related to those performance claims and warranties, and if a 141 | court requires any other Contributor to pay any damages as a result, the 142 | Commercial Contributor must pay those damages. 143 | 144 | 5. NO WARRANTY 145 | 146 | EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON 147 | AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER 148 | EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR 149 | CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A 150 | PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the 151 | appropriateness of using and distributing the Program and assumes all risks 152 | associated with its exercise of rights under this Agreement , including but 153 | not limited to the risks and costs of program errors, compliance with 154 | applicable laws, damage to or loss of data, programs or equipment, and 155 | unavailability or interruption of operations. 156 | 157 | 6. DISCLAIMER OF LIABILITY 158 | 159 | EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY 160 | CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, 161 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION 162 | LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 163 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 164 | ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE 165 | EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY 166 | OF SUCH DAMAGES. 167 | 168 | 7. GENERAL 169 | 170 | If any provision of this Agreement is invalid or unenforceable under 171 | applicable law, it shall not affect the validity or enforceability of the 172 | remainder of the terms of this Agreement, and without further action by the 173 | parties hereto, such provision shall be reformed to the minimum extent 174 | necessary to make such provision valid and enforceable. 175 | 176 | If Recipient institutes patent litigation against any entity (including a 177 | cross-claim or counterclaim in a lawsuit) alleging that the Program itself 178 | (excluding combinations of the Program with other software or hardware) 179 | infringes such Recipient's patent(s), then such Recipient's rights granted 180 | under Section 2(b) shall terminate as of the date such litigation is filed. 181 | 182 | All Recipient's rights under this Agreement shall terminate if it fails to 183 | comply with any of the material terms or conditions of this Agreement and 184 | does not cure such failure in a reasonable period of time after becoming 185 | aware of such noncompliance. If all Recipient's rights under this Agreement 186 | terminate, Recipient agrees to cease use and distribution of the Program as 187 | soon as reasonably practicable. However, Recipient's obligations under this 188 | Agreement and any licenses granted by Recipient relating to the Program shall 189 | continue and survive. 190 | 191 | Everyone is permitted to copy and distribute copies of this Agreement, but in 192 | order to avoid inconsistency the Agreement is copyrighted and may only be 193 | modified in the following manner. The Agreement Steward reserves the right to 194 | publish new versions (including revisions) of this Agreement from time to 195 | time. No one other than the Agreement Steward has the right to modify this 196 | Agreement. The Eclipse Foundation is the initial Agreement Steward. The 197 | Eclipse Foundation may assign the responsibility to serve as the Agreement 198 | Steward to a suitable separate entity. Each new version of the Agreement will 199 | be given a distinguishing version number. The Program (including 200 | Contributions) may always be distributed subject to the version of the 201 | Agreement under which it was received. In addition, after a new version of 202 | the Agreement is published, Contributor may elect to distribute the Program 203 | (including its Contributions) under the new version. Except as expressly 204 | stated in Sections 2(a) and 2(b) above, Recipient receives no rights or 205 | licenses to the intellectual property of any Contributor under this 206 | Agreement, whether expressly, by implication, estoppel or otherwise. All 207 | rights in the Program not expressly granted under this Agreement are 208 | reserved. 209 | 210 | This Agreement is governed by the laws of the State of New York and the 211 | intellectual property laws of the United States of America. No party to this 212 | Agreement will bring a legal action under this Agreement more than one year 213 | after the cause of action arose. Each party waives its rights to a jury trial 214 | in any resulting litigation. 215 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Solving Problems With Automata, Part 2 2 | 3 | - Nurse Scheduling problem: `src/automata/nurse_scheduling.clj` 4 | - Crossword Puzzle (simplified): `src/automata/crossword_puzzle_5x5.clj` 5 | - Crossword Puzzle (full grid): `src/automata/crossword_puzzle.clj` 6 | -------------------------------------------------------------------------------- /doc/intro.md: -------------------------------------------------------------------------------- 1 | # Introduction to automata 2 | 3 | TODO: write [great documentation](http://jacobian.org/writing/what-to-write/) 4 | -------------------------------------------------------------------------------- /doc/outline.md: -------------------------------------------------------------------------------- 1 | # Solving Problems with Automata part 2 2 | 3 | ## Slides 4 | 5 | - Summary (0:30) 6 | 7 | - Intro to CP (2:00) 8 | - Math notation + Brute-force Clojure implementation 9 | - Math notation + Loco notation 10 | - Loco notation + REPL 11 | - Subscripted variables 12 | 13 | - Propagators (3:00) 14 | 15 | - More constraints (0:30) (TODO!!!) 16 | 17 | ## Code 18 | 19 | - Intro to regular constraint (1:00) 20 | 21 | - Nurse scheduling (3:00) 22 | 23 | - Crossword puzzle (3:00) 24 | 25 | ## Last slide 26 | 27 | - Big ideas (1:00) 28 | 29 | ## Questions -------------------------------------------------------------------------------- /project.clj: -------------------------------------------------------------------------------- 1 | (defproject automata "0.1.0-SNAPSHOT" 2 | :description "FIXME: write description" 3 | :url "http://example.com/FIXME" 4 | :license {:name "Eclipse Public License" 5 | :url "http://www.eclipse.org/legal/epl-v10.html"} 6 | :dependencies [[org.clojure/clojure "1.7.0"] 7 | [loco "0.3.1-SNAPSHOT"] 8 | [rhizome "0.2.5"]] 9 | :jvm-opts ^:replace ["-server" "-Xmx4g"] 10 | :plugins [[refactor-nrepl "1.1.0"] 11 | [cider/cider-nrepl "0.9.1"]]) 12 | -------------------------------------------------------------------------------- /resources/US.dic: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aengelberg/automata/b1add9f455b2b7e30c6cfff2afd9721f07904c68/resources/US.dic -------------------------------------------------------------------------------- /resources/sgb-words.txt: -------------------------------------------------------------------------------- 1 | which 2 | there 3 | their 4 | about 5 | would 6 | these 7 | other 8 | words 9 | could 10 | write 11 | first 12 | water 13 | after 14 | where 15 | right 16 | think 17 | three 18 | years 19 | place 20 | sound 21 | great 22 | again 23 | still 24 | every 25 | small 26 | found 27 | those 28 | never 29 | under 30 | might 31 | while 32 | house 33 | world 34 | below 35 | asked 36 | going 37 | large 38 | until 39 | along 40 | shall 41 | being 42 | often 43 | earth 44 | began 45 | since 46 | study 47 | night 48 | light 49 | above 50 | paper 51 | parts 52 | young 53 | story 54 | point 55 | times 56 | heard 57 | whole 58 | white 59 | given 60 | means 61 | music 62 | miles 63 | thing 64 | today 65 | later 66 | using 67 | money 68 | lines 69 | order 70 | group 71 | among 72 | learn 73 | known 74 | space 75 | table 76 | early 77 | trees 78 | short 79 | hands 80 | state 81 | black 82 | shown 83 | stood 84 | front 85 | voice 86 | kinds 87 | makes 88 | comes 89 | close 90 | power 91 | lived 92 | vowel 93 | taken 94 | built 95 | heart 96 | ready 97 | quite 98 | class 99 | bring 100 | round 101 | horse 102 | shows 103 | piece 104 | green 105 | stand 106 | birds 107 | start 108 | river 109 | tried 110 | least 111 | field 112 | whose 113 | girls 114 | leave 115 | added 116 | color 117 | third 118 | hours 119 | moved 120 | plant 121 | doing 122 | names 123 | forms 124 | heavy 125 | ideas 126 | cried 127 | check 128 | floor 129 | begin 130 | woman 131 | alone 132 | plane 133 | spell 134 | watch 135 | carry 136 | wrote 137 | clear 138 | named 139 | books 140 | child 141 | glass 142 | human 143 | takes 144 | party 145 | build 146 | seems 147 | blood 148 | sides 149 | seven 150 | mouth 151 | solve 152 | north 153 | value 154 | death 155 | maybe 156 | happy 157 | tells 158 | gives 159 | looks 160 | shape 161 | lives 162 | steps 163 | areas 164 | sense 165 | speak 166 | force 167 | ocean 168 | speed 169 | women 170 | metal 171 | south 172 | grass 173 | scale 174 | cells 175 | lower 176 | sleep 177 | wrong 178 | pages 179 | ships 180 | needs 181 | rocks 182 | eight 183 | major 184 | level 185 | total 186 | ahead 187 | reach 188 | stars 189 | store 190 | sight 191 | terms 192 | catch 193 | works 194 | board 195 | cover 196 | songs 197 | equal 198 | stone 199 | waves 200 | guess 201 | dance 202 | spoke 203 | break 204 | cause 205 | radio 206 | weeks 207 | lands 208 | basic 209 | liked 210 | trade 211 | fresh 212 | final 213 | fight 214 | meant 215 | drive 216 | spent 217 | local 218 | waxes 219 | knows 220 | train 221 | bread 222 | homes 223 | teeth 224 | coast 225 | thick 226 | brown 227 | clean 228 | quiet 229 | sugar 230 | facts 231 | steel 232 | forth 233 | rules 234 | notes 235 | units 236 | peace 237 | month 238 | verbs 239 | seeds 240 | helps 241 | sharp 242 | visit 243 | woods 244 | chief 245 | walls 246 | cross 247 | wings 248 | grown 249 | cases 250 | foods 251 | crops 252 | fruit 253 | stick 254 | wants 255 | stage 256 | sheep 257 | nouns 258 | plain 259 | drink 260 | bones 261 | apart 262 | turns 263 | moves 264 | touch 265 | angle 266 | based 267 | range 268 | marks 269 | tired 270 | older 271 | farms 272 | spend 273 | shoes 274 | goods 275 | chair 276 | twice 277 | cents 278 | empty 279 | alike 280 | style 281 | broke 282 | pairs 283 | count 284 | enjoy 285 | score 286 | shore 287 | roots 288 | paint 289 | heads 290 | shook 291 | serve 292 | angry 293 | crowd 294 | wheel 295 | quick 296 | dress 297 | share 298 | alive 299 | noise 300 | solid 301 | cloth 302 | signs 303 | hills 304 | types 305 | drawn 306 | worth 307 | truck 308 | piano 309 | upper 310 | loved 311 | usual 312 | faces 313 | drove 314 | cabin 315 | boats 316 | towns 317 | proud 318 | court 319 | model 320 | prime 321 | fifty 322 | plans 323 | yards 324 | prove 325 | tools 326 | price 327 | sheet 328 | smell 329 | boxes 330 | raise 331 | match 332 | truth 333 | roads 334 | threw 335 | enemy 336 | lunch 337 | chart 338 | scene 339 | graph 340 | doubt 341 | guide 342 | winds 343 | block 344 | grain 345 | smoke 346 | mixed 347 | games 348 | wagon 349 | sweet 350 | topic 351 | extra 352 | plate 353 | title 354 | knife 355 | fence 356 | falls 357 | cloud 358 | wheat 359 | plays 360 | enter 361 | broad 362 | steam 363 | atoms 364 | press 365 | lying 366 | basis 367 | clock 368 | taste 369 | grows 370 | thank 371 | storm 372 | agree 373 | brain 374 | track 375 | smile 376 | funny 377 | beach 378 | stock 379 | hurry 380 | saved 381 | sorry 382 | giant 383 | trail 384 | offer 385 | ought 386 | rough 387 | daily 388 | avoid 389 | keeps 390 | throw 391 | allow 392 | cream 393 | laugh 394 | edges 395 | teach 396 | frame 397 | bells 398 | dream 399 | magic 400 | occur 401 | ended 402 | chord 403 | false 404 | skill 405 | holes 406 | dozen 407 | brave 408 | apple 409 | climb 410 | outer 411 | pitch 412 | ruler 413 | holds 414 | fixed 415 | costs 416 | calls 417 | blank 418 | staff 419 | labor 420 | eaten 421 | youth 422 | tones 423 | honor 424 | globe 425 | gases 426 | doors 427 | poles 428 | loose 429 | apply 430 | tears 431 | exact 432 | brush 433 | chest 434 | layer 435 | whale 436 | minor 437 | faith 438 | tests 439 | judge 440 | items 441 | worry 442 | waste 443 | hoped 444 | strip 445 | begun 446 | aside 447 | lakes 448 | bound 449 | depth 450 | candy 451 | event 452 | worse 453 | aware 454 | shell 455 | rooms 456 | ranch 457 | image 458 | snake 459 | aloud 460 | dried 461 | likes 462 | motor 463 | pound 464 | knees 465 | refer 466 | fully 467 | chain 468 | shirt 469 | flour 470 | drops 471 | spite 472 | orbit 473 | banks 474 | shoot 475 | curve 476 | tribe 477 | tight 478 | blind 479 | slept 480 | shade 481 | claim 482 | flies 483 | theme 484 | queen 485 | fifth 486 | union 487 | hence 488 | straw 489 | entry 490 | issue 491 | birth 492 | feels 493 | anger 494 | brief 495 | rhyme 496 | glory 497 | guard 498 | flows 499 | flesh 500 | owned 501 | trick 502 | yours 503 | sizes 504 | noted 505 | width 506 | burst 507 | route 508 | lungs 509 | uncle 510 | bears 511 | royal 512 | kings 513 | forty 514 | trial 515 | cards 516 | brass 517 | opera 518 | chose 519 | owner 520 | vapor 521 | beats 522 | mouse 523 | tough 524 | wires 525 | meter 526 | tower 527 | finds 528 | inner 529 | stuck 530 | arrow 531 | poems 532 | label 533 | swing 534 | solar 535 | truly 536 | tense 537 | beans 538 | split 539 | rises 540 | weigh 541 | hotel 542 | stems 543 | pride 544 | swung 545 | grade 546 | digit 547 | badly 548 | boots 549 | pilot 550 | sales 551 | swept 552 | lucky 553 | prize 554 | stove 555 | tubes 556 | acres 557 | wound 558 | steep 559 | slide 560 | trunk 561 | error 562 | porch 563 | slave 564 | exist 565 | faced 566 | mines 567 | marry 568 | juice 569 | raced 570 | waved 571 | goose 572 | trust 573 | fewer 574 | favor 575 | mills 576 | views 577 | joint 578 | eager 579 | spots 580 | blend 581 | rings 582 | adult 583 | index 584 | nails 585 | horns 586 | balls 587 | flame 588 | rates 589 | drill 590 | trace 591 | skins 592 | waxed 593 | seats 594 | stuff 595 | ratio 596 | minds 597 | dirty 598 | silly 599 | coins 600 | hello 601 | trips 602 | leads 603 | rifle 604 | hopes 605 | bases 606 | shine 607 | bench 608 | moral 609 | fires 610 | meals 611 | shake 612 | shops 613 | cycle 614 | movie 615 | slope 616 | canoe 617 | teams 618 | folks 619 | fired 620 | bands 621 | thumb 622 | shout 623 | canal 624 | habit 625 | reply 626 | ruled 627 | fever 628 | crust 629 | shelf 630 | walks 631 | midst 632 | crack 633 | print 634 | tales 635 | coach 636 | stiff 637 | flood 638 | verse 639 | awake 640 | rocky 641 | march 642 | fault 643 | swift 644 | faint 645 | civil 646 | ghost 647 | feast 648 | blade 649 | limit 650 | germs 651 | reads 652 | ducks 653 | dairy 654 | worst 655 | gifts 656 | lists 657 | stops 658 | rapid 659 | brick 660 | claws 661 | beads 662 | beast 663 | skirt 664 | cakes 665 | lions 666 | frogs 667 | tries 668 | nerve 669 | grand 670 | armed 671 | treat 672 | honey 673 | moist 674 | legal 675 | penny 676 | crown 677 | shock 678 | taxes 679 | sixty 680 | altar 681 | pulls 682 | sport 683 | drums 684 | talks 685 | dying 686 | dates 687 | drank 688 | blows 689 | lever 690 | wages 691 | proof 692 | drugs 693 | tanks 694 | sings 695 | tails 696 | pause 697 | herds 698 | arose 699 | hated 700 | clues 701 | novel 702 | shame 703 | burnt 704 | races 705 | flash 706 | weary 707 | heels 708 | token 709 | coats 710 | spare 711 | shiny 712 | alarm 713 | dimes 714 | sixth 715 | clerk 716 | mercy 717 | sunny 718 | guest 719 | float 720 | shone 721 | pipes 722 | worms 723 | bills 724 | sweat 725 | suits 726 | smart 727 | upset 728 | rains 729 | sandy 730 | rainy 731 | parks 732 | sadly 733 | fancy 734 | rider 735 | unity 736 | bunch 737 | rolls 738 | crash 739 | craft 740 | newly 741 | gates 742 | hatch 743 | paths 744 | funds 745 | wider 746 | grace 747 | grave 748 | tides 749 | admit 750 | shift 751 | sails 752 | pupil 753 | tiger 754 | angel 755 | cruel 756 | agent 757 | drama 758 | urged 759 | patch 760 | nests 761 | vital 762 | sword 763 | blame 764 | weeds 765 | screw 766 | vocal 767 | bacon 768 | chalk 769 | cargo 770 | crazy 771 | acted 772 | goats 773 | arise 774 | witch 775 | loves 776 | queer 777 | dwell 778 | backs 779 | ropes 780 | shots 781 | merry 782 | phone 783 | cheek 784 | peaks 785 | ideal 786 | beard 787 | eagle 788 | creek 789 | cries 790 | ashes 791 | stall 792 | yield 793 | mayor 794 | opens 795 | input 796 | fleet 797 | tooth 798 | cubic 799 | wives 800 | burns 801 | poets 802 | apron 803 | spear 804 | organ 805 | cliff 806 | stamp 807 | paste 808 | rural 809 | baked 810 | chase 811 | slice 812 | slant 813 | knock 814 | noisy 815 | sorts 816 | stays 817 | wiped 818 | blown 819 | piled 820 | clubs 821 | cheer 822 | widow 823 | twist 824 | tenth 825 | hides 826 | comma 827 | sweep 828 | spoon 829 | stern 830 | crept 831 | maple 832 | deeds 833 | rides 834 | muddy 835 | crime 836 | jelly 837 | ridge 838 | drift 839 | dusty 840 | devil 841 | tempo 842 | humor 843 | sends 844 | steal 845 | tents 846 | waist 847 | roses 848 | reign 849 | noble 850 | cheap 851 | dense 852 | linen 853 | geese 854 | woven 855 | posts 856 | hired 857 | wrath 858 | salad 859 | bowed 860 | tires 861 | shark 862 | belts 863 | grasp 864 | blast 865 | polar 866 | fungi 867 | tends 868 | pearl 869 | loads 870 | jokes 871 | veins 872 | frost 873 | hears 874 | loses 875 | hosts 876 | diver 877 | phase 878 | toads 879 | alert 880 | tasks 881 | seams 882 | coral 883 | focus 884 | naked 885 | puppy 886 | jumps 887 | spoil 888 | quart 889 | macro 890 | fears 891 | flung 892 | spark 893 | vivid 894 | brook 895 | steer 896 | spray 897 | decay 898 | ports 899 | socks 900 | urban 901 | goals 902 | grant 903 | minus 904 | films 905 | tunes 906 | shaft 907 | firms 908 | skies 909 | bride 910 | wreck 911 | flock 912 | stare 913 | hobby 914 | bonds 915 | dared 916 | faded 917 | thief 918 | crude 919 | pants 920 | flute 921 | votes 922 | tonal 923 | radar 924 | wells 925 | skull 926 | hairs 927 | argue 928 | wears 929 | dolls 930 | voted 931 | caves 932 | cared 933 | broom 934 | scent 935 | panel 936 | fairy 937 | olive 938 | bends 939 | prism 940 | lamps 941 | cable 942 | peach 943 | ruins 944 | rally 945 | schwa 946 | lambs 947 | sells 948 | cools 949 | draft 950 | charm 951 | limbs 952 | brake 953 | gazed 954 | cubes 955 | delay 956 | beams 957 | fetch 958 | ranks 959 | array 960 | harsh 961 | camel 962 | vines 963 | picks 964 | naval 965 | purse 966 | rigid 967 | crawl 968 | toast 969 | soils 970 | sauce 971 | basin 972 | ponds 973 | twins 974 | wrist 975 | fluid 976 | pools 977 | brand 978 | stalk 979 | robot 980 | reeds 981 | hoofs 982 | buses 983 | sheer 984 | grief 985 | bloom 986 | dwelt 987 | melts 988 | risen 989 | flags 990 | knelt 991 | fiber 992 | roofs 993 | freed 994 | armor 995 | piles 996 | aimed 997 | algae 998 | twigs 999 | lemon 1000 | ditch 1001 | drunk 1002 | rests 1003 | chill 1004 | slain 1005 | panic 1006 | cords 1007 | tuned 1008 | crisp 1009 | ledge 1010 | dived 1011 | swamp 1012 | clung 1013 | stole 1014 | molds 1015 | yarns 1016 | liver 1017 | gauge 1018 | breed 1019 | stool 1020 | gulls 1021 | awoke 1022 | gross 1023 | diary 1024 | rails 1025 | belly 1026 | trend 1027 | flask 1028 | stake 1029 | fried 1030 | draws 1031 | actor 1032 | handy 1033 | bowls 1034 | haste 1035 | scope 1036 | deals 1037 | knots 1038 | moons 1039 | essay 1040 | thump 1041 | hangs 1042 | bliss 1043 | dealt 1044 | gains 1045 | bombs 1046 | clown 1047 | palms 1048 | cones 1049 | roast 1050 | tidal 1051 | bored 1052 | chant 1053 | acids 1054 | dough 1055 | camps 1056 | swore 1057 | lover 1058 | hooks 1059 | males 1060 | cocoa 1061 | punch 1062 | award 1063 | reins 1064 | ninth 1065 | noses 1066 | links 1067 | drain 1068 | fills 1069 | nylon 1070 | lunar 1071 | pulse 1072 | flown 1073 | elbow 1074 | fatal 1075 | sites 1076 | moths 1077 | meats 1078 | foxes 1079 | mined 1080 | attic 1081 | fiery 1082 | mount 1083 | usage 1084 | swear 1085 | snowy 1086 | rusty 1087 | scare 1088 | traps 1089 | relax 1090 | react 1091 | valid 1092 | robin 1093 | cease 1094 | gills 1095 | prior 1096 | safer 1097 | polio 1098 | loyal 1099 | swell 1100 | salty 1101 | marsh 1102 | vague 1103 | weave 1104 | mound 1105 | seals 1106 | mules 1107 | virus 1108 | scout 1109 | acute 1110 | windy 1111 | stout 1112 | folds 1113 | seize 1114 | hilly 1115 | joins 1116 | pluck 1117 | stack 1118 | lords 1119 | dunes 1120 | burro 1121 | hawks 1122 | trout 1123 | feeds 1124 | scarf 1125 | halls 1126 | coals 1127 | towel 1128 | souls 1129 | elect 1130 | buggy 1131 | pumps 1132 | loans 1133 | spins 1134 | files 1135 | oxide 1136 | pains 1137 | photo 1138 | rival 1139 | flats 1140 | syrup 1141 | rodeo 1142 | sands 1143 | moose 1144 | pints 1145 | curly 1146 | comic 1147 | cloak 1148 | onion 1149 | clams 1150 | scrap 1151 | didst 1152 | couch 1153 | codes 1154 | fails 1155 | ounce 1156 | lodge 1157 | greet 1158 | gypsy 1159 | utter 1160 | paved 1161 | zones 1162 | fours 1163 | alley 1164 | tiles 1165 | bless 1166 | crest 1167 | elder 1168 | kills 1169 | yeast 1170 | erect 1171 | bugle 1172 | medal 1173 | roles 1174 | hound 1175 | snail 1176 | alter 1177 | ankle 1178 | relay 1179 | loops 1180 | zeros 1181 | bites 1182 | modes 1183 | debts 1184 | realm 1185 | glove 1186 | rayon 1187 | swims 1188 | poked 1189 | stray 1190 | lifts 1191 | maker 1192 | lumps 1193 | graze 1194 | dread 1195 | barns 1196 | docks 1197 | masts 1198 | pours 1199 | wharf 1200 | curse 1201 | plump 1202 | robes 1203 | seeks 1204 | cedar 1205 | curls 1206 | jolly 1207 | myths 1208 | cages 1209 | gloom 1210 | locks 1211 | pedal 1212 | beets 1213 | crows 1214 | anode 1215 | slash 1216 | creep 1217 | rowed 1218 | chips 1219 | fists 1220 | wines 1221 | cares 1222 | valve 1223 | newer 1224 | motel 1225 | ivory 1226 | necks 1227 | clamp 1228 | barge 1229 | blues 1230 | alien 1231 | frown 1232 | strap 1233 | crews 1234 | shack 1235 | gonna 1236 | saves 1237 | stump 1238 | ferry 1239 | idols 1240 | cooks 1241 | juicy 1242 | glare 1243 | carts 1244 | alloy 1245 | bulbs 1246 | lawns 1247 | lasts 1248 | fuels 1249 | oddly 1250 | crane 1251 | filed 1252 | weird 1253 | shawl 1254 | slips 1255 | troop 1256 | bolts 1257 | suite 1258 | sleek 1259 | quilt 1260 | tramp 1261 | blaze 1262 | atlas 1263 | odors 1264 | scrub 1265 | crabs 1266 | probe 1267 | logic 1268 | adobe 1269 | exile 1270 | rebel 1271 | grind 1272 | sting 1273 | spine 1274 | cling 1275 | desks 1276 | grove 1277 | leaps 1278 | prose 1279 | lofty 1280 | agony 1281 | snare 1282 | tusks 1283 | bulls 1284 | moods 1285 | humid 1286 | finer 1287 | dimly 1288 | plank 1289 | china 1290 | pines 1291 | guilt 1292 | sacks 1293 | brace 1294 | quote 1295 | lathe 1296 | gaily 1297 | fonts 1298 | scalp 1299 | adopt 1300 | foggy 1301 | ferns 1302 | grams 1303 | clump 1304 | perch 1305 | tumor 1306 | teens 1307 | crank 1308 | fable 1309 | hedge 1310 | genes 1311 | sober 1312 | boast 1313 | tract 1314 | cigar 1315 | unite 1316 | owing 1317 | thigh 1318 | haiku 1319 | swish 1320 | dikes 1321 | wedge 1322 | booth 1323 | eased 1324 | frail 1325 | cough 1326 | tombs 1327 | darts 1328 | forts 1329 | choir 1330 | pouch 1331 | pinch 1332 | hairy 1333 | buyer 1334 | torch 1335 | vigor 1336 | waltz 1337 | heats 1338 | herbs 1339 | users 1340 | flint 1341 | click 1342 | madam 1343 | bleak 1344 | blunt 1345 | aided 1346 | lacks 1347 | masks 1348 | waded 1349 | risks 1350 | nurse 1351 | chaos 1352 | sewed 1353 | cured 1354 | ample 1355 | lease 1356 | steak 1357 | sinks 1358 | merit 1359 | bluff 1360 | bathe 1361 | gleam 1362 | bonus 1363 | colts 1364 | shear 1365 | gland 1366 | silky 1367 | skate 1368 | birch 1369 | anvil 1370 | sleds 1371 | groan 1372 | maids 1373 | meets 1374 | speck 1375 | hymns 1376 | hints 1377 | drown 1378 | bosom 1379 | slick 1380 | quest 1381 | coils 1382 | spied 1383 | snows 1384 | stead 1385 | snack 1386 | plows 1387 | blond 1388 | tamed 1389 | thorn 1390 | waits 1391 | glued 1392 | banjo 1393 | tease 1394 | arena 1395 | bulky 1396 | carve 1397 | stunt 1398 | warms 1399 | shady 1400 | razor 1401 | folly 1402 | leafy 1403 | notch 1404 | fools 1405 | otter 1406 | pears 1407 | flush 1408 | genus 1409 | ached 1410 | fives 1411 | flaps 1412 | spout 1413 | smote 1414 | fumes 1415 | adapt 1416 | cuffs 1417 | tasty 1418 | stoop 1419 | clips 1420 | disks 1421 | sniff 1422 | lanes 1423 | brisk 1424 | imply 1425 | demon 1426 | super 1427 | furry 1428 | raged 1429 | growl 1430 | texts 1431 | hardy 1432 | stung 1433 | typed 1434 | hates 1435 | wiser 1436 | timid 1437 | serum 1438 | beaks 1439 | rotor 1440 | casts 1441 | baths 1442 | glide 1443 | plots 1444 | trait 1445 | resin 1446 | slums 1447 | lyric 1448 | puffs 1449 | decks 1450 | brood 1451 | mourn 1452 | aloft 1453 | abuse 1454 | whirl 1455 | edged 1456 | ovary 1457 | quack 1458 | heaps 1459 | slang 1460 | await 1461 | civic 1462 | saint 1463 | bevel 1464 | sonar 1465 | aunts 1466 | packs 1467 | froze 1468 | tonic 1469 | corps 1470 | swarm 1471 | frank 1472 | repay 1473 | gaunt 1474 | wired 1475 | niece 1476 | cello 1477 | needy 1478 | chuck 1479 | stony 1480 | media 1481 | surge 1482 | hurts 1483 | repel 1484 | husky 1485 | dated 1486 | hunts 1487 | mists 1488 | exert 1489 | dries 1490 | mates 1491 | sworn 1492 | baker 1493 | spice 1494 | oasis 1495 | boils 1496 | spurs 1497 | doves 1498 | sneak 1499 | paces 1500 | colon 1501 | siege 1502 | strum 1503 | drier 1504 | cacao 1505 | humus 1506 | bales 1507 | piped 1508 | nasty 1509 | rinse 1510 | boxer 1511 | shrub 1512 | amuse 1513 | tacks 1514 | cited 1515 | slung 1516 | delta 1517 | laden 1518 | larva 1519 | rents 1520 | yells 1521 | spool 1522 | spill 1523 | crush 1524 | jewel 1525 | snaps 1526 | stain 1527 | kicks 1528 | tying 1529 | slits 1530 | rated 1531 | eerie 1532 | smash 1533 | plums 1534 | zebra 1535 | earns 1536 | bushy 1537 | scary 1538 | squad 1539 | tutor 1540 | silks 1541 | slabs 1542 | bumps 1543 | evils 1544 | fangs 1545 | snout 1546 | peril 1547 | pivot 1548 | yacht 1549 | lobby 1550 | jeans 1551 | grins 1552 | viola 1553 | liner 1554 | comet 1555 | scars 1556 | chops 1557 | raids 1558 | eater 1559 | slate 1560 | skips 1561 | soles 1562 | misty 1563 | urine 1564 | knobs 1565 | sleet 1566 | holly 1567 | pests 1568 | forks 1569 | grill 1570 | trays 1571 | pails 1572 | borne 1573 | tenor 1574 | wares 1575 | carol 1576 | woody 1577 | canon 1578 | wakes 1579 | kitty 1580 | miner 1581 | polls 1582 | shaky 1583 | nasal 1584 | scorn 1585 | chess 1586 | taxis 1587 | crate 1588 | shyly 1589 | tulip 1590 | forge 1591 | nymph 1592 | budge 1593 | lowly 1594 | abide 1595 | depot 1596 | oases 1597 | asses 1598 | sheds 1599 | fudge 1600 | pills 1601 | rivet 1602 | thine 1603 | groom 1604 | lanky 1605 | boost 1606 | broth 1607 | heave 1608 | gravy 1609 | beech 1610 | timed 1611 | quail 1612 | inert 1613 | gears 1614 | chick 1615 | hinge 1616 | trash 1617 | clash 1618 | sighs 1619 | renew 1620 | bough 1621 | dwarf 1622 | slows 1623 | quill 1624 | shave 1625 | spore 1626 | sixes 1627 | chunk 1628 | madly 1629 | paced 1630 | braid 1631 | fuzzy 1632 | motto 1633 | spies 1634 | slack 1635 | mucus 1636 | magma 1637 | awful 1638 | discs 1639 | erase 1640 | posed 1641 | asset 1642 | cider 1643 | taper 1644 | theft 1645 | churn 1646 | satin 1647 | slots 1648 | taxed 1649 | bully 1650 | sloth 1651 | shale 1652 | tread 1653 | raked 1654 | curds 1655 | manor 1656 | aisle 1657 | bulge 1658 | loins 1659 | stair 1660 | tapes 1661 | leans 1662 | bunks 1663 | squat 1664 | towed 1665 | lance 1666 | panes 1667 | sakes 1668 | heirs 1669 | caste 1670 | dummy 1671 | pores 1672 | fauna 1673 | crook 1674 | poise 1675 | epoch 1676 | risky 1677 | warns 1678 | fling 1679 | berry 1680 | grape 1681 | flank 1682 | drags 1683 | squid 1684 | pelts 1685 | icing 1686 | irony 1687 | irons 1688 | barks 1689 | whoop 1690 | choke 1691 | diets 1692 | whips 1693 | tally 1694 | dozed 1695 | twine 1696 | kites 1697 | bikes 1698 | ticks 1699 | riots 1700 | roars 1701 | vault 1702 | looms 1703 | scold 1704 | blink 1705 | dandy 1706 | pupae 1707 | sieve 1708 | spike 1709 | ducts 1710 | lends 1711 | pizza 1712 | brink 1713 | widen 1714 | plumb 1715 | pagan 1716 | feats 1717 | bison 1718 | soggy 1719 | scoop 1720 | argon 1721 | nudge 1722 | skiff 1723 | amber 1724 | sexes 1725 | rouse 1726 | salts 1727 | hitch 1728 | exalt 1729 | leash 1730 | dined 1731 | chute 1732 | snort 1733 | gusts 1734 | melon 1735 | cheat 1736 | reefs 1737 | llama 1738 | lasso 1739 | debut 1740 | quota 1741 | oaths 1742 | prone 1743 | mixes 1744 | rafts 1745 | dives 1746 | stale 1747 | inlet 1748 | flick 1749 | pinto 1750 | brows 1751 | untie 1752 | batch 1753 | greed 1754 | chore 1755 | stirs 1756 | blush 1757 | onset 1758 | barbs 1759 | volts 1760 | beige 1761 | swoop 1762 | paddy 1763 | laced 1764 | shove 1765 | jerky 1766 | poppy 1767 | leaks 1768 | fares 1769 | dodge 1770 | godly 1771 | squaw 1772 | affix 1773 | brute 1774 | nicer 1775 | undue 1776 | snarl 1777 | merge 1778 | doses 1779 | showy 1780 | daddy 1781 | roost 1782 | vases 1783 | swirl 1784 | petty 1785 | colds 1786 | curry 1787 | cobra 1788 | genie 1789 | flare 1790 | messy 1791 | cores 1792 | soaks 1793 | ripen 1794 | whine 1795 | amino 1796 | plaid 1797 | spiny 1798 | mowed 1799 | baton 1800 | peers 1801 | vowed 1802 | pious 1803 | swans 1804 | exits 1805 | afoot 1806 | plugs 1807 | idiom 1808 | chili 1809 | rites 1810 | serfs 1811 | cleft 1812 | berth 1813 | grubs 1814 | annex 1815 | dizzy 1816 | hasty 1817 | latch 1818 | wasps 1819 | mirth 1820 | baron 1821 | plead 1822 | aloof 1823 | aging 1824 | pixel 1825 | bared 1826 | mummy 1827 | hotly 1828 | auger 1829 | buddy 1830 | chaps 1831 | badge 1832 | stark 1833 | fairs 1834 | gully 1835 | mumps 1836 | emery 1837 | filly 1838 | ovens 1839 | drone 1840 | gauze 1841 | idiot 1842 | fussy 1843 | annoy 1844 | shank 1845 | gouge 1846 | bleed 1847 | elves 1848 | roped 1849 | unfit 1850 | baggy 1851 | mower 1852 | scant 1853 | grabs 1854 | fleas 1855 | lousy 1856 | album 1857 | sawed 1858 | cooky 1859 | murky 1860 | infer 1861 | burly 1862 | waged 1863 | dingy 1864 | brine 1865 | kneel 1866 | creak 1867 | vanes 1868 | smoky 1869 | spurt 1870 | combs 1871 | easel 1872 | laces 1873 | humps 1874 | rumor 1875 | aroma 1876 | horde 1877 | swiss 1878 | leapt 1879 | opium 1880 | slime 1881 | afire 1882 | pansy 1883 | mares 1884 | soaps 1885 | husks 1886 | snips 1887 | hazel 1888 | lined 1889 | cafes 1890 | naive 1891 | wraps 1892 | sized 1893 | piers 1894 | beset 1895 | agile 1896 | tongs 1897 | steed 1898 | fraud 1899 | booty 1900 | valor 1901 | downy 1902 | witty 1903 | mossy 1904 | psalm 1905 | scuba 1906 | tours 1907 | polka 1908 | milky 1909 | gaudy 1910 | shrug 1911 | tufts 1912 | wilds 1913 | laser 1914 | truss 1915 | hares 1916 | creed 1917 | lilac 1918 | siren 1919 | tarry 1920 | bribe 1921 | swine 1922 | muted 1923 | flips 1924 | cures 1925 | sinew 1926 | boxed 1927 | hoops 1928 | gasps 1929 | hoods 1930 | niche 1931 | yucca 1932 | glows 1933 | sewer 1934 | whack 1935 | fuses 1936 | gowns 1937 | droop 1938 | bucks 1939 | pangs 1940 | mails 1941 | whisk 1942 | haven 1943 | clasp 1944 | sling 1945 | stint 1946 | urges 1947 | champ 1948 | piety 1949 | chirp 1950 | pleat 1951 | posse 1952 | sunup 1953 | menus 1954 | howls 1955 | quake 1956 | knack 1957 | plaza 1958 | fiend 1959 | caked 1960 | bangs 1961 | erupt 1962 | poker 1963 | olden 1964 | cramp 1965 | voter 1966 | poses 1967 | manly 1968 | slump 1969 | fined 1970 | grips 1971 | gaped 1972 | purge 1973 | hiked 1974 | maize 1975 | fluff 1976 | strut 1977 | sloop 1978 | prowl 1979 | roach 1980 | cocks 1981 | bland 1982 | dials 1983 | plume 1984 | slaps 1985 | soups 1986 | dully 1987 | wills 1988 | foams 1989 | solos 1990 | skier 1991 | eaves 1992 | totem 1993 | fused 1994 | latex 1995 | veils 1996 | mused 1997 | mains 1998 | myrrh 1999 | racks 2000 | galls 2001 | gnats 2002 | bouts 2003 | sisal 2004 | shuts 2005 | hoses 2006 | dryly 2007 | hover 2008 | gloss 2009 | seeps 2010 | denim 2011 | putty 2012 | guppy 2013 | leaky 2014 | dusky 2015 | filth 2016 | oboes 2017 | spans 2018 | fowls 2019 | adorn 2020 | glaze 2021 | haunt 2022 | dares 2023 | obeys 2024 | bakes 2025 | abyss 2026 | smelt 2027 | gangs 2028 | aches 2029 | trawl 2030 | claps 2031 | undid 2032 | spicy 2033 | hoist 2034 | fades 2035 | vicar 2036 | acorn 2037 | pussy 2038 | gruff 2039 | musty 2040 | tarts 2041 | snuff 2042 | hunch 2043 | truce 2044 | tweed 2045 | dryer 2046 | loser 2047 | sheaf 2048 | moles 2049 | lapse 2050 | tawny 2051 | vexed 2052 | autos 2053 | wager 2054 | domes 2055 | sheen 2056 | clang 2057 | spade 2058 | sowed 2059 | broil 2060 | slyly 2061 | studs 2062 | grunt 2063 | donor 2064 | slugs 2065 | aspen 2066 | homer 2067 | croak 2068 | tithe 2069 | halts 2070 | avert 2071 | havoc 2072 | hogan 2073 | glint 2074 | ruddy 2075 | jeeps 2076 | flaky 2077 | ladle 2078 | taunt 2079 | snore 2080 | fines 2081 | props 2082 | prune 2083 | pesos 2084 | radii 2085 | pokes 2086 | tiled 2087 | daisy 2088 | heron 2089 | villa 2090 | farce 2091 | binds 2092 | cites 2093 | fixes 2094 | jerks 2095 | livid 2096 | waked 2097 | inked 2098 | booms 2099 | chews 2100 | licks 2101 | hyena 2102 | scoff 2103 | lusty 2104 | sonic 2105 | smith 2106 | usher 2107 | tucks 2108 | vigil 2109 | molts 2110 | sects 2111 | spars 2112 | dumps 2113 | scaly 2114 | wisps 2115 | sores 2116 | mince 2117 | panda 2118 | flier 2119 | axles 2120 | plied 2121 | booby 2122 | patio 2123 | rabbi 2124 | petal 2125 | polyp 2126 | tints 2127 | grate 2128 | troll 2129 | tolls 2130 | relic 2131 | phony 2132 | bleat 2133 | flaws 2134 | flake 2135 | snags 2136 | aptly 2137 | drawl 2138 | ulcer 2139 | soapy 2140 | bossy 2141 | monks 2142 | crags 2143 | caged 2144 | twang 2145 | diner 2146 | taped 2147 | cadet 2148 | grids 2149 | spawn 2150 | guile 2151 | noose 2152 | mores 2153 | girth 2154 | slimy 2155 | aides 2156 | spasm 2157 | burrs 2158 | alibi 2159 | lymph 2160 | saucy 2161 | muggy 2162 | liter 2163 | joked 2164 | goofy 2165 | exams 2166 | enact 2167 | stork 2168 | lured 2169 | toxic 2170 | omens 2171 | nears 2172 | covet 2173 | wrung 2174 | forum 2175 | venom 2176 | moody 2177 | alder 2178 | sassy 2179 | flair 2180 | guild 2181 | prays 2182 | wrens 2183 | hauls 2184 | stave 2185 | tilts 2186 | pecks 2187 | stomp 2188 | gales 2189 | tempt 2190 | capes 2191 | mesas 2192 | omits 2193 | tepee 2194 | harry 2195 | wring 2196 | evoke 2197 | limes 2198 | cluck 2199 | lunge 2200 | highs 2201 | canes 2202 | giddy 2203 | lithe 2204 | verge 2205 | khaki 2206 | queue 2207 | loath 2208 | foyer 2209 | outdo 2210 | fared 2211 | deter 2212 | crumb 2213 | astir 2214 | spire 2215 | jumpy 2216 | extol 2217 | buoys 2218 | stubs 2219 | lucid 2220 | thong 2221 | afore 2222 | whiff 2223 | maxim 2224 | hulls 2225 | clogs 2226 | slats 2227 | jiffy 2228 | arbor 2229 | cinch 2230 | igloo 2231 | goody 2232 | gazes 2233 | dowel 2234 | calms 2235 | bitch 2236 | scowl 2237 | gulps 2238 | coded 2239 | waver 2240 | mason 2241 | lobes 2242 | ebony 2243 | flail 2244 | isles 2245 | clods 2246 | dazed 2247 | adept 2248 | oozed 2249 | sedan 2250 | clays 2251 | warts 2252 | ketch 2253 | skunk 2254 | manes 2255 | adore 2256 | sneer 2257 | mango 2258 | fiord 2259 | flora 2260 | roomy 2261 | minks 2262 | thaws 2263 | watts 2264 | freer 2265 | exult 2266 | plush 2267 | paled 2268 | twain 2269 | clink 2270 | scamp 2271 | pawed 2272 | grope 2273 | bravo 2274 | gable 2275 | stink 2276 | sever 2277 | waned 2278 | rarer 2279 | regal 2280 | wards 2281 | fawns 2282 | babes 2283 | unify 2284 | amend 2285 | oaken 2286 | glade 2287 | visor 2288 | hefty 2289 | nines 2290 | throb 2291 | pecan 2292 | butts 2293 | pence 2294 | sills 2295 | jails 2296 | flyer 2297 | saber 2298 | nomad 2299 | miter 2300 | beeps 2301 | domed 2302 | gulfs 2303 | curbs 2304 | heath 2305 | moors 2306 | aorta 2307 | larks 2308 | tangy 2309 | wryly 2310 | cheep 2311 | rages 2312 | evade 2313 | lures 2314 | freak 2315 | vogue 2316 | tunic 2317 | slams 2318 | knits 2319 | dumpy 2320 | mania 2321 | spits 2322 | firth 2323 | hikes 2324 | trots 2325 | nosed 2326 | clank 2327 | dogma 2328 | bloat 2329 | balsa 2330 | graft 2331 | middy 2332 | stile 2333 | keyed 2334 | finch 2335 | sperm 2336 | chaff 2337 | wiles 2338 | amigo 2339 | copra 2340 | amiss 2341 | eying 2342 | twirl 2343 | lurch 2344 | popes 2345 | chins 2346 | smock 2347 | tines 2348 | guise 2349 | grits 2350 | junks 2351 | shoal 2352 | cache 2353 | tapir 2354 | atoll 2355 | deity 2356 | toils 2357 | spree 2358 | mocks 2359 | scans 2360 | shorn 2361 | revel 2362 | raven 2363 | hoary 2364 | reels 2365 | scuff 2366 | mimic 2367 | weedy 2368 | corny 2369 | truer 2370 | rouge 2371 | ember 2372 | floes 2373 | torso 2374 | wipes 2375 | edict 2376 | sulky 2377 | recur 2378 | groin 2379 | baste 2380 | kinks 2381 | surer 2382 | piggy 2383 | moldy 2384 | franc 2385 | liars 2386 | inept 2387 | gusty 2388 | facet 2389 | jetty 2390 | equip 2391 | leper 2392 | slink 2393 | soars 2394 | cater 2395 | dowry 2396 | sided 2397 | yearn 2398 | decoy 2399 | taboo 2400 | ovals 2401 | heals 2402 | pleas 2403 | beret 2404 | spilt 2405 | gayly 2406 | rover 2407 | endow 2408 | pygmy 2409 | carat 2410 | abbey 2411 | vents 2412 | waken 2413 | chimp 2414 | fumed 2415 | sodas 2416 | vinyl 2417 | clout 2418 | wades 2419 | mites 2420 | smirk 2421 | bores 2422 | bunny 2423 | surly 2424 | frock 2425 | foray 2426 | purer 2427 | milks 2428 | query 2429 | mired 2430 | blare 2431 | froth 2432 | gruel 2433 | navel 2434 | paler 2435 | puffy 2436 | casks 2437 | grime 2438 | derby 2439 | mamma 2440 | gavel 2441 | teddy 2442 | vomit 2443 | moans 2444 | allot 2445 | defer 2446 | wield 2447 | viper 2448 | louse 2449 | erred 2450 | hewed 2451 | abhor 2452 | wrest 2453 | waxen 2454 | adage 2455 | ardor 2456 | stabs 2457 | pored 2458 | rondo 2459 | loped 2460 | fishy 2461 | bible 2462 | hires 2463 | foals 2464 | feuds 2465 | jambs 2466 | thuds 2467 | jeers 2468 | knead 2469 | quirk 2470 | rugby 2471 | expel 2472 | greys 2473 | rigor 2474 | ester 2475 | lyres 2476 | aback 2477 | glues 2478 | lotus 2479 | lurid 2480 | rungs 2481 | hutch 2482 | thyme 2483 | valet 2484 | tommy 2485 | yokes 2486 | epics 2487 | trill 2488 | pikes 2489 | ozone 2490 | caper 2491 | chime 2492 | frees 2493 | famed 2494 | leech 2495 | smite 2496 | neigh 2497 | erode 2498 | robed 2499 | hoard 2500 | salve 2501 | conic 2502 | gawky 2503 | craze 2504 | jacks 2505 | gloat 2506 | mushy 2507 | rumps 2508 | fetus 2509 | wince 2510 | pinks 2511 | shalt 2512 | toots 2513 | glens 2514 | cooed 2515 | rusts 2516 | stews 2517 | shred 2518 | parka 2519 | chugs 2520 | winks 2521 | clots 2522 | shrew 2523 | booed 2524 | filmy 2525 | juror 2526 | dents 2527 | gummy 2528 | grays 2529 | hooky 2530 | butte 2531 | dogie 2532 | poled 2533 | reams 2534 | fifes 2535 | spank 2536 | gayer 2537 | tepid 2538 | spook 2539 | taint 2540 | flirt 2541 | rogue 2542 | spiky 2543 | opals 2544 | miser 2545 | cocky 2546 | coyly 2547 | balmy 2548 | slosh 2549 | brawl 2550 | aphid 2551 | faked 2552 | hydra 2553 | brags 2554 | chide 2555 | yanks 2556 | allay 2557 | video 2558 | altos 2559 | eases 2560 | meted 2561 | chasm 2562 | longs 2563 | excel 2564 | taffy 2565 | impel 2566 | savor 2567 | koala 2568 | quays 2569 | dawns 2570 | proxy 2571 | clove 2572 | duets 2573 | dregs 2574 | tardy 2575 | briar 2576 | grimy 2577 | ultra 2578 | meaty 2579 | halve 2580 | wails 2581 | suede 2582 | mauve 2583 | envoy 2584 | arson 2585 | coves 2586 | gooey 2587 | brews 2588 | sofas 2589 | chums 2590 | amaze 2591 | zooms 2592 | abbot 2593 | halos 2594 | scour 2595 | suing 2596 | cribs 2597 | sagas 2598 | enema 2599 | wordy 2600 | harps 2601 | coupe 2602 | molar 2603 | flops 2604 | weeps 2605 | mints 2606 | ashen 2607 | felts 2608 | askew 2609 | munch 2610 | mewed 2611 | divan 2612 | vices 2613 | jumbo 2614 | blobs 2615 | blots 2616 | spunk 2617 | acrid 2618 | topaz 2619 | cubed 2620 | clans 2621 | flees 2622 | slurs 2623 | gnaws 2624 | welds 2625 | fords 2626 | emits 2627 | agate 2628 | pumas 2629 | mends 2630 | darks 2631 | dukes 2632 | plies 2633 | canny 2634 | hoots 2635 | oozes 2636 | lamed 2637 | fouls 2638 | clefs 2639 | nicks 2640 | mated 2641 | skims 2642 | brunt 2643 | tuber 2644 | tinge 2645 | fates 2646 | ditty 2647 | thins 2648 | frets 2649 | eider 2650 | bayou 2651 | mulch 2652 | fasts 2653 | amass 2654 | damps 2655 | morns 2656 | friar 2657 | palsy 2658 | vista 2659 | croon 2660 | conch 2661 | udder 2662 | tacos 2663 | skits 2664 | mikes 2665 | quits 2666 | preen 2667 | aster 2668 | adder 2669 | elegy 2670 | pulpy 2671 | scows 2672 | baled 2673 | hovel 2674 | lavas 2675 | crave 2676 | optic 2677 | welts 2678 | busts 2679 | knave 2680 | razed 2681 | shins 2682 | totes 2683 | scoot 2684 | dears 2685 | crock 2686 | mutes 2687 | trims 2688 | skein 2689 | doted 2690 | shuns 2691 | veers 2692 | fakes 2693 | yoked 2694 | wooed 2695 | hacks 2696 | sprig 2697 | wands 2698 | lulls 2699 | seers 2700 | snobs 2701 | nooks 2702 | pined 2703 | perky 2704 | mooed 2705 | frill 2706 | dines 2707 | booze 2708 | tripe 2709 | prong 2710 | drips 2711 | odder 2712 | levee 2713 | antic 2714 | sidle 2715 | pithy 2716 | corks 2717 | yelps 2718 | joker 2719 | fleck 2720 | buffs 2721 | scram 2722 | tiers 2723 | bogey 2724 | doled 2725 | irate 2726 | vales 2727 | coped 2728 | hails 2729 | elude 2730 | bulks 2731 | aired 2732 | vying 2733 | stags 2734 | strew 2735 | cocci 2736 | pacts 2737 | scabs 2738 | silos 2739 | dusts 2740 | yodel 2741 | terse 2742 | jaded 2743 | baser 2744 | jibes 2745 | foils 2746 | sways 2747 | forgo 2748 | slays 2749 | preys 2750 | treks 2751 | quell 2752 | peeks 2753 | assay 2754 | lurks 2755 | eject 2756 | boars 2757 | trite 2758 | belch 2759 | gnash 2760 | wanes 2761 | lutes 2762 | whims 2763 | dosed 2764 | chewy 2765 | snipe 2766 | umbra 2767 | teems 2768 | dozes 2769 | kelps 2770 | upped 2771 | brawn 2772 | doped 2773 | shush 2774 | rinds 2775 | slush 2776 | moron 2777 | voile 2778 | woken 2779 | fjord 2780 | sheik 2781 | jests 2782 | kayak 2783 | slews 2784 | toted 2785 | saner 2786 | drape 2787 | patty 2788 | raves 2789 | sulfa 2790 | grist 2791 | skied 2792 | vixen 2793 | civet 2794 | vouch 2795 | tiara 2796 | homey 2797 | moped 2798 | runts 2799 | serge 2800 | kinky 2801 | rills 2802 | corns 2803 | brats 2804 | pries 2805 | amble 2806 | fries 2807 | loons 2808 | tsars 2809 | datum 2810 | musky 2811 | pigmy 2812 | gnome 2813 | ravel 2814 | ovule 2815 | icily 2816 | liken 2817 | lemur 2818 | frays 2819 | silts 2820 | sifts 2821 | plods 2822 | ramps 2823 | tress 2824 | earls 2825 | dudes 2826 | waive 2827 | karat 2828 | jolts 2829 | peons 2830 | beers 2831 | horny 2832 | pales 2833 | wreak 2834 | lairs 2835 | lynch 2836 | stank 2837 | swoon 2838 | idler 2839 | abort 2840 | blitz 2841 | ensue 2842 | atone 2843 | bingo 2844 | roves 2845 | kilts 2846 | scald 2847 | adios 2848 | cynic 2849 | dulls 2850 | memos 2851 | elfin 2852 | dales 2853 | peels 2854 | peals 2855 | bares 2856 | sinus 2857 | crone 2858 | sable 2859 | hinds 2860 | shirk 2861 | enrol 2862 | wilts 2863 | roams 2864 | duped 2865 | cysts 2866 | mitts 2867 | safes 2868 | spats 2869 | coops 2870 | filet 2871 | knell 2872 | refit 2873 | covey 2874 | punks 2875 | kilns 2876 | fitly 2877 | abate 2878 | talcs 2879 | heeds 2880 | duels 2881 | wanly 2882 | ruffs 2883 | gauss 2884 | lapel 2885 | jaunt 2886 | whelp 2887 | cleat 2888 | gauzy 2889 | dirge 2890 | edits 2891 | wormy 2892 | moats 2893 | smear 2894 | prods 2895 | bowel 2896 | frisk 2897 | vests 2898 | bayed 2899 | rasps 2900 | tames 2901 | delve 2902 | embed 2903 | befit 2904 | wafer 2905 | ceded 2906 | novas 2907 | feign 2908 | spews 2909 | larch 2910 | huffs 2911 | doles 2912 | mamas 2913 | hulks 2914 | pried 2915 | brims 2916 | irked 2917 | aspic 2918 | swipe 2919 | mealy 2920 | skimp 2921 | bluer 2922 | slake 2923 | dowdy 2924 | penis 2925 | brays 2926 | pupas 2927 | egret 2928 | flunk 2929 | phlox 2930 | gripe 2931 | peony 2932 | douse 2933 | blurs 2934 | darns 2935 | slunk 2936 | lefts 2937 | chats 2938 | inane 2939 | vials 2940 | stilt 2941 | rinks 2942 | woofs 2943 | wowed 2944 | bongs 2945 | frond 2946 | ingot 2947 | evict 2948 | singe 2949 | shyer 2950 | flied 2951 | slops 2952 | dolts 2953 | drool 2954 | dells 2955 | whelk 2956 | hippy 2957 | feted 2958 | ether 2959 | cocos 2960 | hives 2961 | jibed 2962 | mazes 2963 | trios 2964 | sirup 2965 | squab 2966 | laths 2967 | leers 2968 | pasta 2969 | rifts 2970 | lopes 2971 | alias 2972 | whirs 2973 | diced 2974 | slags 2975 | lodes 2976 | foxed 2977 | idled 2978 | prows 2979 | plait 2980 | malts 2981 | chafe 2982 | cower 2983 | toyed 2984 | chefs 2985 | keels 2986 | sties 2987 | racer 2988 | etude 2989 | sucks 2990 | sulks 2991 | micas 2992 | czars 2993 | copse 2994 | ailed 2995 | abler 2996 | rabid 2997 | golds 2998 | croup 2999 | snaky 3000 | visas 3001 | palls 3002 | mopes 3003 | boned 3004 | wispy 3005 | raved 3006 | swaps 3007 | junky 3008 | doily 3009 | pawns 3010 | tamer 3011 | poach 3012 | baits 3013 | damns 3014 | gumbo 3015 | daunt 3016 | prank 3017 | hunks 3018 | buxom 3019 | heres 3020 | honks 3021 | stows 3022 | unbar 3023 | idles 3024 | routs 3025 | sages 3026 | goads 3027 | remit 3028 | copes 3029 | deign 3030 | culls 3031 | girds 3032 | haves 3033 | lucks 3034 | stunk 3035 | dodos 3036 | shams 3037 | snubs 3038 | icons 3039 | usurp 3040 | dooms 3041 | hells 3042 | soled 3043 | comas 3044 | paves 3045 | maths 3046 | perks 3047 | limps 3048 | wombs 3049 | blurb 3050 | daubs 3051 | cokes 3052 | sours 3053 | stuns 3054 | cased 3055 | musts 3056 | coeds 3057 | cowed 3058 | aping 3059 | zoned 3060 | rummy 3061 | fetes 3062 | skulk 3063 | quaff 3064 | rajah 3065 | deans 3066 | reaps 3067 | galas 3068 | tills 3069 | roved 3070 | kudos 3071 | toned 3072 | pared 3073 | scull 3074 | vexes 3075 | punts 3076 | snoop 3077 | bails 3078 | dames 3079 | hazes 3080 | lores 3081 | marts 3082 | voids 3083 | ameba 3084 | rakes 3085 | adzes 3086 | harms 3087 | rears 3088 | satyr 3089 | swill 3090 | hexes 3091 | colic 3092 | leeks 3093 | hurls 3094 | yowls 3095 | ivies 3096 | plops 3097 | musks 3098 | papaw 3099 | jells 3100 | bused 3101 | cruet 3102 | bided 3103 | filch 3104 | zests 3105 | rooks 3106 | laxly 3107 | rends 3108 | loams 3109 | basks 3110 | sires 3111 | carps 3112 | pokey 3113 | flits 3114 | muses 3115 | bawls 3116 | shuck 3117 | viler 3118 | lisps 3119 | peeps 3120 | sorer 3121 | lolls 3122 | prude 3123 | diked 3124 | floss 3125 | flogs 3126 | scums 3127 | dopes 3128 | bogie 3129 | pinky 3130 | leafs 3131 | tubas 3132 | scads 3133 | lowed 3134 | yeses 3135 | biked 3136 | qualm 3137 | evens 3138 | caned 3139 | gawks 3140 | whits 3141 | wooly 3142 | gluts 3143 | romps 3144 | bests 3145 | dunce 3146 | crony 3147 | joist 3148 | tunas 3149 | boner 3150 | malls 3151 | parch 3152 | avers 3153 | crams 3154 | pares 3155 | dally 3156 | bigot 3157 | kales 3158 | flays 3159 | leach 3160 | gushy 3161 | pooch 3162 | huger 3163 | slyer 3164 | golfs 3165 | mires 3166 | flues 3167 | loafs 3168 | arced 3169 | acnes 3170 | neons 3171 | fiefs 3172 | dints 3173 | dazes 3174 | pouts 3175 | cored 3176 | yules 3177 | lilts 3178 | beefs 3179 | mutts 3180 | fells 3181 | cowls 3182 | spuds 3183 | lames 3184 | jawed 3185 | dupes 3186 | deads 3187 | bylaw 3188 | noons 3189 | nifty 3190 | clued 3191 | vireo 3192 | gapes 3193 | metes 3194 | cuter 3195 | maims 3196 | droll 3197 | cupid 3198 | mauls 3199 | sedge 3200 | papas 3201 | wheys 3202 | eking 3203 | loots 3204 | hilts 3205 | meows 3206 | beaus 3207 | dices 3208 | peppy 3209 | riper 3210 | fogey 3211 | gists 3212 | yogas 3213 | gilts 3214 | skews 3215 | cedes 3216 | zeals 3217 | alums 3218 | okays 3219 | elope 3220 | grump 3221 | wafts 3222 | soots 3223 | blimp 3224 | hefts 3225 | mulls 3226 | hosed 3227 | cress 3228 | doffs 3229 | ruder 3230 | pixie 3231 | waifs 3232 | ousts 3233 | pucks 3234 | biers 3235 | gulch 3236 | suets 3237 | hobos 3238 | lints 3239 | brans 3240 | teals 3241 | garbs 3242 | pewee 3243 | helms 3244 | turfs 3245 | quips 3246 | wends 3247 | banes 3248 | napes 3249 | icier 3250 | swats 3251 | bagel 3252 | hexed 3253 | ogres 3254 | goner 3255 | gilds 3256 | pyres 3257 | lards 3258 | bides 3259 | paged 3260 | talon 3261 | flout 3262 | medic 3263 | veals 3264 | putts 3265 | dirks 3266 | dotes 3267 | tippy 3268 | blurt 3269 | piths 3270 | acing 3271 | barer 3272 | whets 3273 | gaits 3274 | wools 3275 | dunks 3276 | heros 3277 | swabs 3278 | dirts 3279 | jutes 3280 | hemps 3281 | surfs 3282 | okapi 3283 | chows 3284 | shoos 3285 | dusks 3286 | parry 3287 | decal 3288 | furls 3289 | cilia 3290 | sears 3291 | novae 3292 | murks 3293 | warps 3294 | slues 3295 | lamer 3296 | saris 3297 | weans 3298 | purrs 3299 | dills 3300 | togas 3301 | newts 3302 | meany 3303 | bunts 3304 | razes 3305 | goons 3306 | wicks 3307 | ruses 3308 | vends 3309 | geode 3310 | drake 3311 | judos 3312 | lofts 3313 | pulps 3314 | lauds 3315 | mucks 3316 | vises 3317 | mocha 3318 | oiled 3319 | roman 3320 | ethyl 3321 | gotta 3322 | fugue 3323 | smack 3324 | gourd 3325 | bumpy 3326 | radix 3327 | fatty 3328 | borax 3329 | cubit 3330 | cacti 3331 | gamma 3332 | focal 3333 | avail 3334 | papal 3335 | golly 3336 | elite 3337 | versa 3338 | billy 3339 | adieu 3340 | annum 3341 | howdy 3342 | rhino 3343 | norms 3344 | bobby 3345 | axiom 3346 | setup 3347 | yolks 3348 | terns 3349 | mixer 3350 | genre 3351 | knoll 3352 | abode 3353 | junta 3354 | gorge 3355 | combo 3356 | alpha 3357 | overt 3358 | kinda 3359 | spelt 3360 | prick 3361 | nobly 3362 | ephod 3363 | audio 3364 | modal 3365 | veldt 3366 | warty 3367 | fluke 3368 | bonny 3369 | bream 3370 | rosin 3371 | bolls 3372 | doers 3373 | downs 3374 | beady 3375 | motif 3376 | humph 3377 | fella 3378 | mould 3379 | crepe 3380 | kerns 3381 | aloha 3382 | glyph 3383 | azure 3384 | riser 3385 | blest 3386 | locus 3387 | lumpy 3388 | beryl 3389 | wanna 3390 | brier 3391 | tuner 3392 | rowdy 3393 | mural 3394 | timer 3395 | canst 3396 | krill 3397 | quoth 3398 | lemme 3399 | triad 3400 | tenon 3401 | amply 3402 | deeps 3403 | padre 3404 | leant 3405 | pacer 3406 | octal 3407 | dolly 3408 | trans 3409 | sumac 3410 | foamy 3411 | lolly 3412 | giver 3413 | quipu 3414 | codex 3415 | manna 3416 | unwed 3417 | vodka 3418 | ferny 3419 | salon 3420 | duple 3421 | boron 3422 | revue 3423 | crier 3424 | alack 3425 | inter 3426 | dilly 3427 | whist 3428 | cults 3429 | spake 3430 | reset 3431 | loess 3432 | decor 3433 | mover 3434 | verve 3435 | ethic 3436 | gamut 3437 | lingo 3438 | dunno 3439 | align 3440 | sissy 3441 | incur 3442 | reedy 3443 | avant 3444 | piper 3445 | waxer 3446 | calyx 3447 | basil 3448 | coons 3449 | seine 3450 | piney 3451 | lemma 3452 | trams 3453 | winch 3454 | whirr 3455 | saith 3456 | ionic 3457 | heady 3458 | harem 3459 | tummy 3460 | sally 3461 | shied 3462 | dross 3463 | farad 3464 | saver 3465 | tilde 3466 | jingo 3467 | bower 3468 | serif 3469 | facto 3470 | belle 3471 | inset 3472 | bogus 3473 | caved 3474 | forte 3475 | sooty 3476 | bongo 3477 | toves 3478 | credo 3479 | basal 3480 | yella 3481 | aglow 3482 | glean 3483 | gusto 3484 | hymen 3485 | ethos 3486 | terra 3487 | brash 3488 | scrip 3489 | swash 3490 | aleph 3491 | tinny 3492 | itchy 3493 | wanta 3494 | trice 3495 | jowls 3496 | gongs 3497 | garde 3498 | boric 3499 | twill 3500 | sower 3501 | henry 3502 | awash 3503 | libel 3504 | spurn 3505 | sabre 3506 | rebut 3507 | penal 3508 | obese 3509 | sonny 3510 | quirt 3511 | mebbe 3512 | tacit 3513 | greek 3514 | xenon 3515 | hullo 3516 | pique 3517 | roger 3518 | negro 3519 | hadst 3520 | gecko 3521 | beget 3522 | uncut 3523 | aloes 3524 | louis 3525 | quint 3526 | clunk 3527 | raped 3528 | salvo 3529 | diode 3530 | matey 3531 | hertz 3532 | xylem 3533 | kiosk 3534 | apace 3535 | cawed 3536 | peter 3537 | wench 3538 | cohos 3539 | sorta 3540 | gamba 3541 | bytes 3542 | tango 3543 | nutty 3544 | axial 3545 | aleck 3546 | natal 3547 | clomp 3548 | gored 3549 | siree 3550 | bandy 3551 | gunny 3552 | runic 3553 | whizz 3554 | rupee 3555 | fated 3556 | wiper 3557 | bards 3558 | briny 3559 | staid 3560 | hocks 3561 | ochre 3562 | yummy 3563 | gents 3564 | soupy 3565 | roper 3566 | swath 3567 | cameo 3568 | edger 3569 | spate 3570 | gimme 3571 | ebbed 3572 | breve 3573 | theta 3574 | deems 3575 | dykes 3576 | servo 3577 | telly 3578 | tabby 3579 | tares 3580 | blocs 3581 | welch 3582 | ghoul 3583 | vitae 3584 | cumin 3585 | dinky 3586 | bronc 3587 | tabor 3588 | teeny 3589 | comer 3590 | borer 3591 | sired 3592 | privy 3593 | mammy 3594 | deary 3595 | gyros 3596 | sprit 3597 | conga 3598 | quire 3599 | thugs 3600 | furor 3601 | bloke 3602 | runes 3603 | bawdy 3604 | cadre 3605 | toxin 3606 | annul 3607 | egged 3608 | anion 3609 | nodes 3610 | picky 3611 | stein 3612 | jello 3613 | audit 3614 | echos 3615 | fagot 3616 | letup 3617 | eyrie 3618 | fount 3619 | caped 3620 | axons 3621 | amuck 3622 | banal 3623 | riled 3624 | petit 3625 | umber 3626 | miler 3627 | fibre 3628 | agave 3629 | bated 3630 | bilge 3631 | vitro 3632 | feint 3633 | pudgy 3634 | mater 3635 | manic 3636 | umped 3637 | pesky 3638 | strep 3639 | slurp 3640 | pylon 3641 | puree 3642 | caret 3643 | temps 3644 | newel 3645 | yawns 3646 | seedy 3647 | treed 3648 | coups 3649 | rangy 3650 | brads 3651 | mangy 3652 | loner 3653 | circa 3654 | tibia 3655 | afoul 3656 | mommy 3657 | titer 3658 | carne 3659 | kooky 3660 | motes 3661 | amity 3662 | suave 3663 | hippo 3664 | curvy 3665 | samba 3666 | newsy 3667 | anise 3668 | imams 3669 | tulle 3670 | aways 3671 | liven 3672 | hallo 3673 | wales 3674 | opted 3675 | canto 3676 | idyll 3677 | bodes 3678 | curio 3679 | wrack 3680 | hiker 3681 | chive 3682 | yokel 3683 | dotty 3684 | demur 3685 | cusps 3686 | specs 3687 | quads 3688 | laity 3689 | toner 3690 | decry 3691 | writs 3692 | saute 3693 | clack 3694 | aught 3695 | logos 3696 | tipsy 3697 | natty 3698 | ducal 3699 | bidet 3700 | bulgy 3701 | metre 3702 | lusts 3703 | unary 3704 | goeth 3705 | baler 3706 | sited 3707 | shies 3708 | hasps 3709 | brung 3710 | holed 3711 | swank 3712 | looky 3713 | melee 3714 | huffy 3715 | loamy 3716 | pimps 3717 | titan 3718 | binge 3719 | shunt 3720 | femur 3721 | libra 3722 | seder 3723 | honed 3724 | annas 3725 | coypu 3726 | shims 3727 | zowie 3728 | jihad 3729 | savvy 3730 | nadir 3731 | basso 3732 | monic 3733 | maned 3734 | mousy 3735 | omega 3736 | laver 3737 | prima 3738 | picas 3739 | folio 3740 | mecca 3741 | reals 3742 | troth 3743 | testy 3744 | balky 3745 | crimp 3746 | chink 3747 | abets 3748 | splat 3749 | abaci 3750 | vaunt 3751 | cutie 3752 | pasty 3753 | moray 3754 | levis 3755 | ratty 3756 | islet 3757 | joust 3758 | motet 3759 | viral 3760 | nukes 3761 | grads 3762 | comfy 3763 | voila 3764 | woozy 3765 | blued 3766 | whomp 3767 | sward 3768 | metro 3769 | skeet 3770 | chine 3771 | aerie 3772 | bowie 3773 | tubby 3774 | emirs 3775 | coati 3776 | unzip 3777 | slobs 3778 | trike 3779 | funky 3780 | ducat 3781 | dewey 3782 | skoal 3783 | wadis 3784 | oomph 3785 | taker 3786 | minim 3787 | getup 3788 | stoic 3789 | synod 3790 | runty 3791 | flyby 3792 | braze 3793 | inlay 3794 | venue 3795 | louts 3796 | peaty 3797 | orlon 3798 | humpy 3799 | radon 3800 | beaut 3801 | raspy 3802 | unfed 3803 | crick 3804 | nappy 3805 | vizor 3806 | yipes 3807 | rebus 3808 | divot 3809 | kiwis 3810 | vetch 3811 | squib 3812 | sitar 3813 | kiddo 3814 | dyers 3815 | cotta 3816 | matzo 3817 | lager 3818 | zebus 3819 | crass 3820 | dacha 3821 | kneed 3822 | dicta 3823 | fakir 3824 | knurl 3825 | runny 3826 | unpin 3827 | julep 3828 | globs 3829 | nudes 3830 | sushi 3831 | tacky 3832 | stoke 3833 | kaput 3834 | butch 3835 | hulas 3836 | croft 3837 | achoo 3838 | genii 3839 | nodal 3840 | outgo 3841 | spiel 3842 | viols 3843 | fetid 3844 | cagey 3845 | fudgy 3846 | epoxy 3847 | leggy 3848 | hanky 3849 | lapis 3850 | felon 3851 | beefy 3852 | coots 3853 | melba 3854 | caddy 3855 | segue 3856 | betel 3857 | frizz 3858 | drear 3859 | kooks 3860 | turbo 3861 | hoagy 3862 | moult 3863 | helix 3864 | zonal 3865 | arias 3866 | nosey 3867 | paean 3868 | lacey 3869 | banns 3870 | swain 3871 | fryer 3872 | retch 3873 | tenet 3874 | gigas 3875 | whiny 3876 | ogled 3877 | rumen 3878 | begot 3879 | cruse 3880 | abuts 3881 | riven 3882 | balks 3883 | sines 3884 | sigma 3885 | abase 3886 | ennui 3887 | gores 3888 | unset 3889 | augur 3890 | sated 3891 | odium 3892 | latin 3893 | dings 3894 | moire 3895 | scion 3896 | henna 3897 | kraut 3898 | dicks 3899 | lifer 3900 | prigs 3901 | bebop 3902 | gages 3903 | gazer 3904 | fanny 3905 | gibes 3906 | aural 3907 | tempi 3908 | hooch 3909 | rapes 3910 | snuck 3911 | harts 3912 | techs 3913 | emend 3914 | ninny 3915 | guava 3916 | scarp 3917 | liege 3918 | tufty 3919 | sepia 3920 | tomes 3921 | carob 3922 | emcee 3923 | prams 3924 | poser 3925 | verso 3926 | hubba 3927 | joule 3928 | baize 3929 | blips 3930 | scrim 3931 | cubby 3932 | clave 3933 | winos 3934 | rearm 3935 | liens 3936 | lumen 3937 | chump 3938 | nanny 3939 | trump 3940 | fichu 3941 | chomp 3942 | homos 3943 | purty 3944 | maser 3945 | woosh 3946 | patsy 3947 | shill 3948 | rusks 3949 | avast 3950 | swami 3951 | boded 3952 | ahhhh 3953 | lobed 3954 | natch 3955 | shish 3956 | tansy 3957 | snoot 3958 | payer 3959 | altho 3960 | sappy 3961 | laxer 3962 | hubby 3963 | aegis 3964 | riles 3965 | ditto 3966 | jazzy 3967 | dingo 3968 | quasi 3969 | septa 3970 | peaky 3971 | lorry 3972 | heerd 3973 | bitty 3974 | payee 3975 | seamy 3976 | apses 3977 | imbue 3978 | belie 3979 | chary 3980 | spoof 3981 | phyla 3982 | clime 3983 | babel 3984 | wacky 3985 | sumps 3986 | skids 3987 | khans 3988 | crypt 3989 | inure 3990 | nonce 3991 | outen 3992 | faire 3993 | hooey 3994 | anole 3995 | kazoo 3996 | calve 3997 | limbo 3998 | argot 3999 | ducky 4000 | faker 4001 | vibes 4002 | gassy 4003 | unlit 4004 | nervy 4005 | femme 4006 | biter 4007 | fiche 4008 | boors 4009 | gaffe 4010 | saxes 4011 | recap 4012 | synch 4013 | facie 4014 | dicey 4015 | ouija 4016 | hewer 4017 | legit 4018 | gurus 4019 | edify 4020 | tweak 4021 | caron 4022 | typos 4023 | rerun 4024 | polly 4025 | surds 4026 | hamza 4027 | nulls 4028 | hater 4029 | lefty 4030 | mogul 4031 | mafia 4032 | debug 4033 | pates 4034 | blabs 4035 | splay 4036 | talus 4037 | porno 4038 | moola 4039 | nixed 4040 | kilos 4041 | snide 4042 | horsy 4043 | gesso 4044 | jaggy 4045 | trove 4046 | nixes 4047 | creel 4048 | pater 4049 | iotas 4050 | cadge 4051 | skyed 4052 | hokum 4053 | furze 4054 | ankhs 4055 | curie 4056 | nutsy 4057 | hilum 4058 | remix 4059 | angst 4060 | burls 4061 | jimmy 4062 | veiny 4063 | tryst 4064 | codon 4065 | befog 4066 | gamed 4067 | flume 4068 | axman 4069 | doozy 4070 | lubes 4071 | rheas 4072 | bozos 4073 | butyl 4074 | kelly 4075 | mynah 4076 | jocks 4077 | donut 4078 | avian 4079 | wurst 4080 | chock 4081 | quash 4082 | quals 4083 | hayed 4084 | bombe 4085 | cushy 4086 | spacy 4087 | puked 4088 | leery 4089 | thews 4090 | prink 4091 | amens 4092 | tesla 4093 | intro 4094 | fiver 4095 | frump 4096 | capos 4097 | opine 4098 | coder 4099 | namer 4100 | jowly 4101 | pukes 4102 | haled 4103 | chard 4104 | duffs 4105 | bruin 4106 | reuse 4107 | whang 4108 | toons 4109 | frats 4110 | silty 4111 | telex 4112 | cutup 4113 | nisei 4114 | neato 4115 | decaf 4116 | softy 4117 | bimbo 4118 | adlib 4119 | loony 4120 | shoed 4121 | agues 4122 | peeve 4123 | noway 4124 | gamey 4125 | sarge 4126 | reran 4127 | epact 4128 | potty 4129 | coned 4130 | upend 4131 | narco 4132 | ikats 4133 | whorl 4134 | jinks 4135 | tizzy 4136 | weepy 4137 | posit 4138 | marge 4139 | vegan 4140 | clops 4141 | numbs 4142 | reeks 4143 | rubes 4144 | rower 4145 | biped 4146 | tiffs 4147 | hocus 4148 | hammy 4149 | bunco 4150 | fixit 4151 | tykes 4152 | chaws 4153 | yucky 4154 | hokey 4155 | resew 4156 | maven 4157 | adman 4158 | scuzz 4159 | slogs 4160 | souse 4161 | nacho 4162 | mimed 4163 | melds 4164 | boffo 4165 | debit 4166 | pinup 4167 | vagus 4168 | gulag 4169 | randy 4170 | bosun 4171 | educe 4172 | faxes 4173 | auras 4174 | pesto 4175 | antsy 4176 | betas 4177 | fizzy 4178 | dorky 4179 | snits 4180 | moxie 4181 | thane 4182 | mylar 4183 | nobby 4184 | gamin 4185 | gouty 4186 | esses 4187 | goyim 4188 | paned 4189 | druid 4190 | jades 4191 | rehab 4192 | gofer 4193 | tzars 4194 | octet 4195 | homed 4196 | socko 4197 | dorks 4198 | eared 4199 | anted 4200 | elide 4201 | fazes 4202 | oxbow 4203 | dowse 4204 | situs 4205 | macaw 4206 | scone 4207 | drily 4208 | hyper 4209 | salsa 4210 | mooch 4211 | gated 4212 | unjam 4213 | lipid 4214 | mitre 4215 | venal 4216 | knish 4217 | ritzy 4218 | divas 4219 | torus 4220 | mange 4221 | dimer 4222 | recut 4223 | meson 4224 | wined 4225 | fends 4226 | phage 4227 | fiats 4228 | caulk 4229 | cavil 4230 | panty 4231 | roans 4232 | bilks 4233 | hones 4234 | botch 4235 | estop 4236 | sully 4237 | sooth 4238 | gelds 4239 | ahold 4240 | raper 4241 | pager 4242 | fixer 4243 | infix 4244 | hicks 4245 | tuxes 4246 | plebe 4247 | twits 4248 | abash 4249 | twixt 4250 | wacko 4251 | primp 4252 | nabla 4253 | girts 4254 | miffs 4255 | emote 4256 | xerox 4257 | rebid 4258 | shahs 4259 | rutty 4260 | grout 4261 | grift 4262 | deify 4263 | biddy 4264 | kopek 4265 | semis 4266 | bries 4267 | acmes 4268 | piton 4269 | hussy 4270 | torts 4271 | disco 4272 | whore 4273 | boozy 4274 | gibed 4275 | vamps 4276 | amour 4277 | soppy 4278 | gonzo 4279 | durst 4280 | wader 4281 | tutus 4282 | perms 4283 | catty 4284 | glitz 4285 | brigs 4286 | nerds 4287 | barmy 4288 | gizmo 4289 | owlet 4290 | sayer 4291 | molls 4292 | shard 4293 | whops 4294 | comps 4295 | corer 4296 | colas 4297 | matte 4298 | droid 4299 | ploys 4300 | vapid 4301 | cairn 4302 | deism 4303 | mixup 4304 | yikes 4305 | prosy 4306 | raker 4307 | flubs 4308 | whish 4309 | reify 4310 | craps 4311 | shags 4312 | clone 4313 | hazed 4314 | macho 4315 | recto 4316 | refix 4317 | drams 4318 | biker 4319 | aquas 4320 | porky 4321 | doyen 4322 | exude 4323 | goofs 4324 | divvy 4325 | noels 4326 | jived 4327 | hulky 4328 | cager 4329 | harpy 4330 | oldie 4331 | vivas 4332 | admix 4333 | codas 4334 | zilch 4335 | deist 4336 | orcas 4337 | retro 4338 | pilaf 4339 | parse 4340 | rants 4341 | zingy 4342 | toddy 4343 | chiff 4344 | micro 4345 | veeps 4346 | girly 4347 | nexus 4348 | demos 4349 | bibbs 4350 | antes 4351 | lulus 4352 | gnarl 4353 | zippy 4354 | ivied 4355 | epees 4356 | wimps 4357 | tromp 4358 | grail 4359 | yoyos 4360 | poufs 4361 | hales 4362 | roust 4363 | cabal 4364 | rawer 4365 | pampa 4366 | mosey 4367 | kefir 4368 | burgs 4369 | unmet 4370 | cuspy 4371 | boobs 4372 | boons 4373 | hypes 4374 | dynes 4375 | nards 4376 | lanai 4377 | yogis 4378 | sepal 4379 | quark 4380 | toked 4381 | prate 4382 | ayins 4383 | hawed 4384 | swigs 4385 | vitas 4386 | toker 4387 | doper 4388 | bossa 4389 | linty 4390 | foist 4391 | mondo 4392 | stash 4393 | kayos 4394 | twerp 4395 | zesty 4396 | capon 4397 | wimpy 4398 | rewed 4399 | fungo 4400 | tarot 4401 | frosh 4402 | kabob 4403 | pinko 4404 | redid 4405 | mimeo 4406 | heist 4407 | tarps 4408 | lamas 4409 | sutra 4410 | dinar 4411 | whams 4412 | busty 4413 | spays 4414 | mambo 4415 | nabob 4416 | preps 4417 | odour 4418 | cabby 4419 | conks 4420 | sluff 4421 | dados 4422 | houri 4423 | swart 4424 | balms 4425 | gutsy 4426 | faxed 4427 | egads 4428 | pushy 4429 | retry 4430 | agora 4431 | drubs 4432 | daffy 4433 | chits 4434 | mufti 4435 | karma 4436 | lotto 4437 | toffs 4438 | burps 4439 | deuce 4440 | zings 4441 | kappa 4442 | clads 4443 | doggy 4444 | duper 4445 | scams 4446 | ogler 4447 | mimes 4448 | throe 4449 | zetas 4450 | waled 4451 | promo 4452 | blats 4453 | muffs 4454 | oinks 4455 | viand 4456 | coset 4457 | finks 4458 | faddy 4459 | minis 4460 | snafu 4461 | sauna 4462 | usury 4463 | muxes 4464 | craws 4465 | stats 4466 | condo 4467 | coxes 4468 | loopy 4469 | dorms 4470 | ascot 4471 | dippy 4472 | execs 4473 | dopey 4474 | envoi 4475 | umpty 4476 | gismo 4477 | fazed 4478 | strop 4479 | jives 4480 | slims 4481 | batik 4482 | pings 4483 | sonly 4484 | leggo 4485 | pekoe 4486 | prawn 4487 | luaus 4488 | campy 4489 | oodle 4490 | prexy 4491 | proms 4492 | touts 4493 | ogles 4494 | tweet 4495 | toady 4496 | naiad 4497 | hider 4498 | nuked 4499 | fatso 4500 | sluts 4501 | obits 4502 | narcs 4503 | tyros 4504 | delis 4505 | wooer 4506 | hyped 4507 | poset 4508 | byway 4509 | texas 4510 | scrod 4511 | avows 4512 | futon 4513 | torte 4514 | tuple 4515 | carom 4516 | kebab 4517 | tamps 4518 | jilts 4519 | duals 4520 | artsy 4521 | repro 4522 | modem 4523 | toped 4524 | psych 4525 | sicko 4526 | klutz 4527 | tarns 4528 | coxed 4529 | drays 4530 | cloys 4531 | anded 4532 | piker 4533 | aimer 4534 | suras 4535 | limos 4536 | flack 4537 | hapax 4538 | dutch 4539 | mucky 4540 | shire 4541 | klieg 4542 | staph 4543 | layup 4544 | tokes 4545 | axing 4546 | toper 4547 | duvet 4548 | cowry 4549 | profs 4550 | blahs 4551 | addle 4552 | sudsy 4553 | batty 4554 | coifs 4555 | suety 4556 | gabby 4557 | hafta 4558 | pitas 4559 | gouda 4560 | deice 4561 | taupe 4562 | topes 4563 | duchy 4564 | nitro 4565 | carny 4566 | limey 4567 | orals 4568 | hirer 4569 | taxer 4570 | roils 4571 | ruble 4572 | elate 4573 | dolor 4574 | wryer 4575 | snots 4576 | quais 4577 | coked 4578 | gimel 4579 | gorse 4580 | minas 4581 | goest 4582 | agape 4583 | manta 4584 | jings 4585 | iliac 4586 | admen 4587 | offen 4588 | cills 4589 | offal 4590 | lotta 4591 | bolas 4592 | thwap 4593 | alway 4594 | boggy 4595 | donna 4596 | locos 4597 | belay 4598 | gluey 4599 | bitsy 4600 | mimsy 4601 | hilar 4602 | outta 4603 | vroom 4604 | fetal 4605 | raths 4606 | renal 4607 | dyads 4608 | crocs 4609 | vires 4610 | culpa 4611 | kivas 4612 | feist 4613 | teats 4614 | thats 4615 | yawls 4616 | whens 4617 | abaca 4618 | ohhhh 4619 | aphis 4620 | fusty 4621 | eclat 4622 | perdu 4623 | mayst 4624 | exeat 4625 | molly 4626 | supra 4627 | wetly 4628 | plasm 4629 | buffa 4630 | semen 4631 | pukka 4632 | tagua 4633 | paras 4634 | stoat 4635 | secco 4636 | carte 4637 | haute 4638 | molal 4639 | shads 4640 | forma 4641 | ovoid 4642 | pions 4643 | modus 4644 | bueno 4645 | rheum 4646 | scurf 4647 | parer 4648 | ephah 4649 | doest 4650 | sprue 4651 | flams 4652 | molto 4653 | dieth 4654 | choos 4655 | miked 4656 | bronx 4657 | goopy 4658 | bally 4659 | plumy 4660 | moony 4661 | morts 4662 | yourn 4663 | bipod 4664 | spume 4665 | algal 4666 | ambit 4667 | mucho 4668 | spued 4669 | dozer 4670 | harum 4671 | groat 4672 | skint 4673 | laude 4674 | thrum 4675 | pappy 4676 | oncet 4677 | rimed 4678 | gigue 4679 | limed 4680 | plein 4681 | redly 4682 | humpf 4683 | lites 4684 | seest 4685 | grebe 4686 | absit 4687 | thanx 4688 | pshaw 4689 | yawps 4690 | plats 4691 | payed 4692 | areal 4693 | tilth 4694 | youse 4695 | gwine 4696 | thees 4697 | watsa 4698 | lento 4699 | spitz 4700 | yawed 4701 | gipsy 4702 | sprat 4703 | cornu 4704 | amahs 4705 | blowy 4706 | wahoo 4707 | lubra 4708 | mecum 4709 | whooo 4710 | coqui 4711 | sabra 4712 | edema 4713 | mrads 4714 | dicot 4715 | astro 4716 | kited 4717 | ouzel 4718 | didos 4719 | grata 4720 | bonne 4721 | axmen 4722 | klunk 4723 | summa 4724 | laves 4725 | purls 4726 | yawny 4727 | teary 4728 | masse 4729 | largo 4730 | bazar 4731 | pssst 4732 | sylph 4733 | lulab 4734 | toque 4735 | fugit 4736 | plunk 4737 | ortho 4738 | lucre 4739 | cooch 4740 | whipt 4741 | folky 4742 | tyres 4743 | wheee 4744 | corky 4745 | injun 4746 | solon 4747 | didot 4748 | kerfs 4749 | rayed 4750 | wassa 4751 | chile 4752 | begat 4753 | nippy 4754 | litre 4755 | magna 4756 | rebox 4757 | hydro 4758 | milch 4759 | brent 4760 | gyves 4761 | lazed 4762 | feued 4763 | mavis 4764 | inapt 4765 | baulk 4766 | casus 4767 | scrum 4768 | wised 4769 | fossa 4770 | dower 4771 | kyrie 4772 | bhoys 4773 | scuse 4774 | feuar 4775 | ohmic 4776 | juste 4777 | ukase 4778 | beaux 4779 | tusky 4780 | orate 4781 | musta 4782 | lardy 4783 | intra 4784 | quiff 4785 | epsom 4786 | neath 4787 | ocher 4788 | tared 4789 | homme 4790 | mezzo 4791 | corms 4792 | psoas 4793 | beaky 4794 | terry 4795 | infra 4796 | spivs 4797 | tuans 4798 | belli 4799 | bergs 4800 | anima 4801 | weirs 4802 | mahua 4803 | scops 4804 | manse 4805 | titre 4806 | curia 4807 | kebob 4808 | cycad 4809 | talky 4810 | fucks 4811 | tapis 4812 | amide 4813 | dolce 4814 | sloes 4815 | jakes 4816 | russe 4817 | blash 4818 | tutti 4819 | pruta 4820 | panga 4821 | blebs 4822 | tench 4823 | swarf 4824 | herem 4825 | missy 4826 | merse 4827 | pawky 4828 | limen 4829 | vivre 4830 | chert 4831 | unsee 4832 | tiros 4833 | brack 4834 | foots 4835 | welsh 4836 | fosse 4837 | knops 4838 | ileum 4839 | noire 4840 | firma 4841 | podgy 4842 | laird 4843 | thunk 4844 | shute 4845 | rowan 4846 | shoji 4847 | poesy 4848 | uncap 4849 | fames 4850 | glees 4851 | costa 4852 | turps 4853 | fores 4854 | solum 4855 | imago 4856 | byres 4857 | fondu 4858 | coney 4859 | polis 4860 | dictu 4861 | kraal 4862 | sherd 4863 | mumbo 4864 | wroth 4865 | chars 4866 | unbox 4867 | vacuo 4868 | slued 4869 | weest 4870 | hades 4871 | wiled 4872 | syncs 4873 | muser 4874 | excon 4875 | hoars 4876 | sibyl 4877 | passe 4878 | joeys 4879 | lotsa 4880 | lepta 4881 | shays 4882 | bocks 4883 | endue 4884 | darer 4885 | nones 4886 | ileus 4887 | plash 4888 | busby 4889 | wheal 4890 | buffo 4891 | yobbo 4892 | biles 4893 | poxes 4894 | rooty 4895 | licit 4896 | terce 4897 | bromo 4898 | hayey 4899 | dweeb 4900 | imbed 4901 | saran 4902 | bruit 4903 | punky 4904 | softs 4905 | biffs 4906 | loppy 4907 | agars 4908 | aquae 4909 | livre 4910 | biome 4911 | bunds 4912 | shews 4913 | diems 4914 | ginny 4915 | degum 4916 | polos 4917 | desex 4918 | unman 4919 | dungy 4920 | vitam 4921 | wedgy 4922 | glebe 4923 | apers 4924 | ridgy 4925 | roids 4926 | wifey 4927 | vapes 4928 | whoas 4929 | bunko 4930 | yolky 4931 | ulnas 4932 | reeky 4933 | bodge 4934 | brant 4935 | davit 4936 | deque 4937 | liker 4938 | jenny 4939 | tacts 4940 | fulls 4941 | treap 4942 | ligne 4943 | acked 4944 | refry 4945 | vower 4946 | aargh 4947 | churl 4948 | momma 4949 | gaols 4950 | whump 4951 | arras 4952 | marls 4953 | tiler 4954 | grogs 4955 | memes 4956 | midis 4957 | tided 4958 | haler 4959 | duces 4960 | twiny 4961 | poste 4962 | unrig 4963 | prise 4964 | drabs 4965 | quids 4966 | facer 4967 | spier 4968 | baric 4969 | geoid 4970 | remap 4971 | trier 4972 | gunks 4973 | steno 4974 | stoma 4975 | airer 4976 | ovate 4977 | torah 4978 | apian 4979 | smuts 4980 | pocks 4981 | yurts 4982 | exurb 4983 | defog 4984 | nuder 4985 | bosky 4986 | nimbi 4987 | mothy 4988 | joyed 4989 | labia 4990 | pards 4991 | jammy 4992 | bigly 4993 | faxer 4994 | hoppy 4995 | nurbs 4996 | cotes 4997 | dishy 4998 | vised 4999 | celeb 5000 | pismo 5001 | casas 5002 | withs 5003 | dodgy 5004 | scudi 5005 | mungs 5006 | muons 5007 | ureas 5008 | ioctl 5009 | unhip 5010 | krone 5011 | sager 5012 | verst 5013 | expat 5014 | gronk 5015 | uvula 5016 | shawm 5017 | bilgy 5018 | braes 5019 | cento 5020 | webby 5021 | lippy 5022 | gamic 5023 | lordy 5024 | mazed 5025 | tings 5026 | shoat 5027 | faery 5028 | wirer 5029 | diazo 5030 | carer 5031 | rater 5032 | greps 5033 | rente 5034 | zloty 5035 | viers 5036 | unapt 5037 | poops 5038 | fecal 5039 | kepis 5040 | taxon 5041 | eyers 5042 | wonts 5043 | spina 5044 | stoae 5045 | yenta 5046 | pooey 5047 | buret 5048 | japan 5049 | bedew 5050 | hafts 5051 | selfs 5052 | oared 5053 | herby 5054 | pryer 5055 | oakum 5056 | dinks 5057 | titty 5058 | sepoy 5059 | penes 5060 | fusee 5061 | winey 5062 | gimps 5063 | nihil 5064 | rille 5065 | giber 5066 | ousel 5067 | umiak 5068 | cuppy 5069 | hames 5070 | shits 5071 | azine 5072 | glads 5073 | tacet 5074 | bumph 5075 | coyer 5076 | honky 5077 | gamer 5078 | gooky 5079 | waspy 5080 | sedgy 5081 | bents 5082 | varia 5083 | djinn 5084 | junco 5085 | pubic 5086 | wilco 5087 | lazes 5088 | idyls 5089 | lupus 5090 | rives 5091 | snood 5092 | schmo 5093 | spazz 5094 | finis 5095 | noter 5096 | pavan 5097 | orbed 5098 | bates 5099 | pipet 5100 | baddy 5101 | goers 5102 | shako 5103 | stets 5104 | sebum 5105 | seeth 5106 | lobar 5107 | raver 5108 | ajuga 5109 | riced 5110 | velds 5111 | dribs 5112 | ville 5113 | dhows 5114 | unsew 5115 | halma 5116 | krona 5117 | limby 5118 | jiffs 5119 | treys 5120 | bauds 5121 | pffft 5122 | mimer 5123 | plebs 5124 | caner 5125 | jiber 5126 | cuppa 5127 | washy 5128 | chuff 5129 | unarm 5130 | yukky 5131 | styes 5132 | waker 5133 | flaks 5134 | maces 5135 | rimes 5136 | gimpy 5137 | guano 5138 | liras 5139 | kapok 5140 | scuds 5141 | bwana 5142 | oring 5143 | aider 5144 | prier 5145 | klugy 5146 | monte 5147 | golem 5148 | velar 5149 | firer 5150 | pieta 5151 | umbel 5152 | campo 5153 | unpeg 5154 | fovea 5155 | abeam 5156 | boson 5157 | asker 5158 | goths 5159 | vocab 5160 | vined 5161 | trows 5162 | tikis 5163 | loper 5164 | indie 5165 | boffs 5166 | spang 5167 | grapy 5168 | tater 5169 | ichor 5170 | kilty 5171 | lochs 5172 | supes 5173 | degas 5174 | flics 5175 | torsi 5176 | beths 5177 | weber 5178 | resaw 5179 | lawny 5180 | coven 5181 | mujik 5182 | relet 5183 | therm 5184 | heigh 5185 | shnor 5186 | trued 5187 | zayin 5188 | liest 5189 | barfs 5190 | bassi 5191 | qophs 5192 | roily 5193 | flabs 5194 | punny 5195 | okras 5196 | hanks 5197 | dipso 5198 | nerfs 5199 | fauns 5200 | calla 5201 | pseud 5202 | lurer 5203 | magus 5204 | obeah 5205 | atria 5206 | twink 5207 | palmy 5208 | pocky 5209 | pends 5210 | recta 5211 | plonk 5212 | slaws 5213 | keens 5214 | nicad 5215 | pones 5216 | inker 5217 | whews 5218 | groks 5219 | mosts 5220 | trews 5221 | ulnar 5222 | gyppy 5223 | cocas 5224 | expos 5225 | eruct 5226 | oiler 5227 | vacua 5228 | dreck 5229 | dater 5230 | arums 5231 | tubal 5232 | voxel 5233 | dixit 5234 | beery 5235 | assai 5236 | lades 5237 | actin 5238 | ghoti 5239 | buzzy 5240 | meads 5241 | grody 5242 | ribby 5243 | clews 5244 | creme 5245 | email 5246 | pyxie 5247 | kulak 5248 | bocci 5249 | rived 5250 | duddy 5251 | hoper 5252 | lapin 5253 | wonks 5254 | petri 5255 | phial 5256 | fugal 5257 | holon 5258 | boomy 5259 | duomo 5260 | musos 5261 | shier 5262 | hayer 5263 | porgy 5264 | hived 5265 | litho 5266 | fisty 5267 | stagy 5268 | luvya 5269 | maria 5270 | smogs 5271 | asana 5272 | yogic 5273 | slomo 5274 | fawny 5275 | amine 5276 | wefts 5277 | gonad 5278 | twirp 5279 | brava 5280 | plyer 5281 | fermi 5282 | loges 5283 | niter 5284 | revet 5285 | unate 5286 | gyved 5287 | totty 5288 | zappy 5289 | honer 5290 | giros 5291 | dicer 5292 | calks 5293 | luxes 5294 | monad 5295 | cruft 5296 | quoin 5297 | fumer 5298 | amped 5299 | shlep 5300 | vinca 5301 | yahoo 5302 | vulva 5303 | zooey 5304 | dryad 5305 | nixie 5306 | moper 5307 | iambs 5308 | lunes 5309 | nudie 5310 | limns 5311 | weals 5312 | nohow 5313 | miaow 5314 | gouts 5315 | mynas 5316 | mazer 5317 | kikes 5318 | oxeye 5319 | stoup 5320 | jujus 5321 | debar 5322 | pubes 5323 | taels 5324 | defun 5325 | rands 5326 | blear 5327 | paver 5328 | goosy 5329 | sprog 5330 | oleos 5331 | toffy 5332 | pawer 5333 | maced 5334 | crits 5335 | kluge 5336 | tubed 5337 | sahib 5338 | ganef 5339 | scats 5340 | sputa 5341 | vaned 5342 | acned 5343 | taxol 5344 | plink 5345 | oweth 5346 | tribs 5347 | resay 5348 | boule 5349 | thous 5350 | haply 5351 | glans 5352 | maxis 5353 | bezel 5354 | antis 5355 | porks 5356 | quoit 5357 | alkyd 5358 | glary 5359 | beamy 5360 | hexad 5361 | bonks 5362 | tecum 5363 | kerbs 5364 | filar 5365 | frier 5366 | redux 5367 | abuzz 5368 | fader 5369 | shoer 5370 | couth 5371 | trues 5372 | guyed 5373 | goony 5374 | booky 5375 | fuzes 5376 | hurly 5377 | genet 5378 | hodad 5379 | calix 5380 | filer 5381 | pawls 5382 | iodic 5383 | utero 5384 | henge 5385 | unsay 5386 | liers 5387 | piing 5388 | weald 5389 | sexed 5390 | folic 5391 | poxed 5392 | cunts 5393 | anile 5394 | kiths 5395 | becks 5396 | tatty 5397 | plena 5398 | rebar 5399 | abled 5400 | toyer 5401 | attar 5402 | teaks 5403 | aioli 5404 | awing 5405 | anent 5406 | feces 5407 | redip 5408 | wists 5409 | prats 5410 | mesne 5411 | muter 5412 | smurf 5413 | owest 5414 | bahts 5415 | lossy 5416 | ftped 5417 | hunky 5418 | hoers 5419 | slier 5420 | sicks 5421 | fatly 5422 | delft 5423 | hiver 5424 | himbo 5425 | pengo 5426 | busks 5427 | loxes 5428 | zonks 5429 | ilium 5430 | aport 5431 | ikons 5432 | mulct 5433 | reeve 5434 | civvy 5435 | canna 5436 | barfy 5437 | kaiak 5438 | scudo 5439 | knout 5440 | gaper 5441 | bhang 5442 | pease 5443 | uteri 5444 | lases 5445 | paten 5446 | rasae 5447 | axels 5448 | stoas 5449 | ombre 5450 | styli 5451 | gunky 5452 | hazer 5453 | kenaf 5454 | ahoys 5455 | ammos 5456 | weeny 5457 | urger 5458 | kudzu 5459 | paren 5460 | bolos 5461 | fetor 5462 | nitty 5463 | techy 5464 | lieth 5465 | somas 5466 | darky 5467 | villi 5468 | gluon 5469 | janes 5470 | cants 5471 | farts 5472 | socle 5473 | jinns 5474 | ruing 5475 | slily 5476 | ricer 5477 | hadda 5478 | wowee 5479 | rices 5480 | nerts 5481 | cauls 5482 | swive 5483 | lilty 5484 | micks 5485 | arity 5486 | pasha 5487 | finif 5488 | oinky 5489 | gutty 5490 | tetra 5491 | wises 5492 | wolds 5493 | balds 5494 | picot 5495 | whats 5496 | shiki 5497 | bungs 5498 | snarf 5499 | legos 5500 | dungs 5501 | stogy 5502 | berms 5503 | tangs 5504 | vails 5505 | roods 5506 | morel 5507 | sware 5508 | elans 5509 | latus 5510 | gules 5511 | razer 5512 | doxie 5513 | buena 5514 | overs 5515 | gutta 5516 | zincs 5517 | nates 5518 | kirks 5519 | tikes 5520 | donee 5521 | jerry 5522 | mohel 5523 | ceder 5524 | doges 5525 | unmap 5526 | folia 5527 | rawly 5528 | snark 5529 | topoi 5530 | ceils 5531 | immix 5532 | yores 5533 | diest 5534 | bubba 5535 | pomps 5536 | forky 5537 | turdy 5538 | lawzy 5539 | poohs 5540 | worts 5541 | gloms 5542 | beano 5543 | muley 5544 | barky 5545 | tunny 5546 | auric 5547 | funks 5548 | gaffs 5549 | cordy 5550 | curdy 5551 | lisle 5552 | toric 5553 | soyas 5554 | reman 5555 | mungy 5556 | carpy 5557 | apish 5558 | oaten 5559 | gappy 5560 | aurae 5561 | bract 5562 | rooky 5563 | axled 5564 | burry 5565 | sizer 5566 | proem 5567 | turfy 5568 | impro 5569 | mashy 5570 | miens 5571 | nonny 5572 | olios 5573 | grook 5574 | sates 5575 | agley 5576 | corgi 5577 | dashy 5578 | doser 5579 | dildo 5580 | apsos 5581 | xored 5582 | laker 5583 | playa 5584 | selah 5585 | malty 5586 | dulse 5587 | frigs 5588 | demit 5589 | whoso 5590 | rials 5591 | sawer 5592 | spics 5593 | bedim 5594 | snugs 5595 | fanin 5596 | azoic 5597 | icers 5598 | suers 5599 | wizen 5600 | koine 5601 | topos 5602 | shirr 5603 | rifer 5604 | feral 5605 | laded 5606 | lased 5607 | turds 5608 | swede 5609 | easts 5610 | cozen 5611 | unhit 5612 | pally 5613 | aitch 5614 | sedum 5615 | coper 5616 | ruche 5617 | geeks 5618 | swags 5619 | etext 5620 | algin 5621 | offed 5622 | ninja 5623 | holer 5624 | doter 5625 | toter 5626 | besot 5627 | dicut 5628 | macer 5629 | peens 5630 | pewit 5631 | redox 5632 | poler 5633 | yecch 5634 | fluky 5635 | doeth 5636 | twats 5637 | cruds 5638 | bebug 5639 | bider 5640 | stele 5641 | hexer 5642 | wests 5643 | gluer 5644 | pilau 5645 | abaft 5646 | whelm 5647 | lacer 5648 | inode 5649 | tabus 5650 | gator 5651 | cuing 5652 | refly 5653 | luted 5654 | cukes 5655 | bairn 5656 | bight 5657 | arses 5658 | crump 5659 | loggy 5660 | blini 5661 | spoor 5662 | toyon 5663 | harks 5664 | wazoo 5665 | fenny 5666 | naves 5667 | keyer 5668 | tufas 5669 | morph 5670 | rajas 5671 | typal 5672 | spiff 5673 | oxlip 5674 | unban 5675 | mussy 5676 | finny 5677 | rimer 5678 | login 5679 | molas 5680 | cirri 5681 | huzza 5682 | agone 5683 | unsex 5684 | unwon 5685 | peats 5686 | toile 5687 | zombi 5688 | dewed 5689 | nooky 5690 | alkyl 5691 | ixnay 5692 | dovey 5693 | holey 5694 | cuber 5695 | amyls 5696 | podia 5697 | chino 5698 | apnea 5699 | prims 5700 | lycra 5701 | johns 5702 | primo 5703 | fatwa 5704 | egger 5705 | hempy 5706 | snook 5707 | hying 5708 | fuzed 5709 | barms 5710 | crink 5711 | moots 5712 | yerba 5713 | rhumb 5714 | unarc 5715 | direr 5716 | munge 5717 | eland 5718 | nares 5719 | wrier 5720 | noddy 5721 | atilt 5722 | jukes 5723 | ender 5724 | thens 5725 | unfix 5726 | doggo 5727 | zooks 5728 | diddy 5729 | shmoo 5730 | brusk 5731 | prest 5732 | curer 5733 | pasts 5734 | kelpy 5735 | bocce 5736 | kicky 5737 | taros 5738 | lings 5739 | dicky 5740 | nerdy 5741 | abend 5742 | stela 5743 | biggy 5744 | laved 5745 | baldy 5746 | pubis 5747 | gooks 5748 | wonky 5749 | stied 5750 | hypos 5751 | assed 5752 | spumy 5753 | osier 5754 | roble 5755 | rumba 5756 | biffy 5757 | pupal 5758 | -------------------------------------------------------------------------------- /src/automata/crossword_puzzle.clj: -------------------------------------------------------------------------------- 1 | (ns automata.crossword-puzzle 2 | (:use loco.constraints 3 | loco.core) 4 | (:require [clojure.java.io :as io] 5 | [loco.automata :as a] 6 | [clojure.pprint :as pp] 7 | [clojure.string :as str] 8 | [automata.viz :refer 9 | [viz-dictionary-transitions]])) 10 | 11 | ;; Problem: Fill a crossword-puzzle-style grid with letters. 12 | 13 | ;; CONSTRAINT: Each horizontal or vertical chunk of letters must be a 14 | ;; valid word. Just like a crossword puzzle. 15 | 16 | ;; Here is the grid to fill in: 17 | ;; http://www.webcrosswords.com/images/crossword_puzzle.gif 18 | (def crossword-grid 19 | '[[- - - - * - - - - * * - - - -] 20 | [- - - - * - - - - - * - - - -] 21 | [- - - - * - - - - - * - - - -] 22 | [- - - - - - - * - - - - - - -] 23 | [* - - - - * * - - - - * * * *] 24 | [* * * * - - - - - * - - - - -] 25 | [* - - - * - - - * - - - - - -] 26 | [- - - - * - - - - - * - - - -] 27 | [- - - - - - * - - - * - - - *] 28 | [- - - - - * - - - - - * * * *] 29 | [* * * * - - - - * * - - - - *] 30 | [- - - - - - - * - - - - - - -] 31 | [- - - - * - - - - - * - - - -] 32 | [- - - - * - - - - - * - - - -] 33 | [- - - - * * - - - - * - - - -]]) 34 | 35 | (def white-char '-) 36 | (def black-char '*) 37 | 38 | (def all-words 39 | "118627 words of varying sizes. Contains very obscure words." 40 | (->> (slurp (io/resource "US.dic")) 41 | (re-seq #"[a-z]+"))) 42 | 43 | (def N (count crossword-grid)) 44 | (def M (count (first crossword-grid))) 45 | 46 | ;; VARIABLES: 47 | ;; [:cell i j] = the ascii value of the letter at i,j in the grid 48 | 49 | (def all-vars 50 | (for [i (range N) 51 | j (range M) 52 | :when (= (get-in crossword-grid [i j]) white-char)] 53 | [:cell i j])) 54 | 55 | (def base-model 56 | (for [v all-vars] 57 | ($in v (int \a) (int \z)))) 58 | 59 | ;; Printing utilities 60 | 61 | (defn format-grid 62 | "Takes a Loco solution map and returns a grid of characters" 63 | [sol] 64 | (when sol 65 | (mapv vec 66 | (for [i (range N)] 67 | (for [j (range M)] 68 | (if (= white-char (get-in crossword-grid [i j])) 69 | (char (get sol [:cell i j])) 70 | \*)))))) 71 | 72 | (defn ppr 73 | "Pretty-prints a grid of letters" 74 | [grid] 75 | (doseq [row grid] 76 | (doseq [ch row] 77 | (print ch "")) 78 | (println))) 79 | 80 | (comment 81 | ;; Just to see if our base model works: 82 | (-> (solution base-model) 83 | format-grid 84 | ppr) 85 | ;; This prints out a crossword grid with all "a"s. 86 | ) 87 | 88 | ;; Now to add constraints 89 | 90 | (def across 91 | "All sequences of variables that spell out an \"across\" answer." 92 | (for [i (range N) 93 | j (range M) 94 | ;; this cell is white 95 | :when (= (get-in crossword-grid [i j]) white-char) 96 | ;; previous cell is not white (we're not in the middle of a word) 97 | :when (not= (get-in crossword-grid [i (dec j)]) white-char) 98 | ;; next cell is white (so the word is at least 2 letters long) 99 | :when (= (get-in crossword-grid [i (inc j)]) white-char)] 100 | (for [j2 (range j M) 101 | :while (= (get-in crossword-grid [i j2]) white-char)] 102 | [:cell i j2]))) 103 | 104 | (comment 105 | (take 5 across) 106 | => 107 | (([:cell 0 0] [:cell 0 1] [:cell 0 2] [:cell 0 3]) 108 | ([:cell 0 5] [:cell 0 6] [:cell 0 7] [:cell 0 8]) 109 | ([:cell 0 11] [:cell 0 12] [:cell 0 13] [:cell 0 14]) 110 | ([:cell 1 0] [:cell 1 1] [:cell 1 2] [:cell 1 3]) 111 | ([:cell 1 5] [:cell 1 6] [:cell 1 7] [:cell 1 8] [:cell 1 9]))) 112 | 113 | (def down 114 | "All sequences of variables that spell out a \"down\" answer." 115 | (for [j (range M) 116 | i (range N) 117 | ;; this cell is white 118 | :when (= (get-in crossword-grid [i j]) white-char) 119 | ;; previous cell is not white (we're not in the middle of a word) 120 | :when (not= (get-in crossword-grid [(dec i) j]) white-char) 121 | ;; next cell is white (so the word is at least 2 letters long) 122 | :when (= (get-in crossword-grid [(inc i) j]) white-char)] 123 | (for [i2 (range i N) 124 | :while (= (get-in crossword-grid [i2 j]) white-char)] 125 | [:cell i2 j]))) 126 | 127 | ;; THE WORD CONSTRAINT - NAIVE APPROACH 128 | 129 | (defn word-constraint-slow 130 | [dictionary sequence] 131 | (apply $or 132 | (for [word dictionary 133 | :when (= (count word) (count sequence))] 134 | (apply $and 135 | (for [[letter variable] (map vector word sequence)] 136 | ($= variable (int letter))))))) 137 | 138 | ;; This is really slow: 139 | (comment 140 | (time (-> (solution (concat base-model 141 | (map (partial word-constraint-slow all-words) 142 | (concat across down)))) 143 | format-grid 144 | ppr)) 145 | ;; (doesn't even finish) 146 | ) 147 | 148 | 149 | 150 | 151 | ;; General functions to construct dictionary automata 152 | (defn dictionary->transitions 153 | [dict] 154 | (apply merge-with merge 155 | (for [word dict 156 | i (range (count word))] 157 | {(vec (take i word)) {(int (nth word i)) 158 | (vec (take (inc i) word))}}))) 159 | (defn dictionary->automaton 160 | [dict] 161 | (let [transitions (dictionary->transitions dict) 162 | accepting-states (for [word dict] 163 | (vec word))] 164 | (a/map->automaton transitions 165 | [] 166 | accepting-states))) 167 | 168 | ;; Now we can constrain this automaton onto each sequence of vars: 169 | 170 | (defn word-constraint-fast 171 | [automaton sequence] 172 | ($regular automaton sequence)) 173 | 174 | (defn solve-crossword-with-automaton 175 | [] 176 | (let [_ (println "Generating automata...") 177 | all-word-lengths (distinct (map count all-words)) 178 | automaton-per-length (time (into {} (for [i all-word-lengths] 179 | [i (dictionary->automaton 180 | (filter #(= (count %) i) 181 | all-words))]))) 182 | _ (println "Solving...") 183 | sol (time (solution (concat base-model 184 | (map #(word-constraint-fast 185 | (automaton-per-length (count %)) 186 | %) 187 | (concat across down)))))] 188 | (ppr (format-grid sol)))) 189 | -------------------------------------------------------------------------------- /src/automata/crossword_puzzle_5x5.clj: -------------------------------------------------------------------------------- 1 | (ns automata.crossword-puzzle-5x5 2 | (:use loco.constraints 3 | loco.core) 4 | (:require [clojure.java.io :as io] 5 | [loco.automata :as a] 6 | [clojure.pprint :as pp] 7 | [clojure.string :as str] 8 | [automata.viz :refer 9 | [viz-automaton]])) 10 | 11 | ;; Problem: Fill a 5x5 grid with letters. 12 | 13 | ;; CONSTRAINT: Each row or column must spell a valid word. 14 | 15 | (def all-words 16 | "The 2000 most common 5-letter words." 17 | (->> (slurp (io/resource "sgb-words.txt")) 18 | (re-seq #"[a-z]+") 19 | (take 2000))) 20 | 21 | 22 | 23 | ;; VARIABLES: [:cell i j] for all i and j in [0,4]. 24 | 25 | ;; Each value is the ASCII code of the character it 26 | ;; represents in the grid. 27 | 28 | ;; The starting domain is [97,122]. 29 | 30 | (def all-vars 31 | (for [i (range 5) 32 | j (range 5)] 33 | [:cell i j])) 34 | 35 | (def base-model 36 | (for [v all-vars] 37 | ($in v (int \a) (int \z)))) 38 | 39 | 40 | 41 | ;; The word constraint - slow approach. 42 | 43 | (comment 44 | ;; slow approach: sketch 45 | ($or ($and ($= [:cell 0 0] (int \w)) 46 | ($= [:cell 0 1] (int \h)) 47 | ($= [:cell 0 2] (int \e)) 48 | ($= [:cell 0 3] (int \r)) 49 | ($= [:cell 0 4] (int \e))) 50 | ($and ...) 51 | ...)) 52 | 53 | (defn slow-word-constraint 54 | [cells] 55 | (apply $or 56 | (for [possible-word all-words] 57 | (apply $and 58 | (for [[cell character] 59 | (map vector 60 | cells 61 | possible-word)] 62 | ($= cell (int character))))))) 63 | 64 | 65 | 66 | 67 | 68 | ;; The word constriant - fast approach. 69 | 70 | ;; Sample DFA (parses the dictionary #{"dog" "cat"}) 71 | (def sample-dictionary-transitions 72 | {"" {(int \d) "d" 73 | (int \c) "c"} 74 | "d" {(int \o) "do" 75 | (int \u) "du"} 76 | "do" {(int \g) "dog"} 77 | "c" {(int \a) "ca"} 78 | "ca" {(int \t) "cat"} 79 | "du" {(int \c) "duc"} 80 | "duc" {(int \k) "duck"}}) 81 | (def sample-dictionary-automaton 82 | (a/map->automaton 83 | sample-dictionary-transitions 84 | "" 85 | #{"dog" "cat" "duck"})) 86 | 87 | ;; General functions to construct dictionary automata 88 | (defn dictionary->transitions 89 | [dict] 90 | (apply merge-with merge 91 | (for [word dict 92 | i (range (count word))] 93 | {(subs word 0 i) 94 | {(int (nth word i)) 95 | (subs word 0 (inc i))}}))) 96 | (defn dictionary->automaton 97 | [dict] 98 | (let [transitions (dictionary->transitions dict) 99 | accepting-states (set dict)] 100 | (a/map->automaton transitions 101 | "" 102 | accepting-states))) 103 | 104 | (comment ; ignore this 105 | (viz-automaton 106 | (apply merge-with merge 107 | (for [[src m] (dictionary->transitions ["dog" "cat" "duck"]) 108 | [i dest] m] 109 | {src {(char i) dest}})) 110 | "" 111 | #{"dog" "cat" "duck"})) 112 | 113 | (defn fast-word-constraint 114 | [automaton sequence] 115 | ($regular automaton sequence)) 116 | 117 | (declare format-grid ppr) 118 | (defn solve-crossword-with-automaton 119 | [] 120 | (let [_ (println "Generating automaton...") 121 | a (dictionary->automaton all-words) 122 | _ (println "Solving puzzle...") 123 | model (concat base-model 124 | ;; add an element of asymmetry 125 | ;; so we don't get a 126 | ;; fully symmetric solution 127 | [($!= [:cell 0 4] [:cell 4 0])] 128 | (for [row (partition 5 all-vars)] 129 | (fast-word-constraint a row)) 130 | (for [col (apply map vector 131 | (partition 5 all-vars))] 132 | (fast-word-constraint a col)))] 133 | (ppr (format-grid (solution model))))) 134 | 135 | (defn format-grid 136 | "Takes a Loco solution map and returns a grid of characters" 137 | [sol] 138 | (when sol 139 | (mapv vec 140 | (for [i (range 5)] 141 | (for [j (range 5)] 142 | (char (get sol [:cell i j]))))))) 143 | 144 | (defn ppr 145 | "Pretty-prints a grid of letters" 146 | [grid] 147 | (doseq [row grid] 148 | (doseq [ch row] 149 | (print ch "")) 150 | (println))) 151 | -------------------------------------------------------------------------------- /src/automata/extra.clj: -------------------------------------------------------------------------------- 1 | (ns automata.extra) 2 | 3 | 4 | 5 | 6 | (require '[loco.automata :as a]) 7 | (def non-contiguous "0*1+0+1(0|1)*") 8 | 9 | (defn max-subsequence 10 | "Finds the maximum sub-sequence in coll that matches a regex." 11 | [coll regex] 12 | (let [N (count coll) 13 | ;; each var "bit[i]" is 1 iff coll[i] is included in the 14 | ;; subsequence. We use [:bit i] as the variable names in the 15 | ;; Loco implementation. 16 | bit-vars (for [i (range N)] 17 | [:bit i]) 18 | bit-var-constraints (for [v bit-vars] 19 | ($in v 0 1)) 20 | regex-constraint ($regular (a/string->automaton regex) 21 | bit-vars) 22 | ;; we want to maximize bit[0] * coll[0] + bit[1] * coll[1] ... 23 | var-to-maximize ($scalar bit-vars coll) 24 | model (-> [] 25 | (into bit-var-constraints) 26 | (conj regex-constraint)) 27 | sol (solution model 28 | :maximize var-to-maximize)] 29 | (when sol 30 | (let [bits (mapv #(sol [:bit %]) (range N)) 31 | included-indexes (filter #(= 1 (sol [:bit %])) (range N)) 32 | included-values (map (vec coll) included-indexes)] 33 | {:bits bits 34 | :subseq included-values 35 | :sum (apply + included-values)})))) 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /src/automata/nurse_scheduling.clj: -------------------------------------------------------------------------------- 1 | (ns automata.nurse-scheduling 2 | (:use loco.constraints 3 | loco.core) 4 | (:require [clojure.java.io :as io] 5 | [loco.automata :as a] 6 | [clojure.pprint :as pp] 7 | [clojure.string :as str] 8 | [automata.viz :refer [viz-automaton 9 | transform-inputs]])) 10 | 11 | ;; (This example can be found on the MiniZinc tutorial: 12 | ;; http://www.minizinc.org/downloads/doc-latest/minizinc-tute.pdf) 13 | 14 | ;; Problem: Determine seven nurses' schedules across 10 days. 15 | 16 | ;; Each nurse can have a day shift, or night shift, or no shifts on a 17 | ;; given day. 18 | 19 | ;; CONSTRAINT #1: There must be 3 nurses on day shifts and 2 nurses on 20 | ;; night shifts on any given date. 21 | ;; CONSTRAINT #2: A nurse can't work more than 3 dates in a row. 22 | ;; CONSTRAINT #3: A nurse can't do more than 2 night shifts in a row. 23 | 24 | (comment 25 | ;; Example solution: 26 | +--------+--+--+--+--+--+--+--+--+--+--+ 27 | | |D0|D1|D2|D3|D4|D5|D6|D7|D8|D9| 28 | +--------+--+--+--+--+--+--+--+--+--+--+ 29 | |Nurse 0 |d |d |d | |d |d |d | |n |n | 30 | +--------+--+--+--+--+--+--+--+--+--+--+ 31 | |Nurse 1 |d |d |d | |d |d |d | |n |n | 32 | +--------+--+--+--+--+--+--+--+--+--+--+ 33 | |Nurse 2 |d |d | |d |d |n | |n |d |d | 34 | +--------+--+--+--+--+--+--+--+--+--+--+ 35 | |Nurse 3 |n |n | |d |n |d | |d |d |d | 36 | +--------+--+--+--+--+--+--+--+--+--+--+ 37 | |Nurse 4 |n | |d |n |n | |d |d |d | | 38 | +--------+--+--+--+--+--+--+--+--+--+--+ 39 | |Nurse 5 | |n |n |d | |n |n |d | |d | 40 | +--------+--+--+--+--+--+--+--+--+--+--+ 41 | |Nurse 6 | | |n |n | | |n |n | | | 42 | +--------+--+--+--+--+--+--+--+--+--+--+ 43 | ;; (d = 1, n = 2, blank = 0) 44 | ) 45 | 46 | (def n-nurses 7) 47 | (def n-days 10) 48 | 49 | (def minimum-day-shifts 3) 50 | (def minimum-night-shifts 2) 51 | 52 | ;; VARIABLES: 53 | ;; [:shift i j] = what kind of shift nurse i does on day j 54 | ;; 1 = day, 2 = night, 0 = nothing 55 | 56 | ;; there are 7 (nurses) * 10 (days) = 70 variables.- 57 | 58 | (def day 1) 59 | (def night 2) 60 | (def nothing 0) 61 | 62 | (def shift-transition-map 63 | {:q1 {nothing :q1 64 | day :q2 65 | night :q3} 66 | :q2 {nothing :q1 67 | day :q4 68 | night :q4} 69 | :q3 {nothing :q1 70 | day :q4 71 | night :q5} 72 | :q4 {nothing :q1 73 | day :q6 74 | night :q6} 75 | :q5 {nothing :q1 76 | day :q6} 77 | :q6 {nothing :q1}}) 78 | 79 | (def shift-automaton 80 | (a/map->automaton 81 | shift-transition-map 82 | :q1 83 | #{:q1 :q2 :q3 :q4 :q5 :q6})) 84 | 85 | (comment 86 | (viz-automaton 87 | (transform-inputs shift-transition-map 88 | {night 'n 89 | day 'd 90 | nothing (with-meta 'o {:dotted true})}) 91 | :q1 92 | #{:q1 :q2 :q3 :q4 :q5 :q6})) 93 | 94 | (defn all-shift-vars [] 95 | (for [n (range n-nurses) 96 | d (range n-days)] 97 | [:shift n d])) 98 | 99 | (defn shift-var-declarations [] 100 | (for [v (all-shift-vars)] 101 | ($in v [nothing day night]))) 102 | 103 | (defn nurse-constraint 104 | [nurse-id] 105 | ;; This automaton covers constraint #2 and #3 106 | (let [row (for [d (range n-days)] 107 | [:shift nurse-id d])] 108 | ($regular shift-automaton row))) 109 | 110 | (defn day-constraint 111 | [day-id] 112 | (let [column (for [n (range n-nurses)] 113 | [:shift n day-id])] 114 | ($cardinality column {day minimum-day-shifts 115 | night minimum-night-shifts 116 | nothing (- n-nurses minimum-day-shifts minimum-night-shifts)} 117 | :closed true))) 118 | 119 | (defn solve-nurse-shifts 120 | [] 121 | (let [model (concat (shift-var-declarations) 122 | (map nurse-constraint (range n-nurses)) 123 | (map day-constraint (range n-days))) 124 | sol (solution model)] 125 | (when sol 126 | (println 127 | (str/join "\n" 128 | (for [n (range n-nurses)] 129 | (str/join " " 130 | (for [d (range n-days)] 131 | ({nothing '-, day 'd, night 'n} 132 | (sol [:shift n d])))))))))) 133 | -------------------------------------------------------------------------------- /src/automata/viz.clj: -------------------------------------------------------------------------------- 1 | (ns automata.viz 2 | (:use rhizome.viz) 3 | (:require [clojure.string :as str])) 4 | 5 | (defn viz-automaton 6 | [transition-map 7 | start-state 8 | final-states] 9 | (view-graph 10 | (distinct (apply concat 11 | ["start"] 12 | (keys transition-map) 13 | (map vals (vals transition-map)))) 14 | (into {"start" [start-state]} 15 | (for [[k v] transition-map] 16 | [k (distinct (vals v))])) 17 | :edge->descriptor 18 | (fn [src dest] 19 | (if (= src "start") 20 | {} 21 | (let [m (transition-map src) 22 | inputs (map key (filter #(= dest (val %)) 23 | (seq m)))] 24 | {:label (str/join "," inputs) 25 | :style (when (some :dotted (map meta inputs)) 26 | "dashed")}))) 27 | :node->descriptor (fn [n] 28 | {:label n 29 | :shape (cond 30 | (contains? final-states n) 31 | :doublecircle 32 | (= "start" n) 33 | :none 34 | :else 35 | :circle)}) 36 | :options {:rankdir "LR"})) 37 | 38 | (defn transform-inputs 39 | [transition-map f] 40 | (apply merge-with merge 41 | (for [[src m] transition-map 42 | [i dest] m] 43 | {src {(f i) dest}}))) 44 | -------------------------------------------------------------------------------- /test/automata/core_test.clj: -------------------------------------------------------------------------------- 1 | (ns automata.core-test 2 | (:require [clojure.test :refer :all] 3 | [automata.core :refer :all])) 4 | 5 | (deftest a-test 6 | (testing "FIXME, I fail." 7 | (is (= 0 1)))) 8 | --------------------------------------------------------------------------------