diff --git a/src/plasl/2025/day6/input b/src/plasl/2025/day6/input new file mode 100644 index 0000000..2e37a4b --- /dev/null +++ b/src/plasl/2025/day6/input @@ -0,0 +1,5 @@ +617 828 937 2344 145 37 83 845 37 7 882 928 48 929 79 69 119 36 95 7 12 2 778 7 9 1897 361 1 988 84 86 978 5 737 3 973 3 518 31 3 57 92 61 9488 491 6 86 238 53 841 79 664 22 9 84 8 368 982 5 9 93 653 52 93 66 5 81 688 25 886 67 8 462 9 1 473 3753 391 929 236 9 98 9 6139 5 9 2 67 6 9 2739 1189 43 14 49 26 5 2661 73 588 291 296 84 52 382 5891 95 9 9 477 1 3 174 595 69 88 16 56 29 6 6 482 8817 582 116 68 489 5 366 19 23 3441 256 24 193 5671 59 34 8 675 4 27 287 61 77 2 225 56 97 2121 95 28 3 914 9 3995 874 317 13 858 64 6261 44 285 68 9 4149 2 155 96 2 84 46 21 8134 712 795 5 19 3 8 4691 95 157 944 26 8 375 116 65 8 536 4 768 94 359 8 475 1854 2 7316 7 7 919 12 29 5195 7 95 87 87 21 5279 7 63 953 77 6 898 24 51 41 8 975 69 611 5 131 773 9 343 91 4 436 79 49 24 4545 776 89 415 86 6 55 16 751 29 2585 37 966 321 91 6534 839 88 16 91 73 756 93 65 217 74 1469 254 74 6736 17 349 86 31 75 34 947 93 41 7759 654 87 15 39 22 55 7282 33 87 9 437 8918 65 27 344 9527 948 54 1 42 93 427 82 242 936 67 38 1 81 97 4 4519 42 959 81 92 42 56 1295 8 7 43 2 6742 81 2 3 776 99 7 8 89 6 512 542 18 73 924 493 51 66 665 35 3444 253 47 955 4 7826 329 1 92 7189 2 22 5 333 77 892 92 29 26 8 5 32 24 98 78 1 361 528 28 27 94 9612 5 281 32 2 693 867 85 43 5 77 7 22 61 6 138 81 684 76 22 886 49 39 22 4 938 45 9 6 2876 2 72 85 928 84 55 88 89 511 5 638 329 35 21 35 24 7 86 96 9 891 6 2 15 5 1773 39 41 96 4 4666 832 53 53 13 954 83 679 18 3964 74 149 65 8 428 61 783 9 9 53 69 12 3 29 472 88 936 117 7698 21 597 982 8 37 86 4 61 67 7367 737 4182 84 64 61 77 58 284 4892 84 581 38 695 26 3 93 4 189 116 91 854 5 92 95 41 18 888 3 13 746 8 21 9534 4172 468 223 47 968 33 875 969 62 23 645 517 87 154 5241 14 4 328 415 552 11 594 71 7 27 972 25 33 81 14 639 8296 8695 234 83 43 46 13 34 48 387 985 266 525 999 294 74 773 6 249 855 557 613 86 568 64 3 78 9388 87 7 86 66 924 12 12 74 76 6 7 19 6256 88 3 35 694 28 9439 48 827 66 13 8729 62 2145 86 6 87 1 49 6724 56 5 171 2 512 23 73 59 35 5 272 228 39 52 39 2529 26 51 18 315 152 35 7193 835 5 423 5193 56 582 796 697 548 4 29 48 282 1 34 79 99 11 15 75 641 343 224 213 725 1 87 73 65 5 44 9959 43 5543 299 7413 525 764 6899 976 21 85 1 6 853 833 62 75 91 8 4 15 51 51 1 462 435 7615 35 622 34 111 1 435 766 375 7 6 842 48 4279 1 6286 1859 4 44 28 361 62 45 62 6 812 115 7 491 4 6892 4297 159 59 865 53 99 6 73 55 99 47 648 69 193 5 19 698 67 535 4 95 72 46 14 5441 8717 84 17 864 84 41 52 49 17 1 46 2 5 129 5 775 33 31 347 7 47 54 5 86 75 32 158 93 73 7 79 53 974 219 5 36 8537 199 52 8393 765 47 3465 12 264 13 214 39 389 4267 74 72 3 594 6 53 334 62 4528 99 39 774 93 147 32 439 36 549 7285 69 498 51 545 82 87 77 79 58 23 1 741 374 1 7 832 51 23 35 4524 5682 9131 3455 18 13 35 9582 924 75 3 366 728 18 64 171 679 2 23 29 5 2648 255 36 2 6314 7 5 3 6377 72 5 14 72 4448 542 1124 51 238 343 5521 194 368 74 482 26 586 94 71 42 2825 959 6 8 13 94 38 53 68 855 4299 3 73 277 78 79 1 7 726 699 17 35 76 648 891 913 259 41 7 21 8 17 86 861 34 533 1 3 5 11 486 8 5 672 44 2 27 82 5 52 872 7 71 529 399 73 24 96 1 33 77 7125 87 59 2465 349 4151 158 288 93 69 5 9 73 26 16 392 77 117 88 5259 373 141 72 2 61 2193 87 764 84 1879 435 97 96 162 715 33 491 1 382 145 56 31 37 49 976 6 36 5 852 656 74 47 93 87 8794 51 27 7211 9918 3 63 94 3 57 758 3 954 49 57 32 895 +478 337 998 3442 618 226 22 45 656 66 47 653 36 72 821 27 957 8263 63 13 515 1 358 8 476 1485 662 293 775 65 88 541 61 851 52 487 72 775 98 17 156 427 91 2892 682 89 483 239 14 491 51 579 76 2 59 4 311 996 19 96 84 428 551 785 81 48 123 158 35 556 96 69 324 3 5 961 3222 492 436 948 156 73 44 6856 84 54 89 91 91 21 3297 3353 43 76 54 16 4 6197 38 734 959 947 2 678 145 5191 13 2 1 622 73 72 617 881 77 386 38 76 65 14 87 37 8719 432 435 54 122 47 985 28 81 135 8 15 828 3272 314 585 6 933 7 16 469 62 61 93 891 66 315 1666 44 4897 37 875 1 7689 328 271 57 714 71 1786 79 565 91 6 5462 11 635 25 8 44 15 79 4251 17 228 3 77 46 35 2978 82 999 2364 55 7 366 116 44 4 8848 3 11 76 333 52 589 465 82 4397 97 61 322 64 29 441 57 65 87 553 697 4616 84 88 71 521 56 274 689 91 17 54 17 63 219 7 234 21 52 3267 116 221 399 28 1 34 6832 796 39 249 2419 37 37 3556 381 35 9377 45 299 857 642 8919 47 45 113 74 53 381 28 6 724 22 8713 751 15 8837 61 371 7621 493 47 38 766 51 3 6128 355 37 86 88 84 351 59 51 88 22 929 116 615 64 123 5624 576 84 38 993 71 833 64 399 838 86 73 19 15 6 561 1183 12 573 23 421 89 48 7811 93 44 44 7497 93 481 18 3 829 79 47 841 77 3 523 834 62 16 4558 2894 18 94 157 95 1972 889 7953 643 77 7639 154 5 92 6595 24 352 3 998 58 531 36 45 864 83 28 6 38 96 33 6 624 89 86 45 95 1137 89 153 792 3 16 9 86 87 3 555 49 781 79 25 546 74 668 31 36 726 49 25 98 17 884 36 14 5 8169 8 81 72 245 15 95 65 11 992 8 488 7191 51 67 668 85 85 83 49 131 256 899 6 57 746 678 12 99 52 2 1911 588 59 39 39 698 323 847 78 5735 61 836 48 589 255 89 328 18 521 88 11 489 6 51 916 57 136 733 8894 98 975 252 8 87 74 48 85 44 5318 792 7675 34 24 259 55 42 899 4365 8 882 36 94 162 627 91 9 861 926 77 975 11 97 458 24 58 859 99 496 891 4 565 1315 84 967 134 55 753 87 778 188 64 65 319 896 74 143 7723 13 3 877 258 2 271 376 55 2 77 494 1237 13 942 91 892 4141 4636 397 27 79 33 23 33 33 194 278 247 877 35 491 61 661 3 415 857 882 499 69 925 196 76 927 6519 62 38 22 11 369 63 82 67 27 13 87 37 122 84 518 432 221 58 1151 97 244 99 39 6781 45 2915 73 61 29 85 18 9268 655 437 822 5 963 586 92 679 992 8 238 84 52 64 44 2982 13 57 59 1 564 92 4994 529 1 318 4924 76 567 136 792 386 4 51 71 631 214 438 325 24 32 24 24 255 472 579 956 234 84 57 413 77 6 15 5439 38 959 535 3839 559 788 2161 879 44 541 41 1 286 859 84 67 3647 58 2 24 48 57 968 283 642 5763 95 352 27 933 69 724 277 778 5 7 456 23 662 6 3637 2354 59 35 67 833 556 27 29 27 589 718 24 548 5 7781 124 769 85 635 58 68 72 21 2449 694 36 859 95 434 6 71 811 999 59 7 31 71 71 46 1354 3924 72 56 327 26 82 53 36 46 48 14 4 8 75 34 877 41 276 582 8 83 84 72 3 86 46 787 18 62 25 96 65 7935 224 62 35 8171 178 41 4835 166 31 8631 77 389 73 388 76 965 1294 41 76 91 619 56 73 23 94 5169 82 68 963 71 321 78 427 66 147 9524 64 113 65 799 97 21 35 24 37 98 26 525 388 95 1 8282 41 62 66 7263 2711 9599 3359 36 54 82 7184 94 56 68 2139 943 22 93 688 898 3 22 72 37 6644 265 75 35 592 765 137 375 3685 9 43 68 87 7663 927 2425 12 766 621 1788 719 93 624 756 86 533 37 162 4753 1232 216 41 69 41 994 45 89 436 195 9199 77 57 31 42 89 4384 99 861 143 55 63 756 622 137 939 712 95 15 14 743 26 62 795 6689 7783 18 83 51 18 343 23 95 48 989 4 8 73 873 48 494 23 89 623 527 26 46 956 4 74 49 4242 47 37 4797 419 4869 183 118 461 46 7 2 67 53 28 633 55 718 917 7533 5585 622 738 1 2 7248 74 831 88 6387 645 98 55 915 9255 41 115 879 944 231 19 36 15 88 35 61 97 8 153 974 91 41 26 42 7924 16 65 7192 1995 637 28 92 91 37 719 1 435 44 45 28 951 +48 61 331 426 23 8168 997 19 737 93 15 712 51 8 165 94 538 7915 57 88 991 44 46 3 258 66 772 252 291 73 43 745 25 69 75 614 68 557 83 79 284 361 16 4367 89 12 951 665 35 698 44 594 15 18 56 2 948 276 464 8884 82 87 631 434 995 932 986 6556 554 792 557 86 271 1 29 68 3728 57 729 584 874 263 83 233 121 97 83 49 57 83 135 861 14 67 941 91 64 8497 69 484 818 7 4 685 63 7929 78 9 478 943 95 486 199 888 51 1734 69 561 81 56 61 79 8788 842 286 36 143 13 92 82 17 815 3 56 914 381 716 845 71 246 13 78 57 98 13 78 29 144 1762 12 49 5811 84 615 75 39 899 55 57 83 21 6539 1 37 27 14 858 87 691 884 7 77 28 74 8382 1 5 92 733 67 822 158 43 665 3356 41 568 3739 93 69 36 7755 46 52 89 653 311 96 862 267 4826 85 646 321 7 73 526 32 26 72 624 325 7211 19 599 34 1496 2492 32 123 69 9 75 47 26 937 5 718 35 82 7863 639 543 73 55 1 51 6251 523 941 44 6768 16 21 5413 556 936 8956 74 553 26 152 6329 3 4 2198 22 47 31 9 7 67 63 98 644 32 791 9966 9742 7683 762 64 39 683 37 8 3417 757 34 12 24 47 6185 94 77 74 23 948 382 632 62 772 815 982 11 829 524 62 797 38 976 759 4 692 32 7 4 558 6611 21 931 48 388 46 45 9331 945 748 548 2954 62 879 19 25 793 93 65 596 42 54 924 616 66 14 2216 1759 55 9 6429 11 5471 268 5724 945 51 8494 824 32 76 935 816 826 3 437 42 474 5 92 835 54 67 3 69 118 25 6 534 68 97 27 33 1175 19 195 369 97 24 4 23 7 1 123 956 181 3 291 234 63 632 381 13 38 315 25 27 29 737 97 7843 95 7172 21 78 343 451 17 52 99 4711 947 71 263 6976 67 66 924 82 21 72 23 781 1573 331 784 6 685 43 69 32 15 12 9125 3936 12 77 96 954 7949 9823 86 8953 65 8786 495 898 21 96 871 73 815 65 47 519 4 21 953 6 54 684 9117 77 441 198 598 2 2 79 93 47 2485 882 2676 81 28 642 4 279 4865 7946 7 73 39 19 3328 1427 92 87 274 694 88 76 543 31 521 361 56 722 84 394 698 64 989 3593 59 487 783 44 9962 53 218 654 16 81 358 255 3 668 475 87 6 892 748 1 868 72 73 13 47 574 2895 96 322 29 658 972 616 37 12 15 53 95 439 68 383 383 561 843 69 645 36 467 3 9831 265 948 276 48 612 435 19 483 87 28 87 62 67 994 34 73 45 33 52 96 46 63 991 612 2754 818 54 3848 44 56 76 58 2743 3 223 67 839 636 468 26 441 4664 652 497 61 81 999 94 2531 687 73 72 57 85 1 358 4621 93 96 71 4 271 34 6444 296 2 94 8436 27 599 852 273 9 46 8 36 26 983 781 867 3 731 42 238 214 427 12 377 265 57 83 651 457 84 8 53 54 7 272 8431 89 587 2998 328 36 193 258 41 81 29 92 76 9288 155 37 58 21 15 494 133 989 5294 55 316 85 359 43 613 276 946 779 1 738 85 86 586 3282 88 125 9 62 993 454 447 11 151 1 868 355 873 88 728 369 592 782 5546 95 45 25 5 5785 398 2 831 82 267 85 93 62 5312 94 968 36 58 3 849 9132 866 86 14 59 4 52 6 49 668 595 63 61 5 84 46 779 15 852 19 14 795 59 84 8 97 84 528 98 8 927 3 12 2298 637 481 32 7134 59 57 172 971 6879 5423 45 255 5 418 99 458 6615 82 91 378 425 27 46 13 19 2979 64 47 616 42 636 2 4 37 939 2 8 465 5 336 3 43 33 8 84 643 428 125 762 263 7 5868 91 38 12 5658 7987 2941 4848 54 99 35 9738 89 24 195 8183 17 29 48 927 757 338 5 94 35 8682 127 46 64 95 224 1423 3119 52 9 82 6 95 845 91 9167 68 726 251 8947 496 59 4441 319 14 876 94 764 5839 723 623 418 85 68 956 99 461 191 252 9598 16 57 33 9 47 1863 653 688 755 161 18 432 786 854 817 681 73 161 89 732 437 46 374 5566 7596 38 7562 117 66 999 87 65 8 345 62 7 8 359 957 254 96 78 793 447 62 22 983 393 87 34 556 73 8 9121 56 759 856 837 419 27 74 34 58 57 47 182 75 75 764 1648 7991 324 8124 65 4 6613 69 54 23 2574 581 28 467 543 4456 38 479 692 4258 66 751 94 54 26 66 8967 6 22 285 936 912 467 9 17 699 75 59 683 889 827 17 458 64 25 231 93 674 34 72 429 722 +44 55 14 12 6 6495 171 65 765 11 8 795 68 4 657 14 618 6148 626 91 525 93 27 76 313 79 76 193 7 94 93 459 17 93 22 67 74 77 82 23 819 929 54 5872 14 83 152 18 54 557 618 369 6 734 67 45 84 142 727 3555 8 48 193 513 117 446 287 1852 828 215 389 24 451 52 69 9 749 54 515 61 5374 494 17 623 942 13 51 89 87 79 166 3 31 42 824 96 42 8413 79 97 73 9 2 713 1 4293 5 92 325 476 11 7199 369 444 3 7771 78 193 81 16 42 84 328 864 875 32 3 38 13 86 614 35 6 515 24 47 281 987 58 638 86 33 31 3 84 41 2 953 7434 84 7 2254 32 741 832 51 8 9 23 61 91 276 2 1 4 88 1 69 98 268 77 45 55 63 8 6 4 77 896 16 9677 56 5 793 6595 26 514 2392 58 2 62 7368 21 3 67 611 465 7 63 581 21 15 725 33 1 1 36 93 34 417 758 518 14 15 2658 61 5877 5442 9 541 94 2 84 58 73 359 29 629 9 83 8386 718 764 76 27 5 1 97 571 286 64 3743 64 3 9492 168 357 248 32 627 87 414 9 4 7 7471 33 3 47 8 5 79 42 44 956 47 68 6771 8756 2689 464 68 8 572 6 8 3462 73 6 2 18 1 2925 5 7 22 39 616 415 938 47 936 117 869 88 963 323 4 61 41 93 678 7 431 444 5 2 328 6414 54 919 69 148 4 43 2 636 821 281 6983 5 522 447 94 8 18 27 213 35 19 332 13 18 63 1975 6283 16 9 6239 4 9137 149 9351 8 77 98 121 16 41 688 712 664 31 9 41 75 4 98 262 72 61 3 13 161 63 62 77 52 69 66 6 14 416 114 866 377 5 8 83 2 73 767 675 766 6 184 461 16 437 132 8 4 453 81 32 28 72 37 8881 55 9579 85 6 343 57 45 37 1 9313 873 48 7 4186 22 5 272 74 73 7 13 327 5341 632 593 2 868 7 9 41 87 33 336 1634 383 54 4 6 7486 9766 91 26 19 5463 573 794 3 84 84 83 685 2 6 193 75 4 11 3 5 792 53 59 81 1 667 8 9 69 773 9 9761 87 82 3 11 466 6 522 8497 64 8 9 862 19 9548 9516 23 59 577 5 24 3 174 38 858 928 69 511 94 253 87 29 827 569 92 542 531 9 9923 136 13 4 35 67 61 151 3 366 66 3 38 846 99 2 826 17 85 54 68 712 5283 93 475 9 181 517 47 58 45 58 5 31 177 19 736 61 469 295 7 816 6 429 94 6836 885 18 753 53 72 486 51 254 19 41 676 13 14 213 14 61 38 56 12 73 67 43 247 615 7558 11 6 24 81 37 79 43 22 2 358 41 281 183 913 9 159 7823 725 61 87 6 237 99 1638 483 49 85 2 81 5 335 6 688 47 9 5 293 81 88 884 66 4 192 32 455 4 996 9 38 2 95 74 774 219 925 8 695 1 515 282 7 44 8 337 843 2 929 772 75 3 3 21 7 362 971 56 244 9 22 39 484 9549 52 88 89 34 91 8897 686 39 22 11 81 291 2 852 779 4 796 11 212 56 5 99 9 857 26 61 49 44 478 4714 96 732 9 88 536 145 629 88 215 4 79 493 2 53 98 235 7 461 7965 84 15 93 1 3627 392 6 46 37 469 19 65 8 9163 55 975 3 56 8 372 157 28 57 3 4 2 46 9 7 186 568 94 231 37 9 57 425 92 949 86 77 459 92 33 1 33 33 7 44 8 593 3 74 3816 89 246 56 11 92 42 39 154 3336 91 44 361 8 1 64 2 3 84 49 788 85 959 6 5 48 5568 37 2 8 92 96 4 3 5 21 4 9 13 7 1 6 75 8 9 51 241 576 616 82 815 46 6379 32 53 4 1175 19 1369 3198 664 34 57 7361 4 25 785 8537 1 7 8 8 85 693 7 95 19 1833 838 6 224 6 939 3436 6361 24 4 17 1 37 23 9 2483 46 156 776 15 348 17 5522 37 94 71 68 475 5974 4 346 992 76 57 569 81 658 979 463 999 32 65 9 1 62 7816 933 628 977 326 728 373 978 23 41 6 93 617 28 654 869 86 29 9724 6531 77 2452 359 11 616 63 93 5 356 23 9 9 641 844 779 129 3 225 855 75 19 789 838 11 5 91 52 6 568 1 59 3386 42 769 12 98 158 73 44 46 19 38 3 325 29 6472 766 8211 88 8 64 23 73 8 828 393 99 431 12 3941 1 47 388 4269 38 468 17 4 16 9 2515 7 62 172 188 844 124 2 7 88 56 23 37 13 991 99 917 48 65 493 42 22 75 54 224 56 +* + * + + + * * * * + + * + + * + + * + + + + * + + * * + + * * * + * + * * * * + * * + * * * * + * * + * + * + + * * + + + * + * + + + * * * * + + * * + * * * + + * + * + + * + * + + * + * + + + * * + * + + * + + * + * + + * + * + * * * * + + + * + * * * + + * + + * + + + + * + * + + + + * + * + + * + + * * + * + + + * + + * * + + * + + * + * + + * + + * + + + * * + + * + * + * + + * + * + * + * + + * * + + + * * * + * + + + * + + + + + * * * * * + + * * + * * * + + + + + * * + + * + * + + + * + + + * + + * + * * * * * + + * + + + + * * + * + + + * * + + * + + * + * + + * + + + + * + + * * * * * + * + + * * + * * * + * + + * * * + + * * + * * * + * * * * * * + + * + + + + + + + + + + + * + + + + * * + * * * * * + + * * * * * + * * + + * * * + * * * * * + * * + * + + * * * + * * * + * + + + + * + * * * * + + * * + * * * + + + + * + + * * + + + + + * + + * * * * + + + + * + + + * * * + * * * * + * + * * + + * * * * + * + + + + * + * + + * + + + + * * * + + * + + * + * + * * * + + * + * * + + + * * * + * * + + * * * * + + + + + + * * * + * + * + + + * * + + * + + * + * + * + + * + * + * + + * + * + * + * + + * + + * + + + * * + + * + + * + + * + + * + * + + + + * * + * + + * * + * * * + + * + + + * + + + * + * + + + * + * + + * + * * + * * * + * + * * * * + + + * * + * * * * + + * + + + * * + * + + + * * * + + + * * * * * + * * + + * + + + + + * * + + * + + + + + * * * + + + * + * + * * + + + + + * * + * + * * * * + * + + + * * * + * + + + * * + + * * * + * + + * + * * + * * + * + + + + * * + * * * + + * * * + + + + * + + * + * + * * + + + + + + * * + + + * + * * + + * * + + * * + + * * + * + + + * + * + + + * + + + + * * * + + + * + * + + * + * * * * + + * * + + + + + * * + * + + + * + * + * * + + + * * * + + + + + * * + + + + + * * * * + + * + * + * * + * * * * + + + + + * + + * + * + * + * * * * + * * * + * * * * * * * + + + + + + + + + + * + + * * * * * + * * * + + * + + + + * * * + * + + * + * * + + + * + * * + + + + * * + + * * + * + + + * * * + + * + + + * + + diff --git a/src/plasl/2025/day6/part1.psl b/src/plasl/2025/day6/part1.psl new file mode 100644 index 0000000..358e047 --- /dev/null +++ b/src/plasl/2025/day6/part1.psl @@ -0,0 +1,176 @@ + +i64 write(i32, ptr i8, u64) { + `scsbsa` + syscall3(i64(1), `la` as i64, `lb` as i64, `lc` as i64) +} + +i64 read(i32, ptr i8, u64) { + `scsbsa` + syscall3(i64(0), `la` as i64, `lb` as i64, `lc` as i64) +} + +i32 open(ptr i8, i32, i32) { + `scsbsa` + syscall3(i64(2), `la` as i64, `lb` as i64, `lc` as i64) + as i32 +} + +void exit(i32) { + as i64 i64(231) rev + syscall1 trash +} + +void putc(i8) { + array i8[1] `dstr` store + write(1, `lt`, u64(1)) trash +} + +u64 strlen(ptr i8) { + dup while(dup load i8(0) !=) { 1+ } `r-` +} + +void print(ptr i8) { + 1 rev dup strlen write trash +} + +void println(ptr i8) { + print i8(10) putc +} + +void printnum(i32) { + + if (dup 0 ==) { + putc('0') + } else if (dup 0 <) { + `0r-` '-' putc + } + + array i8[11] 10+ dup i8(0) store -1+ `sb` + + while (dup 0 !=) { + 10 divmod 48+ as i8 + `lb` rev store + `lb` -1+ `sb` + } trash + print(`lb`1+) + +} + +void printnum64(u64) { + + if (dup u64(0) ==) { + putc('0') + } + + array i8[22] 22+ dup i8(0) store -1+ `sb` + + while (dup u64(0) !=) { + u64(10) divmod u64(48)+ as i8 + `lb` rev store + `lb` -1+ `sb` + } trash + + print(`lb`1+) + +} + +i32 atoi(ptr i8) { + set string + 0 + while (get string load '0' >= get string load '9' <= &) { + 10* get string load '0'- as i32 + + get string 1+ set string + } +} + +u64 atol(ptr i8) { + set string + u64(0) + while (get string load '0' >= get string load '9' <= &) { + u64(10)* get string load '0'- as u64 + + get string 1+ set string + } +} + + +i32 abs(i32) { + if (dup 0 <) {`0r-`} +} + +void _start() { + + open("input", 0, 0) set file + array i8[65535] set buffer + get buffer i8(48) store + read(get file, get buffer, u64(65535)) as i32 set size + #get buffer get size+ i8(10) store + + u64(0) `so` + + array ptr i8[10] set pointers + + pointers[0] get buffer store + 1 set pointerlen + + `0si` + while (buffer[get i] load '*' != buffer[get i] load '+' != &) { + if (buffer[`li`] load i8(10) ==) { + pointers[get pointerlen] buffer[get i] 1+ store + inc(pointerlen) + } + inc(i) + } + + dec(pointerlen) + pointers[get pointerlen] load set ops + + `0si` + while (ops[`li`] load `dsc` i8(10) !=) { + if (`lc` '*' == ) { + + `0sj` + u64(1) + while (`lj` get pointerlen < ) { + pointers[`lj`] load `sp` + + while (`lp` load ' ' ==) {inc(p)} + `lp` atol dup printnum64 i8(10) putc + while (`lp` load ' ' !=) {inc(p)} + + * + + pointers[`lj`] `lp` store + + inc(j) + } + `lo+so` + + } else if (`lc` '+' ==) { + `0sj` + u64(0) + while (`lj` get pointerlen < ) { + pointers[`lj`] load `sp` + + while (`lp` load ' ' ==) {inc(p)} + `lp` atol dup printnum64 i8(10) putc + while (`lp` load ' ' !=) {inc(p)} + + + + + pointers[`lj`] `lp` store + + inc(j) + } + `lo+so` + } + inc(i) + } + + println("answer:") + `lo` printnum64 i8(10) putc + exit(0) +} + +void main() { + _start +} diff --git a/src/plasl/2025/day6/part2.psl b/src/plasl/2025/day6/part2.psl new file mode 100644 index 0000000..c4ee748 --- /dev/null +++ b/src/plasl/2025/day6/part2.psl @@ -0,0 +1,210 @@ + +i64 write(i32, ptr i8, u64) { + `scsbsa` + syscall3(i64(1), `la` as i64, `lb` as i64, `lc` as i64) +} + +i64 read(i32, ptr i8, u64) { + `scsbsa` + syscall3(i64(0), `la` as i64, `lb` as i64, `lc` as i64) +} + +i32 open(ptr i8, i32, i32) { + `scsbsa` + syscall3(i64(2), `la` as i64, `lb` as i64, `lc` as i64) + as i32 +} + +void exit(i32) { + as i64 i64(231) rev + syscall1 trash +} + +void putc(i8) { + array i8[1] `dstr` store + write(1, `lt`, u64(1)) trash +} + +u64 strlen(ptr i8) { + dup while(dup load i8(0) !=) { 1+ } `r-` +} + +void print(ptr i8) { + 1 rev dup strlen write trash +} + +void println(ptr i8) { + print i8(10) putc +} + +void printnum(i32) { + + if (dup 0 ==) { + putc('0') + } else if (dup 0 <) { + `0r-` '-' putc + } + + array i8[11] 10+ dup i8(0) store -1+ `sb` + + while (dup 0 !=) { + 10 divmod 48+ as i8 + `lb` rev store + `lb` -1+ `sb` + } trash + print(`lb`1+) + +} + +void printnum64(u64) { + + if (dup u64(0) ==) { + putc('0') + } + + array i8[22] 22+ dup i8(0) store -1+ `sb` + + while (dup u64(0) !=) { + u64(10) divmod u64(48)+ as i8 + `lb` rev store + `lb` -1+ `sb` + } trash + + print(`lb`1+) + +} + +i32 atoi(ptr i8) { + set string + 0 + while (get string load '0' >= get string load '9' <= &) { + 10* get string load '0'- as i32 + + get string 1+ set string + } +} + +u64 atol(ptr i8) { + set string + u64(0) + while (get string load '0' >= get string load '9' <= &) { + u64(10)* get string load '0'- as u64 + + get string 1+ set string + } +} + + +i32 abs(i32) { + if (dup 0 <) {`0r-`} +} + +void _start() { + + open("input", 0, 0) set file + array i8[65535] set buffer + get buffer i8(48) store + read(get file, get buffer, u64(65535)) as i32 set size + #get buffer get size+ i8(10) store + + u64(0) `so` + + array ptr i8[10] set pointers + + pointers[0] get buffer store + 1 set pointerlen + + `0si` + while (buffer[get i] load '*' != buffer[get i] load '+' != &) { + if (buffer[`li`] load i8(10) ==) { + pointers[get pointerlen] buffer[get i] 1+ store + inc(pointerlen) + } + inc(i) + } + + dec(pointerlen) + pointers[get pointerlen] load set ops + + `0si` + `0sj` + + while (ops[`li`] load `dsc` i8(10) !=) { + + if (`lc` '*' == ) { + + println("*:") + + u1(1) `sf` + u64(1) + while (`lf`) { + `0sk` + u64(0) + while (`lk` get pointerlen < ) { + + if (pointers[`lk`] load `lj`+ load `dsC` ' ' !=) { + u64(10) * `lC` '0'- as u64 + + } + + `lC` putc ' ' putc + + inc(k) + } + + inc(j) + dup printnum64 i8(10) putc + + if (dup u64(0) !=) { + * + } else { + `t`u1(0)`sf` + } + + } + + `lo+so` + + } else if (`lc` '+' == ) { + + println("+:") + + u1(1) `sf` + u64(0) + while (`lf`) { + `0sk` + u64(0) + while (`lk` get pointerlen < ) { + + if (pointers[`lk`] load `lj`+ load `dsC` '0' >) { + u64(10) * `lC` '0'- as u64 + + } + + `lC` putc ' ' putc + + inc(k) + } + + inc(j) + dup printnum64 i8(10) putc + + if (dup u64(0) !=) { + + + } else { + `t`u1(0)`sf` + } + + } + + `lo+so` + + } + + inc(i) + } + + println("answer:") + `lo` printnum64 i8(10) putc + exit(0) +} + +void main() { + _start +}