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