fork download
  1. import Data.List (sort)
  2.  
  3. nums :: [String]
  4. nums = map show . filter (\x -> x < 10 || x `rem` 10 /= 0) $ [1..9] ++ [1001,1000..10]
  5.  
  6. numShiritori :: [String]
  7. numShiritori = f nums
  8. where
  9. f [] = []
  10. f (x:xs) = x : f next
  11. where
  12. next = g xs []
  13. g [] _ = []
  14. g (y:ys) acc | last x == head y = y : reverse acc ++ ys
  15. | otherwise = g ys (y:acc)
  16.  
  17. main :: IO ()
  18. main = do
  19. print $ sort nums == sort numShiritori
  20. print $ isShiritori numShiritori
  21. putStrLn . unwords $ numShiritori
  22.  
  23. -- for debug
  24. isShiritori :: [String] -> Bool
  25. isShiritori [] = True
  26. isShiritori [_] = True
  27. isShiritori (x:y:ys) = last x == head y && isShiritori (y:ys)
  28.  
Success #stdin #stdout 0s 6240KB
stdin
Standard input is empty
stdout
True
True
1 1001 199 9 999 998 8 899 997 7 799 996 6 699 995 5 599 994 4 499 993 3 399 992 2 299 991 198 898 897 798 896 698 895 598 894 498 893 398 892 298 891 197 797 796 697 795 597 794 497 793 397 792 297 791 196 696 695 596 694 496 693 396 692 296 691 195 595 594 495 593 395 592 295 591 194 494 493 394 492 294 491 193 393 392 293 391 192 292 291 191 189 989 988 889 987 789 986 689 985 589 984 489 983 389 982 289 981 188 888 887 788 886 688 885 588 884 488 883 388 882 288 881 187 787 786 687 785 587 784 487 783 387 782 287 781 186 686 685 586 684 486 683 386 682 286 681 185 585 584 485 583 385 582 285 581 184 484 483 384 482 284 481 183 383 382 283 381 182 282 281 181 179 979 978 879 977 779 976 679 975 579 974 479 973 379 972 279 971 178 878 877 778 876 678 875 578 874 478 873 378 872 278 871 177 777 776 677 775 577 774 477 773 377 772 277 771 176 676 675 576 674 476 673 376 672 276 671 175 575 574 475 573 375 572 275 571 174 474 473 374 472 274 471 173 373 372 273 371 172 272 271 171 169 969 968 869 967 769 966 669 965 569 964 469 963 369 962 269 961 168 868 867 768 866 668 865 568 864 468 863 368 862 268 861 167 767 766 667 765 567 764 467 763 367 762 267 761 166 666 665 566 664 466 663 366 662 266 661 165 565 564 465 563 365 562 265 561 164 464 463 364 462 264 461 163 363 362 263 361 162 262 261 161 159 959 958 859 957 759 956 659 955 559 954 459 953 359 952 259 951 158 858 857 758 856 658 855 558 854 458 853 358 852 258 851 157 757 756 657 755 557 754 457 753 357 752 257 751 156 656 655 556 654 456 653 356 652 256 651 155 555 554 455 553 355 552 255 551 154 454 453 354 452 254 451 153 353 352 253 351 152 252 251 151 149 949 948 849 947 749 946 649 945 549 944 449 943 349 942 249 941 148 848 847 748 846 648 845 548 844 448 843 348 842 248 841 147 747 746 647 745 547 744 447 743 347 742 247 741 146 646 645 546 644 446 643 346 642 246 641 145 545 544 445 543 345 542 245 541 144 444 443 344 442 244 441 143 343 342 243 341 142 242 241 141 139 939 938 839 937 739 936 639 935 539 934 439 933 339 932 239 931 138 838 837 738 836 638 835 538 834 438 833 338 832 238 831 137 737 736 637 735 537 734 437 733 337 732 237 731 136 636 635 536 634 436 633 336 632 236 631 135 535 534 435 533 335 532 235 531 134 434 433 334 432 234 431 133 333 332 233 331 132 232 231 131 129 929 928 829 927 729 926 629 925 529 924 429 923 329 922 229 921 128 828 827 728 826 628 825 528 824 428 823 328 822 228 821 127 727 726 627 725 527 724 427 723 327 722 227 721 126 626 625 526 624 426 623 326 622 226 621 125 525 524 425 523 325 522 225 521 124 424 423 324 422 224 421 123 323 322 223 321 122 222 221 121 119 919 918 819 917 719 916 619 915 519 914 419 913 319 912 219 911 118 818 817 718 816 618 815 518 814 418 813 318 812 218 811 117 717 716 617 715 517 714 417 713 317 712 217 711 116 616 615 516 614 416 613 316 612 216 611 115 515 514 415 513 315 512 215 511 114 414 413 314 412 214 411 113 313 312 213 311 112 212 211 111 109 909 908 809 907 709 906 609 905 509 904 409 903 309 902 209 901 108 808 807 708 806 608 805 508 804 408 803 308 802 208 801 107 707 706 607 705 507 704 407 703 307 702 207 701 106 606 605 506 604 406 603 306 602 206 601 105 505 504 405 503 305 502 205 501 104 404 403 304 402 204 401 103 303 302 203 301 102 202 201 101 19 99 98 89 97 79 96 69 95 59 94 49 93 39 92 29 91 18 88 87 78 86 68 85 58 84 48 83 38 82 28 81 17 77 76 67 75 57 74 47 73 37 72 27 71 16 66 65 56 64 46 63 36 62 26 61 15 55 54 45 53 35 52 25 51 14 44 43 34 42 24 41 13 33 32 23 31 12 22 21 11