13 "import collections\n",
30 "output_type": "execute_result"
34 "words = [w.strip() for w in open('08-rooms.txt').readlines()]\n",
60 "output_type": "execute_result"
75 "def adjacents_explicit(word):\n",
77 " for i in range(len(word)):\n",
78 " for l in string.ascii_lowercase:\n",
79 " if l != word[i]:\n",
80 " neighbours.append(word[0:i] + l + word[i+1:])\n",
92 "def adjacents(word):\n",
93 " return [word[0:i] + l + word[i+1:]\n",
94 " for i in range(len(word))\n",
95 " for l in string.ascii_lowercase\n",
101 "execution_count": 6,
107 "neighbours = {w: [n for n in adjacents(w) if n in words]\n",
113 "execution_count": 7,
122 "execution_count": 7,
124 "output_type": "execute_result"
133 "execution_count": 8,
139 "['axle', 'abbe', 'ably']"
142 "execution_count": 8,
144 "output_type": "execute_result"
153 "execution_count": 9,
159 "def distance(w1, w2):\n",
160 " return sum(1 for i in range(len(w1))\n",
161 " if w1[i] != w2[i])"
166 "execution_count": 10,
175 "execution_count": 10,
177 "output_type": "execute_result"
181 "distance('abbe', 'abbe')"
186 "execution_count": 11,
192 "def extend(chain, closed=None):\n",
194 " nbrs = set(neighbours[chain[-1]]) - closed\n",
196 " nbrs = neighbours[chain[-1]]\n",
197 " return [chain + [s] for s in nbrs\n",
198 " if s not in chain]"
203 "execution_count": 12,
212 "execution_count": 12,
214 "output_type": "execute_result"
223 "execution_count": 13,
229 "[['abbe', 'able', 'axle'], ['abbe', 'able', 'ably']]"
232 "execution_count": 13,
234 "output_type": "execute_result"
238 "extend(['abbe', 'able'])"
243 "execution_count": 14,
249 "[['abbe', 'able', 'ably', 'ally']]"
252 "execution_count": 14,
254 "output_type": "execute_result"
258 "extend(['abbe', 'able', 'ably'])"
263 "execution_count": 15,
269 "def bfs_search(start, goal, debug=False):\n",
270 " agenda = [[start]]\n",
271 " finished = False\n",
272 " while not finished and agenda:\n",
273 " current = agenda[0]\n",
276 " if current[-1] == goal:\n",
277 " finished = True\n",
279 " successors = extend(current)\n",
280 " agenda = agenda[1:] + successors\n",
289 "execution_count": 16,
295 "def bfs_search_closed(start, goal, debug=False):\n",
296 " agenda = [[start]]\n",
298 " finished = False\n",
299 " while not finished and agenda:\n",
300 " current = agenda[0]\n",
303 " if current[-1] == goal:\n",
304 " finished = True\n",
306 " closed.add(current[-1])\n",
307 " successors = extend(current, closed)\n",
308 " agenda = agenda[1:] + successors\n",
317 "execution_count": 17,
322 "output_type": "stream",
325 "['abbe', 'able']\n",
326 "['abbe', 'able', 'axle']\n",
327 "['abbe', 'able', 'ably']\n",
328 "['abbe', 'able', 'ably', 'ally']\n"
334 "['abbe', 'able', 'ably', 'ally']"
337 "execution_count": 17,
339 "output_type": "execute_result"
343 "bfs_search('abbe', 'ally', debug=True)"
348 "execution_count": 18,
354 "def dfs_search(start, goal, debug=False):\n",
355 " agenda = [[start]]\n",
356 " finished = False\n",
357 " while not finished and agenda:\n",
358 " current = agenda[0]\n",
361 " if current[-1] == goal:\n",
362 " finished = True\n",
364 " successors = extend(current)\n",
365 " agenda = successors + agenda[1:]\n",
374 "execution_count": 19,
379 "output_type": "stream",
382 "['abbe', 'able']\n",
383 "['abbe', 'able', 'axle']\n",
384 "['abbe', 'able', 'ably']\n",
385 "['abbe', 'able', 'ably', 'ally']\n"
391 "['abbe', 'able', 'ably', 'ally']"
394 "execution_count": 19,
396 "output_type": "execute_result"
400 "dfs_search('abbe', 'ally', debug=True)"
405 "execution_count": 20,
410 "output_type": "stream",
413 "['cart', 'dart']\n",
414 "['cart', 'hart']\n",
415 "['cart', 'mart']\n",
416 "['cart', 'part']\n",
417 "['cart', 'tart']\n",
418 "['cart', 'wart']\n",
419 "['cart', 'curt']\n",
420 "['cart', 'cant']\n",
421 "['cart', 'cast']\n",
422 "['cart', 'card']\n",
423 "['cart', 'care']\n",
424 "['cart', 'carp']\n",
425 "['cart', 'cars']\n",
426 "['cart', 'dart', 'hart']\n",
427 "['cart', 'dart', 'mart']\n",
428 "['cart', 'dart', 'part']\n",
429 "['cart', 'dart', 'tart']\n",
430 "['cart', 'dart', 'wart']\n",
431 "['cart', 'dart', 'dirt']\n",
432 "['cart', 'dart', 'daft']\n",
433 "['cart', 'dart', 'dare']\n",
434 "['cart', 'dart', 'dark']\n",
435 "['cart', 'dart', 'darn']\n",
436 "['cart', 'hart', 'dart']\n",
437 "['cart', 'hart', 'mart']\n",
438 "['cart', 'hart', 'part']\n",
439 "['cart', 'hart', 'tart']\n",
440 "['cart', 'hart', 'wart']\n",
441 "['cart', 'hart', 'hurt']\n",
442 "['cart', 'hart', 'haft']\n",
443 "['cart', 'hart', 'halt']\n",
444 "['cart', 'hart', 'hard']\n",
445 "['cart', 'hart', 'hare']\n",
446 "['cart', 'hart', 'hark']\n",
447 "['cart', 'hart', 'harm']\n",
448 "['cart', 'hart', 'harp']\n",
449 "['cart', 'mart', 'dart']\n",
450 "['cart', 'mart', 'hart']\n",
451 "['cart', 'mart', 'part']\n",
452 "['cart', 'mart', 'tart']\n",
453 "['cart', 'mart', 'wart']\n",
454 "['cart', 'mart', 'malt']\n",
455 "['cart', 'mart', 'mast']\n",
456 "['cart', 'mart', 'matt']\n",
457 "['cart', 'mart', 'mare']\n",
458 "['cart', 'mart', 'mark']\n",
459 "['cart', 'mart', 'mars']\n",
460 "['cart', 'part', 'dart']\n",
461 "['cart', 'part', 'hart']\n",
462 "['cart', 'part', 'mart']\n",
463 "['cart', 'part', 'tart']\n",
464 "['cart', 'part', 'wart']\n",
465 "['cart', 'part', 'pert']\n",
466 "['cart', 'part', 'port']\n",
467 "['cart', 'part', 'pact']\n",
468 "['cart', 'part', 'pant']\n",
469 "['cart', 'part', 'past']\n",
470 "['cart', 'part', 'pare']\n",
471 "['cart', 'part', 'park']\n",
472 "['cart', 'part', 'pars']\n",
473 "['cart', 'tart', 'dart']\n",
474 "['cart', 'tart', 'hart']\n",
475 "['cart', 'tart', 'mart']\n",
476 "['cart', 'tart', 'part']\n",
477 "['cart', 'tart', 'wart']\n",
478 "['cart', 'tart', 'tort']\n",
479 "['cart', 'tart', 'tact']\n",
480 "['cart', 'tart', 'taut']\n",
481 "['cart', 'tart', 'tare']\n",
482 "['cart', 'tart', 'taro']\n",
483 "['cart', 'tart', 'tarp']\n",
484 "['cart', 'tart', 'tars']\n",
485 "['cart', 'wart', 'dart']\n",
486 "['cart', 'wart', 'hart']\n",
487 "['cart', 'wart', 'mart']\n",
488 "['cart', 'wart', 'part']\n",
489 "['cart', 'wart', 'tart']\n",
490 "['cart', 'wart', 'waft']\n",
491 "['cart', 'wart', 'wait']\n",
492 "['cart', 'wart', 'want']\n",
493 "['cart', 'wart', 'watt']\n",
494 "['cart', 'wart', 'ward']\n",
495 "['cart', 'wart', 'ware']\n",
496 "['cart', 'wart', 'warm']\n",
497 "['cart', 'wart', 'warn']\n",
498 "['cart', 'wart', 'warp']\n",
499 "['cart', 'wart', 'wars']\n",
500 "['cart', 'wart', 'wary']\n",
501 "['cart', 'curt', 'hurt']\n",
502 "['cart', 'curt', 'cult']\n",
503 "['cart', 'curt', 'curb']\n",
504 "['cart', 'curt', 'curd']\n",
505 "['cart', 'curt', 'cure']\n",
506 "['cart', 'curt', 'curl']\n",
507 "['cart', 'curt', 'curs']\n",
508 "['cart', 'cant', 'pant']\n",
509 "['cart', 'cant', 'rant']\n",
510 "['cart', 'cant', 'want']\n",
511 "['cart', 'cant', 'cent']\n",
512 "['cart', 'cant', 'cast']\n",
513 "['cart', 'cant', 'cane']\n",
514 "['cart', 'cant', 'cans']\n",
515 "['cart', 'cast', 'bast']\n",
516 "['cart', 'cast', 'east']\n",
517 "['cart', 'cast', 'fast']\n",
518 "['cart', 'cast', 'last']\n",
519 "['cart', 'cast', 'mast']\n",
520 "['cart', 'cast', 'past']\n",
521 "['cart', 'cast', 'vast']\n",
522 "['cart', 'cast', 'cost']\n",
523 "['cart', 'cast', 'cyst']\n",
524 "['cart', 'cast', 'cant']\n",
525 "['cart', 'cast', 'case']\n",
526 "['cart', 'cast', 'cash']\n",
527 "['cart', 'cast', 'cask']\n",
528 "['cart', 'card', 'bard']\n",
529 "['cart', 'card', 'hard']\n",
530 "['cart', 'card', 'lard']\n",
531 "['cart', 'card', 'ward']\n",
532 "['cart', 'card', 'yard']\n",
533 "['cart', 'card', 'cord']\n",
534 "['cart', 'card', 'curd']\n",
535 "['cart', 'card', 'care']\n",
536 "['cart', 'card', 'carp']\n",
537 "['cart', 'card', 'cars']\n",
538 "['cart', 'care', 'bare']\n",
539 "['cart', 'care', 'dare']\n",
540 "['cart', 'care', 'fare']\n",
541 "['cart', 'care', 'hare']\n",
542 "['cart', 'care', 'mare']\n",
543 "['cart', 'care', 'pare']\n",
544 "['cart', 'care', 'rare']\n",
545 "['cart', 'care', 'tare']\n",
546 "['cart', 'care', 'ware']\n",
547 "['cart', 'care', 'core']\n",
548 "['cart', 'care', 'cure']\n",
549 "['cart', 'care', 'cafe']\n",
550 "['cart', 'care', 'cage']\n",
551 "['cart', 'care', 'cake']\n",
552 "['cart', 'care', 'came']\n",
553 "['cart', 'care', 'cane']\n",
554 "['cart', 'care', 'cape']\n",
555 "['cart', 'care', 'case']\n",
556 "['cart', 'care', 'cave']\n",
557 "['cart', 'care', 'card']\n",
558 "['cart', 'care', 'carp']\n",
559 "['cart', 'care', 'cars']\n",
560 "['cart', 'carp', 'harp']\n",
561 "['cart', 'carp', 'tarp']\n",
562 "['cart', 'carp', 'warp']\n",
563 "['cart', 'carp', 'camp']\n",
564 "['cart', 'carp', 'card']\n",
565 "['cart', 'carp', 'care']\n",
566 "['cart', 'carp', 'cars']\n",
567 "['cart', 'cars', 'bars']\n",
568 "['cart', 'cars', 'ears']\n",
569 "['cart', 'cars', 'jars']\n",
570 "['cart', 'cars', 'mars']\n",
571 "['cart', 'cars', 'oars']\n",
572 "['cart', 'cars', 'pars']\n",
573 "['cart', 'cars', 'tars']\n",
574 "['cart', 'cars', 'wars']\n",
575 "['cart', 'cars', 'curs']\n",
576 "['cart', 'cars', 'cabs']\n",
577 "['cart', 'cars', 'cads']\n",
578 "['cart', 'cars', 'cams']\n",
579 "['cart', 'cars', 'cans']\n",
580 "['cart', 'cars', 'caps']\n",
581 "['cart', 'cars', 'cats']\n",
582 "['cart', 'cars', 'caws']\n",
583 "['cart', 'cars', 'card']\n",
584 "['cart', 'cars', 'care']\n",
585 "['cart', 'cars', 'carp']\n",
586 "['cart', 'dart', 'hart', 'mart']\n",
587 "['cart', 'dart', 'hart', 'part']\n",
588 "['cart', 'dart', 'hart', 'tart']\n",
589 "['cart', 'dart', 'hart', 'wart']\n",
590 "['cart', 'dart', 'hart', 'hurt']\n",
591 "['cart', 'dart', 'hart', 'haft']\n",
592 "['cart', 'dart', 'hart', 'halt']\n",
593 "['cart', 'dart', 'hart', 'hard']\n",
594 "['cart', 'dart', 'hart', 'hare']\n",
595 "['cart', 'dart', 'hart', 'hark']\n",
596 "['cart', 'dart', 'hart', 'harm']\n",
597 "['cart', 'dart', 'hart', 'harp']\n",
598 "['cart', 'dart', 'mart', 'hart']\n",
599 "['cart', 'dart', 'mart', 'part']\n",
600 "['cart', 'dart', 'mart', 'tart']\n",
601 "['cart', 'dart', 'mart', 'wart']\n",
602 "['cart', 'dart', 'mart', 'malt']\n",
603 "['cart', 'dart', 'mart', 'mast']\n",
604 "['cart', 'dart', 'mart', 'matt']\n",
605 "['cart', 'dart', 'mart', 'mare']\n",
606 "['cart', 'dart', 'mart', 'mark']\n",
607 "['cart', 'dart', 'mart', 'mars']\n",
608 "['cart', 'dart', 'part', 'hart']\n",
609 "['cart', 'dart', 'part', 'mart']\n",
610 "['cart', 'dart', 'part', 'tart']\n",
611 "['cart', 'dart', 'part', 'wart']\n",
612 "['cart', 'dart', 'part', 'pert']\n",
613 "['cart', 'dart', 'part', 'port']\n",
614 "['cart', 'dart', 'part', 'pact']\n",
615 "['cart', 'dart', 'part', 'pant']\n",
616 "['cart', 'dart', 'part', 'past']\n",
617 "['cart', 'dart', 'part', 'pare']\n",
618 "['cart', 'dart', 'part', 'park']\n",
619 "['cart', 'dart', 'part', 'pars']\n",
620 "['cart', 'dart', 'tart', 'hart']\n",
621 "['cart', 'dart', 'tart', 'mart']\n",
622 "['cart', 'dart', 'tart', 'part']\n",
623 "['cart', 'dart', 'tart', 'wart']\n",
624 "['cart', 'dart', 'tart', 'tort']\n",
625 "['cart', 'dart', 'tart', 'tact']\n",
626 "['cart', 'dart', 'tart', 'taut']\n",
627 "['cart', 'dart', 'tart', 'tare']\n",
628 "['cart', 'dart', 'tart', 'taro']\n",
629 "['cart', 'dart', 'tart', 'tarp']\n",
630 "['cart', 'dart', 'tart', 'tars']\n",
631 "['cart', 'dart', 'wart', 'hart']\n",
632 "['cart', 'dart', 'wart', 'mart']\n",
633 "['cart', 'dart', 'wart', 'part']\n",
634 "['cart', 'dart', 'wart', 'tart']\n",
635 "['cart', 'dart', 'wart', 'waft']\n",
636 "['cart', 'dart', 'wart', 'wait']\n",
637 "['cart', 'dart', 'wart', 'want']\n",
638 "['cart', 'dart', 'wart', 'watt']\n",
639 "['cart', 'dart', 'wart', 'ward']\n",
640 "['cart', 'dart', 'wart', 'ware']\n",
641 "['cart', 'dart', 'wart', 'warm']\n",
642 "['cart', 'dart', 'wart', 'warn']\n",
643 "['cart', 'dart', 'wart', 'warp']\n",
644 "['cart', 'dart', 'wart', 'wars']\n",
645 "['cart', 'dart', 'wart', 'wary']\n",
646 "['cart', 'dart', 'dirt', 'girt']\n",
647 "['cart', 'dart', 'dirt', 'diet']\n",
648 "['cart', 'dart', 'dirt', 'dint']\n",
649 "['cart', 'dart', 'dirt', 'dire']\n",
650 "['cart', 'dart', 'dirt', 'dirk']\n",
651 "['cart', 'dart', 'daft', 'haft']\n",
652 "['cart', 'dart', 'daft', 'raft']\n",
653 "['cart', 'dart', 'daft', 'waft']\n",
654 "['cart', 'dart', 'daft', 'deft']\n",
655 "['cart', 'dart', 'dare', 'bare']\n",
656 "['cart', 'dart', 'dare', 'care']\n",
657 "['cart', 'dart', 'dare', 'fare']\n",
658 "['cart', 'dart', 'dare', 'hare']\n",
659 "['cart', 'dart', 'dare', 'mare']\n",
660 "['cart', 'dart', 'dare', 'pare']\n",
661 "['cart', 'dart', 'dare', 'rare']\n",
662 "['cart', 'dart', 'dare', 'tare']\n",
663 "['cart', 'dart', 'dare', 'ware']\n",
664 "['cart', 'dart', 'dare', 'dire']\n",
665 "['cart', 'dart', 'dare', 'dale']\n",
666 "['cart', 'dart', 'dare', 'dame']\n",
667 "['cart', 'dart', 'dare', 'date']\n",
668 "['cart', 'dart', 'dare', 'daze']\n",
669 "['cart', 'dart', 'dare', 'dark']\n",
670 "['cart', 'dart', 'dare', 'darn']\n",
671 "['cart', 'dart', 'dark', 'bark']\n",
672 "['cart', 'dart', 'dark', 'hark']\n",
673 "['cart', 'dart', 'dark', 'lark']\n",
674 "['cart', 'dart', 'dark', 'mark']\n",
675 "['cart', 'dart', 'dark', 'nark']\n",
676 "['cart', 'dart', 'dark', 'park']\n",
677 "['cart', 'dart', 'dark', 'dirk']\n",
678 "['cart', 'dart', 'dark', 'dork']\n",
679 "['cart', 'dart', 'dark', 'dank']\n",
680 "['cart', 'dart', 'dark', 'dare']\n",
681 "['cart', 'dart', 'dark', 'darn']\n",
682 "['cart', 'dart', 'darn', 'barn']\n",
683 "['cart', 'dart', 'darn', 'earn']\n",
684 "['cart', 'dart', 'darn', 'warn']\n",
685 "['cart', 'dart', 'darn', 'yarn']\n",
686 "['cart', 'dart', 'darn', 'damn']\n",
687 "['cart', 'dart', 'darn', 'dawn']\n",
688 "['cart', 'dart', 'darn', 'dare']\n",
689 "['cart', 'dart', 'darn', 'dark']\n",
690 "['cart', 'hart', 'dart', 'mart']\n",
691 "['cart', 'hart', 'dart', 'part']\n",
692 "['cart', 'hart', 'dart', 'tart']\n",
693 "['cart', 'hart', 'dart', 'wart']\n",
694 "['cart', 'hart', 'dart', 'dirt']\n",
695 "['cart', 'hart', 'dart', 'daft']\n",
696 "['cart', 'hart', 'dart', 'dare']\n",
697 "['cart', 'hart', 'dart', 'dark']\n",
698 "['cart', 'hart', 'dart', 'darn']\n",
699 "['cart', 'hart', 'mart', 'dart']\n",
700 "['cart', 'hart', 'mart', 'part']\n",
701 "['cart', 'hart', 'mart', 'tart']\n",
702 "['cart', 'hart', 'mart', 'wart']\n",
703 "['cart', 'hart', 'mart', 'malt']\n",
704 "['cart', 'hart', 'mart', 'mast']\n",
705 "['cart', 'hart', 'mart', 'matt']\n",
706 "['cart', 'hart', 'mart', 'mare']\n",
707 "['cart', 'hart', 'mart', 'mark']\n",
708 "['cart', 'hart', 'mart', 'mars']\n",
709 "['cart', 'hart', 'part', 'dart']\n",
710 "['cart', 'hart', 'part', 'mart']\n",
711 "['cart', 'hart', 'part', 'tart']\n",
712 "['cart', 'hart', 'part', 'wart']\n",
713 "['cart', 'hart', 'part', 'pert']\n",
714 "['cart', 'hart', 'part', 'port']\n",
715 "['cart', 'hart', 'part', 'pact']\n",
716 "['cart', 'hart', 'part', 'pant']\n",
717 "['cart', 'hart', 'part', 'past']\n",
718 "['cart', 'hart', 'part', 'pare']\n",
719 "['cart', 'hart', 'part', 'park']\n",
720 "['cart', 'hart', 'part', 'pars']\n",
721 "['cart', 'hart', 'tart', 'dart']\n",
722 "['cart', 'hart', 'tart', 'mart']\n",
723 "['cart', 'hart', 'tart', 'part']\n",
724 "['cart', 'hart', 'tart', 'wart']\n",
725 "['cart', 'hart', 'tart', 'tort']\n",
726 "['cart', 'hart', 'tart', 'tact']\n",
727 "['cart', 'hart', 'tart', 'taut']\n",
728 "['cart', 'hart', 'tart', 'tare']\n",
729 "['cart', 'hart', 'tart', 'taro']\n",
730 "['cart', 'hart', 'tart', 'tarp']\n",
731 "['cart', 'hart', 'tart', 'tars']\n",
732 "['cart', 'hart', 'wart', 'dart']\n",
733 "['cart', 'hart', 'wart', 'mart']\n",
734 "['cart', 'hart', 'wart', 'part']\n",
735 "['cart', 'hart', 'wart', 'tart']\n",
736 "['cart', 'hart', 'wart', 'waft']\n",
737 "['cart', 'hart', 'wart', 'wait']\n",
738 "['cart', 'hart', 'wart', 'want']\n",
739 "['cart', 'hart', 'wart', 'watt']\n",
740 "['cart', 'hart', 'wart', 'ward']\n",
741 "['cart', 'hart', 'wart', 'ware']\n",
742 "['cart', 'hart', 'wart', 'warm']\n",
743 "['cart', 'hart', 'wart', 'warn']\n",
744 "['cart', 'hart', 'wart', 'warp']\n",
745 "['cart', 'hart', 'wart', 'wars']\n",
746 "['cart', 'hart', 'wart', 'wary']\n",
747 "['cart', 'hart', 'hurt', 'curt']\n",
748 "['cart', 'hart', 'hurt', 'hunt']\n",
749 "['cart', 'hart', 'hurt', 'hurl']\n",
750 "['cart', 'hart', 'haft', 'daft']\n",
751 "['cart', 'hart', 'haft', 'raft']\n",
752 "['cart', 'hart', 'haft', 'waft']\n",
753 "['cart', 'hart', 'haft', 'heft']\n",
754 "['cart', 'hart', 'haft', 'halt']\n",
755 "['cart', 'hart', 'halt', 'malt']\n",
756 "['cart', 'hart', 'halt', 'salt']\n",
757 "['cart', 'hart', 'halt', 'hilt']\n",
758 "['cart', 'hart', 'halt', 'haft']\n",
759 "['cart', 'hart', 'halt', 'hale']\n",
760 "['cart', 'hart', 'halt', 'half']\n",
761 "['cart', 'hart', 'halt', 'hall']\n",
762 "['cart', 'hart', 'halt', 'halo']\n",
763 "['cart', 'hart', 'hard', 'bard']\n",
764 "['cart', 'hart', 'hard', 'card']\n",
765 "['cart', 'hart', 'hard', 'lard']\n",
766 "['cart', 'hart', 'hard', 'ward']\n",
767 "['cart', 'hart', 'hard', 'yard']\n",
768 "['cart', 'hart', 'hard', 'herd']\n",
769 "['cart', 'hart', 'hard', 'hand']\n",
770 "['cart', 'hart', 'hard', 'hare']\n",
771 "['cart', 'hart', 'hard', 'hark']\n",
772 "['cart', 'hart', 'hard', 'harm']\n",
773 "['cart', 'hart', 'hard', 'harp']\n",
774 "['cart', 'hart', 'hare', 'bare']\n",
775 "['cart', 'hart', 'hare', 'care']\n",
776 "['cart', 'hart', 'hare', 'dare']\n",
777 "['cart', 'hart', 'hare', 'fare']\n",
778 "['cart', 'hart', 'hare', 'mare']\n",
779 "['cart', 'hart', 'hare', 'pare']\n",
780 "['cart', 'hart', 'hare', 'rare']\n",
781 "['cart', 'hart', 'hare', 'tare']\n",
782 "['cart', 'hart', 'hare', 'ware']\n",
783 "['cart', 'hart', 'hare', 'here']\n",
784 "['cart', 'hart', 'hare', 'hire']\n",
785 "['cart', 'hart', 'hare', 'hake']\n",
786 "['cart', 'hart', 'hare', 'hale']\n",
787 "['cart', 'hart', 'hare', 'hate']\n",
788 "['cart', 'hart', 'hare', 'have']\n",
789 "['cart', 'hart', 'hare', 'haze']\n",
790 "['cart', 'hart', 'hare', 'hard']\n",
791 "['cart', 'hart', 'hare', 'hark']\n",
792 "['cart', 'hart', 'hare', 'harm']\n",
793 "['cart', 'hart', 'hare', 'harp']\n",
794 "['cart', 'hart', 'hark', 'bark']\n",
795 "['cart', 'hart', 'hark', 'dark']\n",
796 "['cart', 'hart', 'hark', 'lark']\n",
797 "['cart', 'hart', 'hark', 'mark']\n",
798 "['cart', 'hart', 'hark', 'nark']\n",
799 "['cart', 'hart', 'hark', 'park']\n",
800 "['cart', 'hart', 'hark', 'hack']\n",
801 "['cart', 'hart', 'hark', 'hank']\n",
802 "['cart', 'hart', 'hark', 'hawk']\n",
803 "['cart', 'hart', 'hark', 'hard']\n",
804 "['cart', 'hart', 'hark', 'hare']\n",
805 "['cart', 'hart', 'hark', 'harm']\n",
806 "['cart', 'hart', 'hark', 'harp']\n",
807 "['cart', 'hart', 'harm', 'farm']\n",
808 "['cart', 'hart', 'harm', 'warm']\n",
809 "['cart', 'hart', 'harm', 'hard']\n",
810 "['cart', 'hart', 'harm', 'hare']\n",
811 "['cart', 'hart', 'harm', 'hark']\n",
812 "['cart', 'hart', 'harm', 'harp']\n",
813 "['cart', 'hart', 'harp', 'carp']\n",
814 "['cart', 'hart', 'harp', 'tarp']\n",
815 "['cart', 'hart', 'harp', 'warp']\n",
816 "['cart', 'hart', 'harp', 'hasp']\n",
817 "['cart', 'hart', 'harp', 'hard']\n",
818 "['cart', 'hart', 'harp', 'hare']\n",
819 "['cart', 'hart', 'harp', 'hark']\n",
820 "['cart', 'hart', 'harp', 'harm']\n",
821 "['cart', 'mart', 'dart', 'hart']\n",
822 "['cart', 'mart', 'dart', 'part']\n",
823 "['cart', 'mart', 'dart', 'tart']\n",
824 "['cart', 'mart', 'dart', 'wart']\n",
825 "['cart', 'mart', 'dart', 'dirt']\n",
826 "['cart', 'mart', 'dart', 'daft']\n",
827 "['cart', 'mart', 'dart', 'dare']\n",
828 "['cart', 'mart', 'dart', 'dark']\n",
829 "['cart', 'mart', 'dart', 'darn']\n",
830 "['cart', 'mart', 'hart', 'dart']\n",
831 "['cart', 'mart', 'hart', 'part']\n",
832 "['cart', 'mart', 'hart', 'tart']\n",
833 "['cart', 'mart', 'hart', 'wart']\n",
834 "['cart', 'mart', 'hart', 'hurt']\n",
835 "['cart', 'mart', 'hart', 'haft']\n",
836 "['cart', 'mart', 'hart', 'halt']\n",
837 "['cart', 'mart', 'hart', 'hard']\n",
838 "['cart', 'mart', 'hart', 'hare']\n",
839 "['cart', 'mart', 'hart', 'hark']\n",
840 "['cart', 'mart', 'hart', 'harm']\n",
841 "['cart', 'mart', 'hart', 'harp']\n",
842 "['cart', 'mart', 'part', 'dart']\n",
843 "['cart', 'mart', 'part', 'hart']\n",
844 "['cart', 'mart', 'part', 'tart']\n",
845 "['cart', 'mart', 'part', 'wart']\n",
846 "['cart', 'mart', 'part', 'pert']\n",
847 "['cart', 'mart', 'part', 'port']\n",
848 "['cart', 'mart', 'part', 'pact']\n",
849 "['cart', 'mart', 'part', 'pant']\n",
850 "['cart', 'mart', 'part', 'past']\n",
851 "['cart', 'mart', 'part', 'pare']\n",
852 "['cart', 'mart', 'part', 'park']\n",
853 "['cart', 'mart', 'part', 'pars']\n",
854 "['cart', 'mart', 'tart', 'dart']\n",
855 "['cart', 'mart', 'tart', 'hart']\n",
856 "['cart', 'mart', 'tart', 'part']\n",
857 "['cart', 'mart', 'tart', 'wart']\n",
858 "['cart', 'mart', 'tart', 'tort']\n",
859 "['cart', 'mart', 'tart', 'tact']\n",
860 "['cart', 'mart', 'tart', 'taut']\n",
861 "['cart', 'mart', 'tart', 'tare']\n",
862 "['cart', 'mart', 'tart', 'taro']\n",
863 "['cart', 'mart', 'tart', 'tarp']\n",
864 "['cart', 'mart', 'tart', 'tars']\n",
865 "['cart', 'mart', 'wart', 'dart']\n",
866 "['cart', 'mart', 'wart', 'hart']\n",
867 "['cart', 'mart', 'wart', 'part']\n",
868 "['cart', 'mart', 'wart', 'tart']\n",
869 "['cart', 'mart', 'wart', 'waft']\n",
870 "['cart', 'mart', 'wart', 'wait']\n",
871 "['cart', 'mart', 'wart', 'want']\n",
872 "['cart', 'mart', 'wart', 'watt']\n",
873 "['cart', 'mart', 'wart', 'ward']\n",
874 "['cart', 'mart', 'wart', 'ware']\n",
875 "['cart', 'mart', 'wart', 'warm']\n",
876 "['cart', 'mart', 'wart', 'warn']\n",
877 "['cart', 'mart', 'wart', 'warp']\n",
878 "['cart', 'mart', 'wart', 'wars']\n",
879 "['cart', 'mart', 'wart', 'wary']\n",
880 "['cart', 'mart', 'malt', 'halt']\n",
881 "['cart', 'mart', 'malt', 'salt']\n",
882 "['cart', 'mart', 'malt', 'melt']\n",
883 "['cart', 'mart', 'malt', 'mast']\n",
884 "['cart', 'mart', 'malt', 'matt']\n",
885 "['cart', 'mart', 'malt', 'male']\n",
886 "['cart', 'mart', 'malt', 'mall']\n",
887 "['cart', 'mart', 'mast', 'bast']\n",
888 "['cart', 'mart', 'mast', 'cast']\n",
889 "['cart', 'mart', 'mast', 'east']\n",
890 "['cart', 'mart', 'mast', 'fast']\n",
891 "['cart', 'mart', 'mast', 'last']\n",
892 "['cart', 'mart', 'mast', 'past']\n",
893 "['cart', 'mart', 'mast', 'vast']\n",
894 "['cart', 'mart', 'mast', 'mist']\n",
895 "['cart', 'mart', 'mast', 'most']\n",
896 "['cart', 'mart', 'mast', 'must']\n",
897 "['cart', 'mart', 'mast', 'malt']\n",
898 "['cart', 'mart', 'mast', 'matt']\n",
899 "['cart', 'mart', 'mast', 'mash']\n",
900 "['cart', 'mart', 'mast', 'mask']\n",
901 "['cart', 'mart', 'mast', 'mass']\n",
902 "['cart', 'mart', 'matt', 'watt']\n",
903 "['cart', 'mart', 'matt', 'mitt']\n",
904 "['cart', 'mart', 'matt', 'mutt']\n",
905 "['cart', 'mart', 'matt', 'malt']\n",
906 "['cart', 'mart', 'matt', 'mast']\n",
907 "['cart', 'mart', 'matt', 'mate']\n",
908 "['cart', 'mart', 'matt', 'math']\n",
909 "['cart', 'mart', 'matt', 'mats']\n",
910 "['cart', 'mart', 'mare', 'bare']\n",
911 "['cart', 'mart', 'mare', 'care']\n",
912 "['cart', 'mart', 'mare', 'dare']\n",
913 "['cart', 'mart', 'mare', 'fare']\n",
914 "['cart', 'mart', 'mare', 'hare']\n",
915 "['cart', 'mart', 'mare', 'pare']\n",
916 "['cart', 'mart', 'mare', 'rare']\n",
917 "['cart', 'mart', 'mare', 'tare']\n",
918 "['cart', 'mart', 'mare', 'ware']\n",
919 "['cart', 'mart', 'mare', 'mere']\n",
920 "['cart', 'mart', 'mare', 'mire']\n",
921 "['cart', 'mart', 'mare', 'more']\n",
922 "['cart', 'mart', 'mare', 'mace']\n",
923 "['cart', 'mart', 'mare', 'made']\n"
928 "output_type": "stream",
930 "['cart', 'mart', 'mare', 'make']\n",
931 "['cart', 'mart', 'mare', 'male']\n",
932 "['cart', 'mart', 'mare', 'mane']\n",
933 "['cart', 'mart', 'mare', 'mate']\n",
934 "['cart', 'mart', 'mare', 'maze']\n",
935 "['cart', 'mart', 'mare', 'mark']\n",
936 "['cart', 'mart', 'mare', 'mars']\n",
937 "['cart', 'mart', 'mark', 'bark']\n",
938 "['cart', 'mart', 'mark', 'dark']\n",
939 "['cart', 'mart', 'mark', 'hark']\n",
940 "['cart', 'mart', 'mark', 'lark']\n",
941 "['cart', 'mart', 'mark', 'nark']\n",
942 "['cart', 'mart', 'mark', 'park']\n",
943 "['cart', 'mart', 'mark', 'murk']\n",
944 "['cart', 'mart', 'mark', 'mask']\n",
945 "['cart', 'mart', 'mark', 'mare']\n",
946 "['cart', 'mart', 'mark', 'mars']\n",
947 "['cart', 'mart', 'mars', 'bars']\n",
948 "['cart', 'mart', 'mars', 'cars']\n",
949 "['cart', 'mart', 'mars', 'ears']\n",
950 "['cart', 'mart', 'mars', 'jars']\n",
951 "['cart', 'mart', 'mars', 'oars']\n",
952 "['cart', 'mart', 'mars', 'pars']\n",
953 "['cart', 'mart', 'mars', 'tars']\n",
954 "['cart', 'mart', 'mars', 'wars']\n",
955 "['cart', 'mart', 'mars', 'mads']\n",
956 "['cart', 'mart', 'mars', 'mans']\n",
957 "['cart', 'mart', 'mars', 'maps']\n",
958 "['cart', 'mart', 'mars', 'mass']\n",
959 "['cart', 'mart', 'mars', 'mats']\n",
960 "['cart', 'mart', 'mars', 'maws']\n",
961 "['cart', 'mart', 'mars', 'mare']\n",
962 "['cart', 'mart', 'mars', 'mark']\n",
963 "['cart', 'part', 'dart', 'hart']\n",
964 "['cart', 'part', 'dart', 'mart']\n",
965 "['cart', 'part', 'dart', 'tart']\n",
966 "['cart', 'part', 'dart', 'wart']\n",
967 "['cart', 'part', 'dart', 'dirt']\n",
968 "['cart', 'part', 'dart', 'daft']\n",
969 "['cart', 'part', 'dart', 'dare']\n",
970 "['cart', 'part', 'dart', 'dark']\n",
971 "['cart', 'part', 'dart', 'darn']\n",
972 "['cart', 'part', 'hart', 'dart']\n",
973 "['cart', 'part', 'hart', 'mart']\n",
974 "['cart', 'part', 'hart', 'tart']\n",
975 "['cart', 'part', 'hart', 'wart']\n",
976 "['cart', 'part', 'hart', 'hurt']\n",
977 "['cart', 'part', 'hart', 'haft']\n",
978 "['cart', 'part', 'hart', 'halt']\n",
979 "['cart', 'part', 'hart', 'hard']\n",
980 "['cart', 'part', 'hart', 'hare']\n",
981 "['cart', 'part', 'hart', 'hark']\n",
982 "['cart', 'part', 'hart', 'harm']\n",
983 "['cart', 'part', 'hart', 'harp']\n",
984 "['cart', 'part', 'mart', 'dart']\n",
985 "['cart', 'part', 'mart', 'hart']\n",
986 "['cart', 'part', 'mart', 'tart']\n",
987 "['cart', 'part', 'mart', 'wart']\n",
988 "['cart', 'part', 'mart', 'malt']\n",
989 "['cart', 'part', 'mart', 'mast']\n",
990 "['cart', 'part', 'mart', 'matt']\n",
991 "['cart', 'part', 'mart', 'mare']\n",
992 "['cart', 'part', 'mart', 'mark']\n",
993 "['cart', 'part', 'mart', 'mars']\n",
994 "['cart', 'part', 'tart', 'dart']\n",
995 "['cart', 'part', 'tart', 'hart']\n",
996 "['cart', 'part', 'tart', 'mart']\n",
997 "['cart', 'part', 'tart', 'wart']\n",
998 "['cart', 'part', 'tart', 'tort']\n",
999 "['cart', 'part', 'tart', 'tact']\n",
1000 "['cart', 'part', 'tart', 'taut']\n",
1001 "['cart', 'part', 'tart', 'tare']\n",
1002 "['cart', 'part', 'tart', 'taro']\n",
1003 "['cart', 'part', 'tart', 'tarp']\n",
1004 "['cart', 'part', 'tart', 'tars']\n",
1005 "['cart', 'part', 'wart', 'dart']\n",
1006 "['cart', 'part', 'wart', 'hart']\n",
1007 "['cart', 'part', 'wart', 'mart']\n",
1008 "['cart', 'part', 'wart', 'tart']\n",
1009 "['cart', 'part', 'wart', 'waft']\n",
1010 "['cart', 'part', 'wart', 'wait']\n",
1011 "['cart', 'part', 'wart', 'want']\n",
1012 "['cart', 'part', 'wart', 'watt']\n",
1013 "['cart', 'part', 'wart', 'ward']\n",
1014 "['cart', 'part', 'wart', 'ware']\n",
1015 "['cart', 'part', 'wart', 'warm']\n",
1016 "['cart', 'part', 'wart', 'warn']\n",
1017 "['cart', 'part', 'wart', 'warp']\n",
1018 "['cart', 'part', 'wart', 'wars']\n",
1019 "['cart', 'part', 'wart', 'wary']\n",
1020 "['cart', 'part', 'pert', 'port']\n",
1021 "['cart', 'part', 'pert', 'peat']\n",
1022 "['cart', 'part', 'pert', 'pelt']\n",
1023 "['cart', 'part', 'pert', 'pent']\n",
1024 "['cart', 'part', 'pert', 'pest']\n",
1025 "['cart', 'part', 'pert', 'perk']\n",
1026 "['cart', 'part', 'pert', 'perm']\n",
1027 "['cart', 'part', 'port', 'fort']\n",
1028 "['cart', 'part', 'port', 'sort']\n",
1029 "['cart', 'part', 'port', 'tort']\n",
1030 "['cart', 'part', 'port', 'pert']\n",
1031 "['cart', 'part', 'port', 'poet']\n",
1032 "['cart', 'part', 'port', 'post']\n",
1033 "['cart', 'part', 'port', 'pout']\n",
1034 "['cart', 'part', 'port', 'pore']\n",
1035 "['cart', 'part', 'port', 'pork']\n",
1036 "['cart', 'part', 'port', 'porn']\n",
1037 "['cart', 'part', 'pact', 'fact']\n",
1038 "['cart', 'part', 'pact', 'tact']\n",
1039 "['cart', 'part', 'pact', 'pant']\n",
1040 "['cart', 'part', 'pact', 'past']\n",
1041 "['cart', 'part', 'pact', 'pace']\n",
1042 "['cart', 'part', 'pact', 'pack']\n",
1043 "['cart', 'part', 'pant', 'cant']\n",
1044 "['cart', 'part', 'pant', 'rant']\n",
1045 "['cart', 'part', 'pant', 'want']\n",
1046 "['cart', 'part', 'pant', 'pent']\n",
1047 "['cart', 'part', 'pant', 'pint']\n",
1048 "['cart', 'part', 'pant', 'punt']\n",
1049 "['cart', 'part', 'pant', 'pact']\n",
1050 "['cart', 'part', 'pant', 'past']\n",
1051 "['cart', 'part', 'pant', 'pane']\n",
1052 "['cart', 'part', 'pant', 'pang']\n",
1053 "['cart', 'part', 'pant', 'pans']\n",
1054 "['cart', 'part', 'past', 'bast']\n",
1055 "['cart', 'part', 'past', 'cast']\n",
1056 "['cart', 'part', 'past', 'east']\n",
1057 "['cart', 'part', 'past', 'fast']\n",
1058 "['cart', 'part', 'past', 'last']\n",
1059 "['cart', 'part', 'past', 'mast']\n",
1060 "['cart', 'part', 'past', 'vast']\n",
1061 "['cart', 'part', 'past', 'pest']\n",
1062 "['cart', 'part', 'past', 'post']\n",
1063 "['cart', 'part', 'past', 'psst']\n",
1064 "['cart', 'part', 'past', 'pact']\n",
1065 "['cart', 'part', 'past', 'pant']\n",
1066 "['cart', 'part', 'past', 'pass']\n",
1067 "['cart', 'part', 'pare', 'bare']\n",
1068 "['cart', 'part', 'pare', 'care']\n",
1069 "['cart', 'part', 'pare', 'dare']\n",
1070 "['cart', 'part', 'pare', 'fare']\n",
1071 "['cart', 'part', 'pare', 'hare']\n",
1072 "['cart', 'part', 'pare', 'mare']\n",
1073 "['cart', 'part', 'pare', 'rare']\n",
1074 "['cart', 'part', 'pare', 'tare']\n",
1075 "['cart', 'part', 'pare', 'ware']\n",
1076 "['cart', 'part', 'pare', 'pore']\n",
1077 "['cart', 'part', 'pare', 'pure']\n",
1078 "['cart', 'part', 'pare', 'pyre']\n",
1079 "['cart', 'part', 'pare', 'pace']\n",
1080 "['cart', 'part', 'pare', 'page']\n",
1081 "['cart', 'part', 'pare', 'pale']\n",
1082 "['cart', 'part', 'pare', 'pane']\n",
1083 "['cart', 'part', 'pare', 'pate']\n",
1084 "['cart', 'part', 'pare', 'pave']\n",
1085 "['cart', 'part', 'pare', 'park']\n",
1086 "['cart', 'part', 'pare', 'pars']\n",
1087 "['cart', 'part', 'park', 'bark']\n",
1088 "['cart', 'part', 'park', 'dark']\n",
1089 "['cart', 'part', 'park', 'hark']\n",
1090 "['cart', 'part', 'park', 'lark']\n",
1091 "['cart', 'part', 'park', 'mark']\n",
1092 "['cart', 'part', 'park', 'nark']\n",
1093 "['cart', 'part', 'park', 'perk']\n",
1094 "['cart', 'part', 'park', 'pork']\n",
1095 "['cart', 'part', 'park', 'pack']\n",
1096 "['cart', 'part', 'park', 'pare']\n",
1097 "['cart', 'part', 'park', 'pars']\n",
1098 "['cart', 'part', 'pars', 'bars']\n",
1099 "['cart', 'part', 'pars', 'cars']\n",
1100 "['cart', 'part', 'pars', 'ears']\n",
1101 "['cart', 'part', 'pars', 'jars']\n",
1102 "['cart', 'part', 'pars', 'mars']\n",
1103 "['cart', 'part', 'pars', 'oars']\n",
1104 "['cart', 'part', 'pars', 'tars']\n",
1105 "['cart', 'part', 'pars', 'wars']\n",
1106 "['cart', 'part', 'pars', 'pads']\n",
1107 "['cart', 'part', 'pars', 'pals']\n",
1108 "['cart', 'part', 'pars', 'pans']\n",
1109 "['cart', 'part', 'pars', 'paps']\n",
1110 "['cart', 'part', 'pars', 'pass']\n",
1111 "['cart', 'part', 'pars', 'pats']\n",
1112 "['cart', 'part', 'pars', 'paws']\n",
1113 "['cart', 'part', 'pars', 'pays']\n",
1114 "['cart', 'part', 'pars', 'pare']\n",
1115 "['cart', 'part', 'pars', 'park']\n",
1116 "['cart', 'tart', 'dart', 'hart']\n",
1117 "['cart', 'tart', 'dart', 'mart']\n",
1118 "['cart', 'tart', 'dart', 'part']\n",
1119 "['cart', 'tart', 'dart', 'wart']\n",
1120 "['cart', 'tart', 'dart', 'dirt']\n",
1121 "['cart', 'tart', 'dart', 'daft']\n",
1122 "['cart', 'tart', 'dart', 'dare']\n",
1123 "['cart', 'tart', 'dart', 'dark']\n",
1124 "['cart', 'tart', 'dart', 'darn']\n",
1125 "['cart', 'tart', 'hart', 'dart']\n",
1126 "['cart', 'tart', 'hart', 'mart']\n",
1127 "['cart', 'tart', 'hart', 'part']\n",
1128 "['cart', 'tart', 'hart', 'wart']\n",
1129 "['cart', 'tart', 'hart', 'hurt']\n",
1130 "['cart', 'tart', 'hart', 'haft']\n",
1131 "['cart', 'tart', 'hart', 'halt']\n",
1132 "['cart', 'tart', 'hart', 'hard']\n",
1133 "['cart', 'tart', 'hart', 'hare']\n",
1134 "['cart', 'tart', 'hart', 'hark']\n",
1135 "['cart', 'tart', 'hart', 'harm']\n",
1136 "['cart', 'tart', 'hart', 'harp']\n",
1137 "['cart', 'tart', 'mart', 'dart']\n",
1138 "['cart', 'tart', 'mart', 'hart']\n",
1139 "['cart', 'tart', 'mart', 'part']\n",
1140 "['cart', 'tart', 'mart', 'wart']\n",
1141 "['cart', 'tart', 'mart', 'malt']\n",
1142 "['cart', 'tart', 'mart', 'mast']\n",
1143 "['cart', 'tart', 'mart', 'matt']\n",
1144 "['cart', 'tart', 'mart', 'mare']\n",
1145 "['cart', 'tart', 'mart', 'mark']\n",
1146 "['cart', 'tart', 'mart', 'mars']\n",
1147 "['cart', 'tart', 'part', 'dart']\n",
1148 "['cart', 'tart', 'part', 'hart']\n",
1149 "['cart', 'tart', 'part', 'mart']\n",
1150 "['cart', 'tart', 'part', 'wart']\n",
1151 "['cart', 'tart', 'part', 'pert']\n",
1152 "['cart', 'tart', 'part', 'port']\n",
1153 "['cart', 'tart', 'part', 'pact']\n",
1154 "['cart', 'tart', 'part', 'pant']\n",
1155 "['cart', 'tart', 'part', 'past']\n",
1156 "['cart', 'tart', 'part', 'pare']\n",
1157 "['cart', 'tart', 'part', 'park']\n",
1158 "['cart', 'tart', 'part', 'pars']\n",
1159 "['cart', 'tart', 'wart', 'dart']\n",
1160 "['cart', 'tart', 'wart', 'hart']\n",
1161 "['cart', 'tart', 'wart', 'mart']\n",
1162 "['cart', 'tart', 'wart', 'part']\n",
1163 "['cart', 'tart', 'wart', 'waft']\n",
1164 "['cart', 'tart', 'wart', 'wait']\n",
1165 "['cart', 'tart', 'wart', 'want']\n",
1166 "['cart', 'tart', 'wart', 'watt']\n",
1167 "['cart', 'tart', 'wart', 'ward']\n",
1168 "['cart', 'tart', 'wart', 'ware']\n",
1169 "['cart', 'tart', 'wart', 'warm']\n",
1170 "['cart', 'tart', 'wart', 'warn']\n",
1171 "['cart', 'tart', 'wart', 'warp']\n",
1172 "['cart', 'tart', 'wart', 'wars']\n",
1173 "['cart', 'tart', 'wart', 'wary']\n",
1174 "['cart', 'tart', 'tort', 'fort']\n",
1175 "['cart', 'tart', 'tort', 'port']\n",
1176 "['cart', 'tart', 'tort', 'sort']\n",
1177 "['cart', 'tart', 'tort', 'toot']\n",
1178 "['cart', 'tart', 'tort', 'tost']\n",
1179 "['cart', 'tart', 'tort', 'tout']\n",
1180 "['cart', 'tart', 'tort', 'tore']\n",
1181 "['cart', 'tart', 'tort', 'torn']\n",
1182 "['cart', 'tart', 'tort', 'tors']\n",
1183 "['cart', 'tart', 'tact', 'fact']\n",
1184 "['cart', 'tart', 'tact', 'pact']\n",
1185 "['cart', 'tart', 'tact', 'taut']\n",
1186 "['cart', 'tart', 'tact', 'tack']\n",
1187 "['cart', 'tart', 'tact', 'taco']\n",
1188 "['cart', 'tart', 'taut', 'tout']\n",
1189 "['cart', 'tart', 'taut', 'tact']\n",
1190 "['cart', 'tart', 'tare', 'bare']\n",
1191 "['cart', 'tart', 'tare', 'care']\n",
1192 "['cart', 'tart', 'tare', 'dare']\n",
1193 "['cart', 'tart', 'tare', 'fare']\n",
1194 "['cart', 'tart', 'tare', 'hare']\n",
1195 "['cart', 'tart', 'tare', 'mare']\n",
1196 "['cart', 'tart', 'tare', 'pare']\n",
1197 "['cart', 'tart', 'tare', 'rare']\n",
1198 "['cart', 'tart', 'tare', 'ware']\n",
1199 "['cart', 'tart', 'tare', 'tire']\n",
1200 "['cart', 'tart', 'tare', 'tore']\n",
1201 "['cart', 'tart', 'tare', 'tyre']\n",
1202 "['cart', 'tart', 'tare', 'take']\n",
1203 "['cart', 'tart', 'tare', 'tale']\n",
1204 "['cart', 'tart', 'tare', 'tame']\n",
1205 "['cart', 'tart', 'tare', 'tape']\n",
1206 "['cart', 'tart', 'tare', 'taro']\n",
1207 "['cart', 'tart', 'tare', 'tarp']\n",
1208 "['cart', 'tart', 'tare', 'tars']\n",
1209 "['cart', 'tart', 'taro', 'tiro']\n",
1210 "['cart', 'tart', 'taro', 'tyro']\n",
1211 "['cart', 'tart', 'taro', 'taco']\n",
1212 "['cart', 'tart', 'taro', 'tare']\n",
1213 "['cart', 'tart', 'taro', 'tarp']\n",
1214 "['cart', 'tart', 'taro', 'tars']\n",
1215 "['cart', 'tart', 'tarp', 'carp']\n",
1216 "['cart', 'tart', 'tarp', 'harp']\n",
1217 "['cart', 'tart', 'tarp', 'warp']\n",
1218 "['cart', 'tart', 'tarp', 'tamp']\n",
1219 "['cart', 'tart', 'tarp', 'tare']\n",
1220 "['cart', 'tart', 'tarp', 'taro']\n",
1221 "['cart', 'tart', 'tarp', 'tars']\n",
1222 "['cart', 'tart', 'tars', 'bars']\n",
1223 "['cart', 'tart', 'tars', 'cars']\n",
1224 "['cart', 'tart', 'tars', 'ears']\n",
1225 "['cart', 'tart', 'tars', 'jars']\n",
1226 "['cart', 'tart', 'tars', 'mars']\n",
1227 "['cart', 'tart', 'tars', 'oars']\n",
1228 "['cart', 'tart', 'tars', 'pars']\n",
1229 "['cart', 'tart', 'tars', 'wars']\n",
1230 "['cart', 'tart', 'tars', 'tors']\n",
1231 "['cart', 'tart', 'tars', 'tabs']\n",
1232 "['cart', 'tart', 'tars', 'tads']\n",
1233 "['cart', 'tart', 'tars', 'tags']\n",
1234 "['cart', 'tart', 'tars', 'tams']\n",
1235 "['cart', 'tart', 'tars', 'tans']\n",
1236 "['cart', 'tart', 'tars', 'taps']\n",
1237 "['cart', 'tart', 'tars', 'tats']\n",
1238 "['cart', 'tart', 'tars', 'tare']\n",
1239 "['cart', 'tart', 'tars', 'taro']\n",
1240 "['cart', 'tart', 'tars', 'tarp']\n",
1241 "['cart', 'wart', 'dart', 'hart']\n",
1242 "['cart', 'wart', 'dart', 'mart']\n",
1243 "['cart', 'wart', 'dart', 'part']\n",
1244 "['cart', 'wart', 'dart', 'tart']\n",
1245 "['cart', 'wart', 'dart', 'dirt']\n",
1246 "['cart', 'wart', 'dart', 'daft']\n",
1247 "['cart', 'wart', 'dart', 'dare']\n",
1248 "['cart', 'wart', 'dart', 'dark']\n",
1249 "['cart', 'wart', 'dart', 'darn']\n",
1250 "['cart', 'wart', 'hart', 'dart']\n",
1251 "['cart', 'wart', 'hart', 'mart']\n",
1252 "['cart', 'wart', 'hart', 'part']\n",
1253 "['cart', 'wart', 'hart', 'tart']\n",
1254 "['cart', 'wart', 'hart', 'hurt']\n",
1255 "['cart', 'wart', 'hart', 'haft']\n",
1256 "['cart', 'wart', 'hart', 'halt']\n",
1257 "['cart', 'wart', 'hart', 'hard']\n",
1258 "['cart', 'wart', 'hart', 'hare']\n",
1259 "['cart', 'wart', 'hart', 'hark']\n",
1260 "['cart', 'wart', 'hart', 'harm']\n",
1261 "['cart', 'wart', 'hart', 'harp']\n",
1262 "['cart', 'wart', 'mart', 'dart']\n",
1263 "['cart', 'wart', 'mart', 'hart']\n",
1264 "['cart', 'wart', 'mart', 'part']\n",
1265 "['cart', 'wart', 'mart', 'tart']\n",
1266 "['cart', 'wart', 'mart', 'malt']\n",
1267 "['cart', 'wart', 'mart', 'mast']\n",
1268 "['cart', 'wart', 'mart', 'matt']\n",
1269 "['cart', 'wart', 'mart', 'mare']\n",
1270 "['cart', 'wart', 'mart', 'mark']\n",
1271 "['cart', 'wart', 'mart', 'mars']\n",
1272 "['cart', 'wart', 'part', 'dart']\n",
1273 "['cart', 'wart', 'part', 'hart']\n",
1274 "['cart', 'wart', 'part', 'mart']\n",
1275 "['cart', 'wart', 'part', 'tart']\n",
1276 "['cart', 'wart', 'part', 'pert']\n",
1277 "['cart', 'wart', 'part', 'port']\n",
1278 "['cart', 'wart', 'part', 'pact']\n",
1279 "['cart', 'wart', 'part', 'pant']\n",
1280 "['cart', 'wart', 'part', 'past']\n",
1281 "['cart', 'wart', 'part', 'pare']\n",
1282 "['cart', 'wart', 'part', 'park']\n",
1283 "['cart', 'wart', 'part', 'pars']\n",
1284 "['cart', 'wart', 'tart', 'dart']\n",
1285 "['cart', 'wart', 'tart', 'hart']\n",
1286 "['cart', 'wart', 'tart', 'mart']\n",
1287 "['cart', 'wart', 'tart', 'part']\n",
1288 "['cart', 'wart', 'tart', 'tort']\n",
1289 "['cart', 'wart', 'tart', 'tact']\n",
1290 "['cart', 'wart', 'tart', 'taut']\n",
1291 "['cart', 'wart', 'tart', 'tare']\n",
1292 "['cart', 'wart', 'tart', 'taro']\n",
1293 "['cart', 'wart', 'tart', 'tarp']\n",
1294 "['cart', 'wart', 'tart', 'tars']\n",
1295 "['cart', 'wart', 'waft', 'daft']\n",
1296 "['cart', 'wart', 'waft', 'haft']\n",
1297 "['cart', 'wart', 'waft', 'raft']\n",
1298 "['cart', 'wart', 'waft', 'weft']\n",
1299 "['cart', 'wart', 'waft', 'wait']\n",
1300 "['cart', 'wart', 'waft', 'want']\n",
1301 "['cart', 'wart', 'waft', 'watt']\n",
1302 "['cart', 'wart', 'wait', 'bait']\n",
1303 "['cart', 'wart', 'wait', 'gait']\n",
1304 "['cart', 'wart', 'wait', 'whit']\n",
1305 "['cart', 'wart', 'wait', 'writ']\n",
1306 "['cart', 'wart', 'wait', 'waft']\n",
1307 "['cart', 'wart', 'wait', 'want']\n",
1308 "['cart', 'wart', 'wait', 'watt']\n",
1309 "['cart', 'wart', 'wait', 'waif']\n",
1310 "['cart', 'wart', 'wait', 'wail']\n",
1311 "['cart', 'wart', 'want', 'cant']\n",
1312 "['cart', 'wart', 'want', 'pant']\n",
1313 "['cart', 'wart', 'want', 'rant']\n",
1314 "['cart', 'wart', 'want', 'went']\n",
1315 "['cart', 'wart', 'want', 'wont']\n",
1316 "['cart', 'wart', 'want', 'waft']\n",
1317 "['cart', 'wart', 'want', 'wait']\n",
1318 "['cart', 'wart', 'want', 'watt']\n",
1319 "['cart', 'wart', 'want', 'wand']\n",
1320 "['cart', 'wart', 'want', 'wane']\n",
1321 "['cart', 'wart', 'watt', 'matt']\n",
1322 "['cart', 'wart', 'watt', 'waft']\n",
1323 "['cart', 'wart', 'watt', 'wait']\n",
1324 "['cart', 'wart', 'watt', 'want']\n",
1325 "['cart', 'wart', 'ward', 'bard']\n",
1326 "['cart', 'wart', 'ward', 'card']\n",
1327 "['cart', 'wart', 'ward', 'hard']\n",
1328 "['cart', 'wart', 'ward', 'lard']\n",
1329 "['cart', 'wart', 'ward', 'yard']\n",
1330 "['cart', 'wart', 'ward', 'word']\n",
1331 "['cart', 'wart', 'ward', 'wand']\n",
1332 "['cart', 'wart', 'ward', 'ware']\n",
1333 "['cart', 'wart', 'ward', 'warm']\n",
1334 "['cart', 'wart', 'ward', 'warn']\n",
1335 "['cart', 'wart', 'ward', 'warp']\n",
1336 "['cart', 'wart', 'ward', 'wars']\n",
1337 "['cart', 'wart', 'ward', 'wary']\n",
1338 "['cart', 'wart', 'ware', 'bare']\n",
1339 "['cart', 'wart', 'ware', 'care']\n",
1340 "['cart', 'wart', 'ware', 'dare']\n",
1341 "['cart', 'wart', 'ware', 'fare']\n",
1342 "['cart', 'wart', 'ware', 'hare']\n",
1343 "['cart', 'wart', 'ware', 'mare']\n",
1344 "['cart', 'wart', 'ware', 'pare']\n",
1345 "['cart', 'wart', 'ware', 'rare']\n",
1346 "['cart', 'wart', 'ware', 'tare']\n",
1347 "['cart', 'wart', 'ware', 'were']\n",
1348 "['cart', 'wart', 'ware', 'wire']\n",
1349 "['cart', 'wart', 'ware', 'wore']\n",
1350 "['cart', 'wart', 'ware', 'wade']\n",
1351 "['cart', 'wart', 'ware', 'wage']\n",
1352 "['cart', 'wart', 'ware', 'wake']\n",
1353 "['cart', 'wart', 'ware', 'wale']\n",
1354 "['cart', 'wart', 'ware', 'wane']\n",
1355 "['cart', 'wart', 'ware', 'wave']\n",
1356 "['cart', 'wart', 'ware', 'ward']\n",
1357 "['cart', 'wart', 'ware', 'warm']\n",
1358 "['cart', 'wart', 'ware', 'warn']\n",
1359 "['cart', 'wart', 'ware', 'warp']\n",
1360 "['cart', 'wart', 'ware', 'wars']\n",
1361 "['cart', 'wart', 'ware', 'wary']\n",
1362 "['cart', 'wart', 'warm', 'farm']\n",
1363 "['cart', 'wart', 'warm', 'harm']\n",
1364 "['cart', 'wart', 'warm', 'worm']\n",
1365 "['cart', 'wart', 'warm', 'ward']\n",
1366 "['cart', 'wart', 'warm', 'ware']\n",
1367 "['cart', 'wart', 'warm', 'warn']\n",
1368 "['cart', 'wart', 'warm', 'warp']\n",
1369 "['cart', 'wart', 'warm', 'wars']\n",
1370 "['cart', 'wart', 'warm', 'wary']\n",
1371 "['cart', 'wart', 'warn', 'barn']\n",
1372 "['cart', 'wart', 'warn', 'darn']\n",
1373 "['cart', 'wart', 'warn', 'earn']\n",
1374 "['cart', 'wart', 'warn', 'yarn']\n",
1375 "['cart', 'wart', 'warn', 'worn']\n",
1376 "['cart', 'wart', 'warn', 'ward']\n",
1377 "['cart', 'wart', 'warn', 'ware']\n",
1378 "['cart', 'wart', 'warn', 'warm']\n",
1379 "['cart', 'wart', 'warn', 'warp']\n",
1380 "['cart', 'wart', 'warn', 'wars']\n",
1381 "['cart', 'wart', 'warn', 'wary']\n",
1382 "['cart', 'wart', 'warp', 'carp']\n",
1383 "['cart', 'wart', 'warp', 'harp']\n",
1384 "['cart', 'wart', 'warp', 'tarp']\n",
1385 "['cart', 'wart', 'warp', 'wasp']\n",
1386 "['cart', 'wart', 'warp', 'ward']\n",
1387 "['cart', 'wart', 'warp', 'ware']\n",
1388 "['cart', 'wart', 'warp', 'warm']\n",
1389 "['cart', 'wart', 'warp', 'warn']\n",
1390 "['cart', 'wart', 'warp', 'wars']\n",
1391 "['cart', 'wart', 'warp', 'wary']\n",
1392 "['cart', 'wart', 'wars', 'bars']\n",
1393 "['cart', 'wart', 'wars', 'cars']\n",
1394 "['cart', 'wart', 'wars', 'ears']\n",
1395 "['cart', 'wart', 'wars', 'jars']\n",
1396 "['cart', 'wart', 'wars', 'mars']\n",
1397 "['cart', 'wart', 'wars', 'oars']\n",
1398 "['cart', 'wart', 'wars', 'pars']\n",
1399 "['cart', 'wart', 'wars', 'tars']\n",
1400 "['cart', 'wart', 'wars', 'wads']\n",
1401 "['cart', 'wart', 'wars', 'wags']\n",
1402 "['cart', 'wart', 'wars', 'ways']\n",
1403 "['cart', 'wart', 'wars', 'ward']\n",
1404 "['cart', 'wart', 'wars', 'ware']\n",
1405 "['cart', 'wart', 'wars', 'warm']\n",
1406 "['cart', 'wart', 'wars', 'warn']\n",
1407 "['cart', 'wart', 'wars', 'warp']\n",
1408 "['cart', 'wart', 'wars', 'wary']\n",
1409 "['cart', 'wart', 'wary', 'nary']\n",
1410 "['cart', 'wart', 'wary', 'vary']\n",
1411 "['cart', 'wart', 'wary', 'wiry']\n",
1412 "['cart', 'wart', 'wary', 'wavy']\n",
1413 "['cart', 'wart', 'wary', 'waxy']\n",
1414 "['cart', 'wart', 'wary', 'ward']\n",
1415 "['cart', 'wart', 'wary', 'ware']\n",
1416 "['cart', 'wart', 'wary', 'warm']\n",
1417 "['cart', 'wart', 'wary', 'warn']\n",
1418 "['cart', 'wart', 'wary', 'warp']\n",
1419 "['cart', 'wart', 'wary', 'wars']\n",
1420 "['cart', 'curt', 'hurt', 'hart']\n",
1421 "['cart', 'curt', 'hurt', 'hunt']\n",
1422 "['cart', 'curt', 'hurt', 'hurl']\n",
1423 "['cart', 'curt', 'cult', 'colt']\n",
1424 "['cart', 'curt', 'cult', 'cull']\n",
1425 "['cart', 'curt', 'curb', 'curd']\n",
1426 "['cart', 'curt', 'curb', 'cure']\n",
1427 "['cart', 'curt', 'curb', 'curl']\n",
1428 "['cart', 'curt', 'curb', 'curs']\n",
1429 "['cart', 'curt', 'curd', 'turd']\n",
1430 "['cart', 'curt', 'curd', 'card']\n",
1431 "['cart', 'curt', 'curd', 'cord']\n",
1432 "['cart', 'curt', 'curd', 'cued']\n",
1433 "['cart', 'curt', 'curd', 'curb']\n",
1434 "['cart', 'curt', 'curd', 'cure']\n",
1435 "['cart', 'curt', 'curd', 'curl']\n",
1436 "['cart', 'curt', 'curd', 'curs']\n",
1437 "['cart', 'curt', 'cure', 'lure']\n",
1438 "['cart', 'curt', 'cure', 'pure']\n",
1439 "['cart', 'curt', 'cure', 'sure']\n",
1440 "['cart', 'curt', 'cure', 'care']\n",
1441 "['cart', 'curt', 'cure', 'core']\n",
1442 "['cart', 'curt', 'cure', 'cube']\n",
1443 "['cart', 'curt', 'cure', 'cute']\n",
1444 "['cart', 'curt', 'cure', 'curb']\n",
1445 "['cart', 'curt', 'cure', 'curd']\n",
1446 "['cart', 'curt', 'cure', 'curl']\n",
1447 "['cart', 'curt', 'cure', 'curs']\n",
1448 "['cart', 'curt', 'curl', 'furl']\n",
1449 "['cart', 'curt', 'curl', 'hurl']\n",
1450 "['cart', 'curt', 'curl', 'purl']\n",
1451 "['cart', 'curt', 'curl', 'cull']\n",
1452 "['cart', 'curt', 'curl', 'curb']\n",
1453 "['cart', 'curt', 'curl', 'curd']\n",
1454 "['cart', 'curt', 'curl', 'cure']\n",
1455 "['cart', 'curt', 'curl', 'curs']\n",
1456 "['cart', 'curt', 'curs', 'burs']\n",
1457 "['cart', 'curt', 'curs', 'furs']\n",
1458 "['cart', 'curt', 'curs', 'ours']\n",
1459 "['cart', 'curt', 'curs', 'cars']\n",
1460 "['cart', 'curt', 'curs', 'cubs']\n",
1461 "['cart', 'curt', 'curs', 'cuds']\n",
1462 "['cart', 'curt', 'curs', 'cues']\n",
1463 "['cart', 'curt', 'curs', 'cums']\n",
1464 "['cart', 'curt', 'curs', 'cups']\n",
1465 "['cart', 'curt', 'curs', 'cuss']\n",
1466 "['cart', 'curt', 'curs', 'cuts']\n",
1467 "['cart', 'curt', 'curs', 'curb']\n",
1468 "['cart', 'curt', 'curs', 'curd']\n",
1469 "['cart', 'curt', 'curs', 'cure']\n",
1470 "['cart', 'curt', 'curs', 'curl']\n",
1471 "['cart', 'cant', 'pant', 'rant']\n",
1472 "['cart', 'cant', 'pant', 'want']\n",
1473 "['cart', 'cant', 'pant', 'pent']\n",
1474 "['cart', 'cant', 'pant', 'pint']\n",
1475 "['cart', 'cant', 'pant', 'punt']\n",
1476 "['cart', 'cant', 'pant', 'pact']\n",
1477 "['cart', 'cant', 'pant', 'part']\n",
1478 "['cart', 'cant', 'pant', 'past']\n",
1479 "['cart', 'cant', 'pant', 'pane']\n",
1480 "['cart', 'cant', 'pant', 'pang']\n",
1481 "['cart', 'cant', 'pant', 'pans']\n",
1482 "['cart', 'cant', 'rant', 'pant']\n",
1483 "['cart', 'cant', 'rant', 'want']\n",
1484 "['cart', 'cant', 'rant', 'rent']\n",
1485 "['cart', 'cant', 'rant', 'runt']\n",
1486 "['cart', 'cant', 'rant', 'raft']\n",
1487 "['cart', 'cant', 'rant', 'rapt']\n",
1488 "['cart', 'cant', 'rant', 'rang']\n",
1489 "['cart', 'cant', 'rant', 'rank']\n"
1494 "output_type": "stream",
1496 "['cart', 'cant', 'want', 'pant']\n",
1497 "['cart', 'cant', 'want', 'rant']\n",
1498 "['cart', 'cant', 'want', 'went']\n",
1499 "['cart', 'cant', 'want', 'wont']\n",
1500 "['cart', 'cant', 'want', 'waft']\n",
1501 "['cart', 'cant', 'want', 'wait']\n",
1502 "['cart', 'cant', 'want', 'wart']\n",
1503 "['cart', 'cant', 'want', 'watt']\n",
1504 "['cart', 'cant', 'want', 'wand']\n",
1505 "['cart', 'cant', 'want', 'wane']\n",
1506 "['cart', 'cant', 'cent', 'bent']\n",
1507 "['cart', 'cant', 'cent', 'dent']\n",
1508 "['cart', 'cant', 'cent', 'gent']\n",
1509 "['cart', 'cant', 'cent', 'lent']\n",
1510 "['cart', 'cant', 'cent', 'pent']\n",
1511 "['cart', 'cant', 'cent', 'rent']\n",
1512 "['cart', 'cant', 'cent', 'sent']\n",
1513 "['cart', 'cant', 'cent', 'tent']\n",
1514 "['cart', 'cant', 'cent', 'vent']\n",
1515 "['cart', 'cant', 'cent', 'went']\n",
1516 "['cart', 'cant', 'cast', 'bast']\n",
1517 "['cart', 'cant', 'cast', 'east']\n",
1518 "['cart', 'cant', 'cast', 'fast']\n",
1519 "['cart', 'cant', 'cast', 'last']\n",
1520 "['cart', 'cant', 'cast', 'mast']\n",
1521 "['cart', 'cant', 'cast', 'past']\n",
1522 "['cart', 'cant', 'cast', 'vast']\n",
1523 "['cart', 'cant', 'cast', 'cost']\n",
1524 "['cart', 'cant', 'cast', 'cyst']\n",
1525 "['cart', 'cant', 'cast', 'case']\n",
1526 "['cart', 'cant', 'cast', 'cash']\n",
1527 "['cart', 'cant', 'cast', 'cask']\n",
1528 "['cart', 'cant', 'cane', 'bane']\n",
1529 "['cart', 'cant', 'cane', 'lane']\n",
1530 "['cart', 'cant', 'cane', 'mane']\n",
1531 "['cart', 'cant', 'cane', 'pane']\n",
1532 "['cart', 'cant', 'cane', 'sane']\n",
1533 "['cart', 'cant', 'cane', 'vane']\n",
1534 "['cart', 'cant', 'cane', 'wane']\n",
1535 "['cart', 'cant', 'cane', 'cone']\n",
1536 "['cart', 'cant', 'cane', 'cafe']\n",
1537 "['cart', 'cant', 'cane', 'cage']\n",
1538 "['cart', 'cant', 'cane', 'cake']\n",
1539 "['cart', 'cant', 'cane', 'came']\n",
1540 "['cart', 'cant', 'cane', 'cape']\n",
1541 "['cart', 'cant', 'cane', 'care']\n",
1542 "['cart', 'cant', 'cane', 'case']\n",
1543 "['cart', 'cant', 'cane', 'cave']\n",
1544 "['cart', 'cant', 'cane', 'cans']\n",
1545 "['cart', 'cant', 'cans', 'bans']\n",
1546 "['cart', 'cant', 'cans', 'fans']\n",
1547 "['cart', 'cant', 'cans', 'mans']\n",
1548 "['cart', 'cant', 'cans', 'pans']\n",
1549 "['cart', 'cant', 'cans', 'sans']\n",
1550 "['cart', 'cant', 'cans', 'tans']\n",
1551 "['cart', 'cant', 'cans', 'vans']\n"
1557 "['cart', 'cant', 'cans', 'vans']"
1560 "execution_count": 20,
1562 "output_type": "execute_result"
1566 "bfs_search('cart', 'vans', debug=True)"
1570 "cell_type": "code",
1571 "execution_count": 21,
1577 "['cart', 'cant', 'cane', 'vane']"
1580 "execution_count": 21,
1582 "output_type": "execute_result"
1586 "bfs_search('cart', 'vane')"
1590 "cell_type": "code",
1591 "execution_count": 22,
2177 "execution_count": 22,
2179 "output_type": "execute_result"
2183 "dfs_search('cart', 'vane')"
2187 "cell_type": "code",
2188 "execution_count": 23,
2194 "def astar_search(start, goal, debug=False):\n",
2195 " agenda = [(distance(start, goal), [start])]\n",
2196 " heapq.heapify(agenda)\n",
2197 " finished = False\n",
2198 " while not finished and agenda:\n",
2199 " _, current = heapq.heappop(agenda)\n",
2201 " print(current)\n",
2202 " if current[-1] == goal:\n",
2203 " finished = True\n",
2205 " successors = extend(current)\n",
2206 " for s in successors:\n",
2207 " heapq.heappush(agenda, (len(current) + distance(s[-1], goal) - 1, s))\n",
2209 " return current\n",
2215 "cell_type": "code",
2216 "execution_count": 24,
2221 "output_type": "stream",
2224 "['cart', 'cant']\n",
2225 "['cart', 'cant', 'cane']\n",
2226 "['cart', 'cant', 'cane', 'vane']\n"
2232 "['cart', 'cant', 'cane', 'vane']"
2235 "execution_count": 24,
2237 "output_type": "execute_result"
2241 "astar_search('cart', 'vane', debug=True)"
2245 "cell_type": "code",
2246 "execution_count": 81,
2252 "def astar_search_closed(start, goal, debug=False):\n",
2253 " agenda = [(distance(start, goal), [start])]\n",
2254 " heapq.heapify(agenda)\n",
2255 " closed = set()\n",
2256 " finished = False\n",
2257 " while not finished and agenda:\n",
2258 " _, current = heapq.heappop(agenda)\n",
2260 " print(current)\n",
2261 " if current[-1] == goal:\n",
2262 " finished = True\n",
2264 " closed.add(current[-1])\n",
2265 " successors = extend(current, closed)\n",
2266 " for s in successors:\n",
2267 " heapq.heappush(agenda, (len(current) + distance(s[-1], goal) - 1, s))\n",
2269 " return current\n",
2275 "cell_type": "code",
2276 "execution_count": 26,
2281 "output_type": "stream",
2284 "['cart', 'cant']\n",
2285 "['cart', 'cant', 'cane']\n",
2286 "['cart', 'cant', 'cane', 'vane']\n"
2292 "['cart', 'cant', 'cane', 'vane']"
2295 "execution_count": 26,
2297 "output_type": "execute_result"
2301 "astar_search_closed('cart', 'vane', debug=True)"
2305 "cell_type": "markdown",
2308 "# Mutually-reachable sets\n",
2310 "Find the transitive closure of the `neighbours` relation, so we can see which words can be transformed into which other words."
2314 "cell_type": "code",
2315 "execution_count": 27,
2324 "execution_count": 27,
2326 "output_type": "execute_result"
2330 "candidates = [set([k] + neighbours[k]) for k in neighbours]\n",
2331 "reachables = []\n",
2332 "while candidates:\n",
2333 " current = set(candidates.pop())\n",
2334 " altered = False\n",
2335 " for other in candidates:\n",
2336 " if current.intersection(other):\n",
2337 " altered = True\n",
2338 " current.update(other)\n",
2339 " candidates.remove(other)\n",
2341 " candidates.append(current)\n",
2343 " reachables.append(current)\n",
2349 "cell_type": "code",
2350 "execution_count": 28,
2359 "execution_count": 28,
2361 "output_type": "execute_result"
2365 "len(max(reachables, key=len))"
2369 "cell_type": "code",
2370 "execution_count": 29,
2379 "execution_count": 29,
2381 "output_type": "execute_result"
2385 "len(min(reachables, key=len))"
2389 "cell_type": "code",
2390 "execution_count": 30,
2398 "Counter({1: 75, 2: 6, 3: 7, 4: 2, 5: 2, 6: 1, 2204: 1})"
2401 "execution_count": 30,
2403 "output_type": "execute_result"
2407 "collections.Counter(len(r) for r in reachables)"
2411 "cell_type": "code",
2412 "execution_count": 31,
2421 "execution_count": 31,
2423 "output_type": "execute_result"
2427 "[len(r) for r in reachables if 'abbe' in r]"
2431 "cell_type": "code",
2432 "execution_count": 32,
2438 "[{'abbe', 'able', 'ably', 'ally', 'axle'}]"
2441 "execution_count": 32,
2443 "output_type": "execute_result"
2447 "[r for r in reachables if 'abbe' in r]"
2451 "cell_type": "code",
2452 "execution_count": 76,
2460 "[{'demo', 'memo'},\n",
2461 " {'thou', 'thru'},\n",
2462 " {'crud', 'crux'},\n",
2463 " {'bevy', 'levy'},\n",
2464 " {'ogle', 'ogre'},\n",
2465 " {'idol', 'idyl'},\n",
2466 " {'also', 'alto', 'auto'},\n",
2467 " {'used', 'user', 'uses'},\n",
2468 " {'idle', 'idly', 'isle'},\n",
2469 " {'eddy', 'edge', 'edgy'},\n",
2470 " {'opal', 'oral', 'oval'},\n",
2471 " {'icon', 'ikon', 'iron'},\n",
2472 " {'afar', 'agar', 'ajar'},\n",
2473 " {'each', 'etch', 'inch', 'itch'},\n",
2474 " {'high', 'nigh', 'sigh', 'sign'},\n",
2475 " {'abbe', 'able', 'ably', 'ally', 'axle'},\n",
2476 " {'info', 'into', 'onto', 'undo', 'unto'},\n",
2477 " {'ache', 'achy', 'acme', 'acne', 'acre', 'ashy'}]"
2480 "execution_count": 76,
2482 "output_type": "execute_result"
2486 "sorted((r for r in reachables if len(r) > 1 if len(r) < 10), key=len)"
2490 "cell_type": "code",
2491 "execution_count": 80,
2497 "'adze; agog; ague; ahoy; alga; ammo; amok; anal; ankh; apse; aqua; aura; avow; awol; bozo; ebbs; echo; ecru; emus; ends; envy; epee; epic; espy; euro; evil; exam; expo; guru; hymn; ibex; iffy; imam; iota; isms; judo; kiwi; liar; luau; lynx; mayo; meow; myna; nova; obey; oboe; odor; ohms; okra; oleo; once; onyx; orgy; ovum; rely; rhea; semi; sexy; stye; sync; taxi; tofu; tuft; tutu; twos; ugly; ulna; upon; urge; uric; urns; void; wiki; yeti; zebu'"
2500 "execution_count": 80,
2502 "output_type": "execute_result"
2506 "'; '.join(sorted(list(r)[0] for r in reachables if len(r) == 1))"
2510 "cell_type": "code",
2511 "execution_count": 33,
2517 "['buns', 'bunk', 'punk']"
2520 "execution_count": 33,
2522 "output_type": "execute_result"
2526 "astar_search('buns', 'punk')"
2530 "cell_type": "code",
2531 "execution_count": 34,
2537 "for a in reachables:\n",
2538 " for b in reachables:\n",
2540 " if not a.isdisjoint(b):\n",
2545 "cell_type": "code",
2546 "execution_count": 35,
2552 "# longest_chain = []\n",
2553 "# with open('all-chains-4.txt', 'w', 1) as f:\n",
2554 "# for ws in reachables:\n",
2558 "# chain = astar_search(s, t)\n",
2560 "# f.write('{}\\n'.format(chain))\n",
2561 "# if len(chain) > len(longest_chain):\n",
2562 "# longest_chain = chain\n",
2568 "cell_type": "code",
2569 "execution_count": 36,
2575 "bigset = max(reachables, key=len)"
2579 "cell_type": "code",
2580 "execution_count": 37,
2585 "output_type": "stream",
2587 "['army', 'arms', 'aims', 'aids', 'bids', 'bias', 'boas', 'boat', 'goat', 'gnat', 'gnaw']\n",
2588 "['hoes', 'toes', 'toms', 'tams', 'tame']\n",
2589 "['vane', 'vine', 'wine', 'wire', 'wiry', 'airy', 'awry', 'away']\n",
2590 "['mate', 'late', 'lane', 'land', 'laid', 'lain']\n",
2591 "['heal', 'head', 'bead', 'bend', 'bond', 'bone']\n",
2592 "['dune', 'dine', 'dins', 'dies', 'died', 'tied']\n",
2593 "['ions', 'dons', 'does', 'hoes', 'hoed', 'heed']\n",
2594 "['puck', 'pick', 'pink', 'mink', 'mine']\n",
2595 "['need', 'deed', 'died', 'dies', 'dims', 'dams', 'days', 'drys']\n",
2596 "['pore', 'core', 'code', 'cods', 'cuds']\n",
2597 "['mote', 'mite', 'mile', 'wile', 'wise']\n",
2598 "['wait', 'wail', 'mail', 'mall', 'male']\n",
2599 "['wail', 'bail', 'ball', 'boll', 'bolt', 'boot', 'boom', 'zoom']\n",
2600 "['beat', 'beet', 'bees', 'bets', 'bats', 'cats']\n",
2601 "['tore', 'tire', 'tile', 'vile', 'vise', 'visa']\n",
2602 "['went', 'pent', 'pant']\n",
2603 "['lick', 'sick', 'sics', 'sips', 'sops', 'oops']\n",
2604 "['womb', 'tomb', 'toms', 'toes', 'does', 'dyes', 'ayes', 'apes', 'aped']\n",
2605 "['cure', 'sure']\n",
2606 "['cute', 'cuts', 'guts', 'guys', 'gays']\n"
2611 "for _ in range(20):\n",
2612 " start, goal = random.sample(bigset, 2)\n",
2613 " print(astar_search_closed(start, goal))"
2617 "cell_type": "code",
2618 "execution_count": 38,
2624 "['cops', 'coos', 'coon', 'coin', 'chin', 'thin', 'this', 'thus', 'thug']"
2627 "execution_count": 38,
2629 "output_type": "execute_result"
2633 "astar_search('cops', 'thug')"
2637 "cell_type": "code",
2638 "execution_count": 39,
2647 "execution_count": 39,
2649 "output_type": "execute_result"
2653 "[len(r) for r in reachables if 'love' in r if 'hate' in r]"
2657 "cell_type": "code",
2658 "execution_count": 40,
2667 "execution_count": 40,
2669 "output_type": "execute_result"
2673 "[len(r) for r in reachables if 'stay' in r ]"
2677 "cell_type": "code",
2678 "execution_count": 41,
2684 "['hate', 'have', 'hove', 'love']"
2687 "execution_count": 41,
2689 "output_type": "execute_result"
2693 "astar_search('hate', 'love')"
2697 "cell_type": "code",
2698 "execution_count": 42,
2704 "['wars', 'ware', 'wave', 'wove', 'love']"
2707 "execution_count": 42,
2709 "output_type": "execute_result"
2713 "astar_search('wars', 'love')"
2717 "cell_type": "code",
2718 "execution_count": 43,
2723 "output_type": "stream",
2725 "CPU times: user 0 ns, sys: 0 ns, total: 0 ns\n",
2726 "Wall time: 185 µs\n"
2735 "execution_count": 43,
2737 "output_type": "execute_result"
2741 "%time len(astar_search('wars', 'love'))"
2745 "cell_type": "code",
2746 "execution_count": 44,
2751 "output_type": "stream",
2753 "CPU times: user 0 ns, sys: 0 ns, total: 0 ns\n",
2754 "Wall time: 398 µs\n"
2763 "execution_count": 44,
2765 "output_type": "execute_result"
2769 "%time len(astar_search_closed('wars', 'love'))"
2773 "cell_type": "code",
2774 "execution_count": 45,
2779 "output_type": "stream",
2781 "CPU times: user 32 ms, sys: 0 ns, total: 32 ms\n",
2782 "Wall time: 32.3 ms\n"
2791 "execution_count": 45,
2793 "output_type": "execute_result"
2797 "%time len(dfs_search('wars', 'love'))"
2801 "cell_type": "code",
2802 "execution_count": 46,
2808 "# %time len(bfs_search('wars', 'love'))"
2812 "cell_type": "code",
2813 "execution_count": 47,
2818 "output_type": "stream",
2820 "CPU times: user 212 ms, sys: 0 ns, total: 212 ms\n",
2821 "Wall time: 213 ms\n"
2830 "execution_count": 47,
2832 "output_type": "execute_result"
2836 "%time len(bfs_search_closed('wars', 'love'))"
2840 "cell_type": "code",
2841 "execution_count": 48,
2847 "['fear', 'feat', 'fest', 'lest', 'lost', 'lose', 'love']"
2850 "execution_count": 48,
2852 "output_type": "execute_result"
2856 "astar_search('fear', 'love')"
2860 "cell_type": "code",
2861 "execution_count": 49,
2867 "['fail', 'fall', 'pall', 'pals', 'pass']"
2870 "execution_count": 49,
2872 "output_type": "execute_result"
2876 "astar_search('fail', 'pass')"
2880 "cell_type": "code",
2881 "execution_count": 50,
2887 "['star', 'soar', 'boar', 'boor', 'boon', 'born']"
2890 "execution_count": 50,
2892 "output_type": "execute_result"
2896 "astar_search('star', 'born')"
2900 "cell_type": "code",
2901 "execution_count": 51,
2920 "execution_count": 51,
2922 "output_type": "execute_result"
2926 "astar_search('open', 'pass')"
2930 "cell_type": "code",
2931 "execution_count": 52,
2953 "execution_count": 52,
2955 "output_type": "execute_result"
2959 "neighbours['pass']"
2963 "cell_type": "code",
2964 "execution_count": 53,
2973 "execution_count": 53,
2975 "output_type": "execute_result"
2979 "[len(r) for r in reachables if 'exam' in r]"
2983 "cell_type": "code",
2984 "execution_count": 54,
2993 "execution_count": 54,
2995 "output_type": "execute_result"
2999 "[len(r) for r in reachables if 'star' in r if 'born' in r]"
3003 "cell_type": "code",
3004 "execution_count": 55,
3009 "output_type": "stream",
3011 "1 loop, best of 3: 8.21 s per loop\n"
3017 "astar_search('bats', 'exit')"
3021 "cell_type": "code",
3022 "execution_count": 56,
3027 "output_type": "stream",
3029 "10 loops, best of 3: 145 ms per loop\n"
3035 "astar_search_closed('bats', 'exit')"
3039 "cell_type": "code",
3040 "execution_count": 57,
3058 "execution_count": 57,
3060 "output_type": "execute_result"
3064 "astar_search_closed('bats', 'exit')"
3068 "cell_type": "code",
3069 "execution_count": 58,
3075 "# solutions = {}\n",
3076 "# for _ in range(10000):\n",
3077 "# start, goal = random.sample(bigset, 2)\n",
3078 "# solution = astar_search_closed(start, goal)\n",
3079 "# sl = len(solution)\n",
3080 "# if sl not in solutions:\n",
3081 "# solutions[sl] = []\n",
3082 "# if len(solutions[sl]) < 4:\n",
3083 "# solutions[sl].append([start, goal])\n",
3085 "# # if len(solution) >= 10:\n",
3086 "# # solutions += [solution]\n",
3092 "cell_type": "code",
3093 "execution_count": 59,
3099 "solutions = {2: [['heel', 'keel'], ['wane', 'wave'], ['cell', 'sell'], ['cons', 'cobs']],\n",
3100 " 3: [['hank', 'haws'], ['bars', 'bets'], ['rats', 'paws'], ['lock', 'hack']],\n",
3101 " 4: [['rule', 'sore'], ['wavy', 'rape'], ['peas', 'ping'], ['bond', 'toll']],\n",
3102 " 5: [['cope', 'yowl'], ['lose', 'loci'], ['rump', 'dash'], ['four', 'dyes']],\n",
3103 " 6: [['boon', 'sell'], ['lots', 'pomp'], ['cola', 'turn'], ['boos', 'laid']],\n",
3104 " 7: [['eave', 'inns'], ['meek', 'mere'], ['keys', 'wily'], ['slam', 'yore']],\n",
3105 " 8: [['hack', 'flip'], ['crag', 'huge'], ['flux', 'gill'], ['play', 'busy']],\n",
3106 " 9: [['lacy', 'whey'], ['wren', 'rook'], ['lire', 'drip'], ['grab', 'lame']],\n",
3107 " 10: [['over', 'turn'], ['worn', 'anew'], ['stow', 'elks'], ['ergo', 'rich']],\n",
3108 " 11: [['bask', 'idea'], ['gabs', 'thud'], ['idea', 'clod'], ['mark', 'ibis']],\n",
3109 " 12: [['umps', 'torn'], ['futz', 'shun'], ['abut', 'face'], ['slug', 'open']],\n",
3110 " 13: [['umps', 'skin'], ['chum', 'rats'], ['fury', 'chum'], ['omen', 'zany']],\n",
3111 " 14: [['chug', 'gaff'], ['atom', 'fizz'], ['chug', 'jinn'], ['amen', 'flog'],\n",
3112 " ['buzz', 'grog'], ['imps', 'pros']],\n",
3113 " 15: [['chug', 'oxen'], ['amen', 'doff']]}"
3117 "cell_type": "code",
3118 "execution_count": 60,
3123 "output_type": "stream",
3125 "1 loop, best of 3: 334 ms per loop\n"
3131 "astar_search_closed('blab', 'amen')"
3135 "cell_type": "code",
3136 "execution_count": 61,
3141 "output_type": "stream",
3143 "CPU times: user 344 ms, sys: 0 ns, total: 344 ms\n",
3144 "Wall time: 342 ms\n"
3153 "execution_count": 61,
3155 "output_type": "execute_result"
3159 "%time len(astar_search_closed('blab', 'amen'))"
3163 "cell_type": "code",
3164 "execution_count": 62,
3169 "output_type": "stream",
3171 "CPU times: user 92 ms, sys: 0 ns, total: 92 ms\n",
3172 "Wall time: 93.7 ms\n"
3181 "execution_count": 62,
3183 "output_type": "execute_result"
3187 "%time len(astar_search_closed('amen', 'doff'))"
3191 "cell_type": "code",
3192 "execution_count": 63,
3197 "output_type": "stream",
3199 "CPU times: user 32 ms, sys: 0 ns, total: 32 ms\n",
3200 "Wall time: 32.8 ms\n"
3209 "execution_count": 63,
3211 "output_type": "execute_result"
3215 "%time len(astar_search_closed('chug', 'jinn'))"
3219 "cell_type": "code",
3220 "execution_count": 64,
3225 "output_type": "stream",
3227 "CPU times: user 16 ms, sys: 0 ns, total: 16 ms\n",
3228 "Wall time: 16.4 ms\n"
3237 "execution_count": 64,
3239 "output_type": "execute_result"
3243 "%time len(astar_search_closed('amen', 'flog'))"
3247 "cell_type": "code",
3248 "execution_count": 65,
3253 "output_type": "stream",
3255 "CPU times: user 256 ms, sys: 0 ns, total: 256 ms\n",
3256 "Wall time: 253 ms\n"
3265 "execution_count": 65,
3267 "output_type": "execute_result"
3271 "%time len(astar_search_closed('buzz', 'grog'))"
3275 "cell_type": "code",
3276 "execution_count": 66,
3281 "output_type": "stream",
3283 "CPU times: user 36 ms, sys: 0 ns, total: 36 ms\n",
3284 "Wall time: 34.2 ms\n"
3293 "execution_count": 66,
3295 "output_type": "execute_result"
3299 "%time len(astar_search_closed('imps', 'pros'))"
3303 "cell_type": "code",
3304 "execution_count": 67,
3309 "output_type": "stream",
3321 "execution_count": 67,
3323 "output_type": "execute_result"
3327 "nb_count = collections.Counter()\n",
3328 "for w in neighbours['rash']:\n",
3329 " for w2 in neighbours[w]:\n",
3330 " if w2 == 'bush': print(w, w2, w2 not in neighbours['rash'])\n",
3331 " if w2 != 'rash' and w2 not in neighbours['rash']:\n",
3332 " nb_count.update([w2])\n",
3333 "nb_count.most_common(1)[0][1]"
3337 "cell_type": "code",
3338 "execution_count": 68,
3344 "['gush', 'hush', 'lush', 'mush', 'push', 'tush', 'bosh']"
3347 "execution_count": 68,
3349 "output_type": "execute_result"
3353 "[w for w in neighbours['bush'] if w in nb_count]"
3357 "cell_type": "code",
3358 "execution_count": 69,
3367 "execution_count": 69,
3369 "output_type": "execute_result"
3373 "best_start = ''\n",
3374 "best_overlap_count = 0\n",
3375 "for w0 in neighbours: \n",
3376 " nb_count = collections.Counter()\n",
3377 " for w in neighbours[w0]:\n",
3378 " for w2 in neighbours[w]:\n",
3379 " if w2 != w0 and w2 not in neighbours[w0]:\n",
3380 " nb_count.update([w2])\n",
3381 " if len(nb_count) > 0:\n",
3382 " if nb_count.most_common(1)[0][1] > best_overlap_count:\n",
3383 " best_start = w0\n",
3384 " best_overlap_count = nb_count.most_common(1)[0][1]\n",
3386 "best_start, best_overlap_count"
3390 "cell_type": "code",
3391 "execution_count": 70,
3400 "execution_count": 70,
3402 "output_type": "execute_result"
3410 "cell_type": "code",
3411 "execution_count": 71,
3420 "execution_count": 71,
3422 "output_type": "execute_result"
3426 "set(neighbours['rash']) & set(neighbours['bush'])"
3430 "cell_type": "code",
3431 "execution_count": null,
3441 "display_name": "Python 3",
3442 "language": "python",
3446 "codemirror_mode": {
3450 "file_extension": ".py",
3451 "mimetype": "text/x-python",
3453 "nbconvert_exporter": "python",
3454 "pygments_lexer": "ipython3",