Perfect shuffle: Difference between revisions

From Rosetta Code
Content added Content deleted
Line 91: Line 91:
Here's a representation of what all but the very last value (which is 384):
Here's a representation of what all but the very last value (which is 384):


<lang J> (50*i.100) shuflen ::_:@+/ (#~ 0=2&|)i.50
<lang J> (1000*i.5) shuflen ::_:@+/ (#~ 0=2&|)i.1000
_ 1 2 4 3 6 10 12 4 8 18 6 11 20 18 28 5 10 12 36 12 20 14 12 23 21 8 52 20 18 58 60 6 12 66 22 35 9 20 30 39 54 82 8 28 11 12 10 36 48 30 100 51 12 106 36 36 28 44 12 24 110 20 100 7 14 130 18 36 68 138 46 60 28 42 148 15 24 20 52 52 33 162 20 83 156 18 172 60 58 178 180 60 36 40 18 95 96 12 196 99 66 84 20 66 90 210 70 28 15 18 24 37 60 226 76 30 29 92 78 119 24 162 84 36 82 50 110 8 16 36 84 131 52 22 268 135 12 20 92 30 70 94 36 60 136 48 292 116 90 132 42 100 60 102 102 155 156 12 316 140 106 72 60 36 69 30 36 132 21 28 10 147 44 346 348 36 88 140 24 179 342 110 36 183 60 156 372 100 84 378 14 191 60 42 388 88 130 156 44 18 200 60 108 180 204 68 174 164 138 418 420 138 40 60 60 43 72 28 198 73 42 442 44 148 224 20 30 12 76 72 460 231 20 466 66 52 70 180 156 239 36 66 48 243 162 490 56 60 105 166 166 251 100 156 508 9 18 204 230 172 260 522 60 40 253 174 60 212 178 210 540 180 36 546 60 252 39 36 556 84 40 562 28 54 284 114 190 220 144 96 246 260 12 586 90 196 148 24 198 299 25 66 220 303 84 276 612 20 154 618 198 33 500 90 72 45 210 28 84 210 64 214 28 323 290 30 652 260 18 658 660 24 36 308 74 60 48 180 676 48 226 22 68 76 156 230 30 276 40 58 700 36 92 300 708 78 55 60 238 359 51 24 140 121 486 56 244 84 330 246 36 371 148 246 318 375 50 60 756 110 380 36 24 348 384 16 772 20 36 180 70 252 52 786 262 84 60 52 796 184 66 90 132 268 404 270 270 324 126 12 820 411 20 826 828 92 168 332 90 419 812 70 156 330 94 396 852 36 428 858 60 431 172 136 390 132 48 300 876 292 55 882 116 443 21 270 414 356 132 140 104 42 180 906 300 91 410 60 390 153 102 420 180 102 464 126 310 40 117 156 940 220 36 946 36 316 68 380 140 204 155 318 96 483 72 194 138 60 488 110 36 491 196 138 154 495 30 396 332
_ 1 2 4 3 6 10 12 4 8 18 6 11 20 18 28 5 10 12 36 12 20 14 12 23
36 60 232 132 468 504 42 92 84 84 1018 340 10 20 156 294 515 258 132 120 519 346 444 180 348 262 350 108 420 15 88 1060 531 140 240 356 24 252 140 358 492 253 342 60 543 330 1090 364 36 274 156 366 29 24 180 1108 100 156 148 1116 372 522 1122 300 231 564 84 510 452 378 264 162 42 76 180 382 575 288 60 132 180 126 166 116 388 249 1170 88 460 530 390 236 156 156 1186 140 44 298 476 18 180 300 200 24 280 60 516 1212 324 152 572 180 611 420 204 1228 615 204 36 1236 174 72 140 164 28 156 138 534 100 418 1258 48 420 220 180 414 20 198 40 1276 639 60 1282 16 60 161 1290 86 36 648 72 1300 651 84 1306 120 198 300 524 146 659 60 126 260 221 442 1210 70 44 285 204 444 312 268 224 630 96 20 540 638 30 680 644 12 683 1332 76 1372 100 216 588 1380 460 92 18 462 636 99 60 70 233 466 660 140 66 704 328 156 188 36 70 84 237 180 1426 84 468 179 60 478 719 130 36 136 723 66 1450 1452 48 115 486 486 90 292 162 84 245 490 580 210 56 370 1482 180 743 744 210 1492 132 166 1498 234 498 84 340 502 755 88 100 180 105 156 1522 60 508 690 1530 18 204 364 54 66 771 204 24 1548 230 194 620 516 779 111 260 156 783 522 1570 660 60 738 526 40 791 316 506 678 252 522 140 532 60 400 228 212 803 201 534 52 72 210 1618 1620 540 300 542 180 87 385 36 1636 740 546 260 276 180 48 84 252 60 92 78 30 831 36 1666 1668 556 357 660 84 99 820 120 84 24 562 198 1692 28 848 566 162 780 20 284 244 812 114 588 200 570 215 574 220 260 36 144 1732 692 96 828 1740 246 348 1746 260 408 146 36 150 879 586 140 88 90 420 330 588 140 74 148 204 891 24 1786 596 198 810 716 598 48 25 50 684 276 198 362 252 220 429 424 606 911 180 84 290 305 276 732 830 612 393 144 60 923 602 154 72 156 618 780 1860 594 372 1866 66 935 936 500 1876 939 90 804 84 72 472 60 90 756 135 210 1900 860 28 1906 902 84 239 764 630 900 56 64 60 460 214 1930 644 84 444 276 646 924 388 290 1948 975 30 88 306 652 468 60 260 210 890 18 1972 780 658 1978 282 660 44 1986 24 180 996 36 1996
21 8 52 20 18 58 60 6 12 66 22 35 9 20 30 39 54 82 8 28 11 12 10 36 48
333 308 286 200 222 420 402 60 60 336 48 322 408 540 2026 2028 676 954 180 48 1019 156 678 204 11 22 876 2052 68 440 140 228 1031 348 156 2068 36 230 820 330 90 1040 2082 276 1043 29 40 132 836 174 2098 190 700 420 42 36 1055 44 276 252 324 300 480 200 708 532 2130 234 60 1068 110 2140 51 60 252 102 714 1076 172 718 56 1080 102 72 980 24 996 260 140 465 726 242 1044 396 1458 990 156 56 292 2028 244 35 734 84 1103 1081 330 2212 884 246 948 2220 36 220 520 742 528 420 148 2236 1119 738 2242 224 318 516 750 750 20 180 150 72 45 60 2266 2268 756 568 60 330 364 190 380 76 381 36 1092 2292 72 1148 990 348 483 460 384 2308 1155 48 924 30 772 210 1100 20 1068 136 36 2332 932 180 2338 780 70 132 782 756 47 180 52 2356 21 786 552 140 786 561 2370 84 900 1188 60 476 397 156 30 2388 796 598 956 184 1199 1029 198 36 1148 90 482 126 132 1208 580 804 1211 240 404 1038 120 270 972 2436 270 305 348 324 1223 195 126 370 980 36 2458 1166 820 56 2466 822 264 618 60 2476 396 826 1140 420 828 1170 1196 276 332 1130 168 60 1251 332 396 96 270 537 1004 838 380 1260 812 100 342 210 2530 296 156 406 2538 330 1271 508 282 2548 1275 396 36 2556 852 588 290 36 120 183 428 410 1020 858 2578 308 60 460 396 862 1295 81 172 1092 308 408 612 260 390 1304 372 132 1044 1308 144 2620 420 300 1260 1190 876 1316 40 876 84 414 110 1012 1323 882 120 378 348 166 2658 886 1331 60 42 104 445 810 1060 2676 414 573 2682 356 79 224 132 2692 420 140 2698 36 104 540 2706 42 1355 1356 180 180 1359 906 1164 180 900 1364 26 182 1092 264 410 2740 420 60 660 916 390 1376 252 306 55 50 102 156 461 420 648 1334 180 1388 132 306 110 556 464 2788 465 126 84 2796 930 1400 2802 40 600 2756 234 336 1124 156 2818 60 940 140 80 220 1332 118 108 2836 664 946 2842 284 36 180 2850 948 228 102 68 2860 204 380 1380 90 420 312 1100 204 1439 462 310 144 1443 954 1218 1310 96 1448 444 966 1451 492 72 2908 140 194 260 972 138 77 468 60 1463 700 488 1254 1172 110 2938 344 36 180 420 982 1356 492 196 2956 1340 138 2962 148 154 371 110 990 120 228 30 270 468 396 1428 420 332 180 1196 108
30 100 51 12 106 36 36 28 44 12 24 110 20 100 7 14 130 18 36 68 138 46 60 28 42
1499 1500 60 100 240 232 3010 1430 132 129 3018 468 1511 220 504 348 72 42 1212 3036 92 1520 712 84 460 762 252 70 276 1018 198 204 340 612 3066 30 1476 219 20 360 1539 156 3082 308 294 772 70 1030 1236 162 258 1326 1484 396 1428 444 120 470 132 1038 1559 156 1038 2500 1508 444 100 24 180 784 126 348 672 72 262 1518 748 350 180 60 324 252 1054 420 1583 1584 30 1494 140 264 680 1060 1060 84 3186 1062 55 255 420 1518 228 240 3202 64 356 1604 468 72 428 804 252 644 1460 140 1380 1076 1074 780 1292 492 780 231 506 580 760 342 650 3252 60 407 1086 1086 300 652 990 1398 545 1090 260 28 364 96 462 36 1548 660 274 396 1316 156 3298 660 366 660 3306 58 210 828 24 530 1659 540 3322 180 1108 1664 222 100 308 805 156 48 557 148 3346 392 1116 717 60 372 1679 168 522 48 36 1122 3370 1124 900 510 180 462 792 676 564 484 113 84 48 546 510 1602 820 452 1703 243 378 3412 44 264 1572 310 162 340 1628 126 207 1716 76 1470 180 180 780 156 1146 431 168 1150 460 576 288 3460 577 60 3466 3468 132 165 1380 180 105 3422 378 40 1580 166 3490 498 116 804 3498 1164 140 700 498 1540 1755 1170 36 3516 264 753 540 460 1763 882 530 3532 300 1170 3538 236 236 708 3546 156 1716 360 156 3556 1779 1186 1524 220 140 574 3570 132 60 63 298 3580 1791 476 840 144 18 1796 1436 180 1740 276 300 204 601 600 572 3612 24 1808 690 280 1811 700 60 1710 605 516 484 3636 1212 30 3642 972 780 220 152 420 56 572 3658 522 180 244 288 1222 1835 918 420 3676 564 204 28 660 1228 120 3690 1230 492 1848 612 3700 759 36 210 3708 1236 897 1484 174 1859 3660 72 740 1863 140 60 3732 492 900 534 28 1764 636 156 1782 110 414 1500 408 534 188 1820 100 1883 1884 1254 1470 60 1258 3778 198 48 756 540 420 296 1896 220 3796 1820 180 3802 380 1242 876 612 20 36 1730 198 764 637 120 154 546 1276 958 348 1278 1740 913 60 384 1923 1282 3850 3852 16 252 904 180 1931 772 322 468 273 1290 100 3876 258 388 440 36 1716 648 648 152 180 72 1668 1886 1300 140 3906 1302 1955 84 252 3916 1959 1306 3922 260 120 1964 3930 198 1572 35 300 1686 219 524 3946 1790 438 1914 84 1318 1908 232 60 60 1983 378 1710 476 260 240 1892 442 852 796 1326 3988 204 1210 184 114
148 15 24 20 52 52 33 162 20 83 156 18 172 60 58 178 180 60 36 40 18 95 96 12 196
70 1000 4002 132 2003 630 570 4012 180 204 4018 4020 1332 660 1342 312 1932 36 268 1830 144 672 1860 404 630 506 50 96 540 169 60 130 952 540 1722 156 638 2036 1620 90 2039 780 680 252 660 644 4090 4092 12 24 4098 1366 1860 820 1332 1758 2055 228 1644 1958 1372 948 90 100 2063 688 648 4132 1652 588 4138 100 1380 828 420 1380 444 346 92 4156 2079 18 1980 168 462 1890 336 636 1660 87 198 252 253 180 156 2030 70 897 1676 466 72 525 1398 812 75 660 842 1910 140 1054 4218 66 1020 780 704 4228 2115 328 660 666 468 2120 4242 188 340 303 36 4252 396 210 4258 4260 84 852 200 474 305 534 180 276 1940 1426 4282 428 84 1072 612 1404 1716 537 358 440 60 60 522 690 1434 2034 1724 1438 462 1036 130 860 2163 36 420 618 136 2168 1446 1446 700 780 198 4348 684 1450 132 4356 1452 231 4362 48 220 16 230 4372 1500 486 420 84 486 876 1060 90 2195 1045 292 4396 2132 162 72 220 84 551 200 490 1764 45 1470 340 737 580 522 714 210 60 1772 168 1056 2220 370 84 2223 1482 4450 180 540 1114 588 1486 2231 828 744 180 1048 210 1780 1980 1492 560 4482 132 192 4422 498 4492 140 1498 1020 642 234 104 4506 1494 2076 47 84 4516 753 340 266 180 1506 969 2156 1510 1812 348 88 2142 870 300 4546 1516 180 364 364 210 1104 2280 468 820 761 1522 1956 536 60 99 72 1524 2291 780 690 264 2295 1530 612 1532 18 742 4602 204 1080 2090 364 1974 420 162 740 4620 66 900 660 1542 420 140 204 4636 2319 24 422 464 1548 2324 1550 690 252 388 194 2262 777 620 2148 924 1548 2336 40 1558 2339 15 222 468 252 780 4690 684 156 60 252 1566 2351 940 522 184 48 1570 220 572 660 295 4722 180 2268 788 738 364 1892 526 2028 430 120 36 2300 1582 475 336 316 2310 793 1518 360 68 678 450 732 252 380 280 1566 66 2391 140 4786 4788 532 2396 204 60 2399 1200 400 620 990 228 376 4812 636 1204 780 1606 156 480 402 730 2415 1602 1932 690 52 1173 2324 72 2340 372 210 2310 388 1618 28 972 1620 276 260 540 487 2210 300 4876 120 542 144 488 180 2444 198 174 220 2378 770 1092 2451 36 2100 1636 1636 2312 1964 740 2459 36 546 980 756 260 986 4932 276 1234 1120 540 2471 308 48 2100 2475 84 1980 4956 252 220 708 60 2483 2484 92 4972 1980 78 2292 584 30 332 4986 1662 165 624 36 2358</lang>
99 66 84 20 66 90 210 70 28 15 18 24 37 60 226 76 30 29 92 78 119 24 162 84 36
82 50 110 8 16 36 84 131 52 22 268 135 12 20 92 30 70 94 36 60 136 48 292 116 90
132 42 100 60 102 102 155 156 12 316 140 106 72 60 36 69 30 36 132 21 28 10 147 44 346
348 36 88 140 24 179 342 110 36 183 60 156 372 100 84 378 14 191 60 42 388 88 130 156 44
18 200 60 108 180 204 68 174 164 138 418 420 138 40 60 60 43 72 28 198 73 42 442 44 148
224 20 30 12 76 72 460 231 20 466 66 52 70 180 156 239 36 66 48 243 162 490 56 60 105
166 166 251 100 156 508 9 18 204 230 172 260 522 60 40 253 174 60 212 178 210 540 180 36 546
60 252 39 36 556 84 40 562 28 54 284 114 190 220 144 96 246 260 12 586 90 196 148 24 198
299 25 66 220 303 84 276 612 20 154 618 198 33 500 90 72 45 210 28 84 210 64 214 28 323
290 30 652 260 18 658 660 24 36 308 74 60 48 180 676 48 226 22 68 76 156 230 30 276 40
58 700 36 92 300 708 78 55 60 238 359 51 24 140 121 486 56 244 84 330 246 36 371 148 246
318 375 50 60 756 110 380 36 24 348 384 16 772 20 36 180 70 252 52 786 262 84 60 52 796
184 66 90 132 268 404 270 270 324 126 12 820 411 20 826 828 92 168 332 90 419 812 70 156 330
94 396 852 36 428 858 60 431 172 136 390 132 48 300 876 292 55 882 116 443 21 270 414 356 132
140 104 42 180 906 300 91 410 60 390 153 102 420 180 102 464 126 310 40 117 156 940 220 36 946
36 316 68 380 140 204 155 318 96 483 72 194 138 60 488 110 36 491 196 138 154 495 30 396 332
36 60 232 132 468 504 42 92 84 84 1018 340 10 20 156 294 515 258 132 120 519 346 444 180 348
262 350 108 420 15 88 1060 531 140 240 356 24 252 140 358 492 253 342 60 543 330 1090 364 36 274
156 366 29 24 180 1108 100 156 148 1116 372 522 1122 300 231 564 84 510 452 378 264 162 42 76 180
382 575 288 60 132 180 126 166 116 388 249 1170 88 460 530 390 236 156 156 1186 140 44 298 476 18
180 300 200 24 280 60 516 1212 324 152 572 180 611 420 204 1228 615 204 36 1236 174 72 140 164 28
156 138 534 100 418 1258 48 420 220 180 414 20 198 40 1276 639 60 1282 16 60 161 1290 86 36 648
72 1300 651 84 1306 120 198 300 524 146 659 60 126 260 221 442 1210 70 44 285 204 444 312 268 224
630 96 20 540 638 30 680 644 12 683 1332 76 1372 100 216 588 1380 460 92 18 462 636 99 60 70
233 466 660 140 66 704 328 156 188 36 70 84 237 180 1426 84 468 179 60 478 719 130 36 136 723
66 1450 1452 48 115 486 486 90 292 162 84 245 490 580 210 56 370 1482 180 743 744 210 1492 132 166
1498 234 498 84 340 502 755 88 100 180 105 156 1522 60 508 690 1530 18 204 364 54 66 771 204 24
1548 230 194 620 516 779 111 260 156 783 522 1570 660 60 738 526 40 791 316 506 678 252 522 140 532
60 400 228 212 803 201 534 52 72 210 1618 1620 540 300 542 180 87 385 36 1636 740 546 260 276 180
48 84 252 60 92 78 30 831 36 1666 1668 556 357 660 84 99 820 120 84 24 562 198 1692 28 848
566 162 780 20 284 244 812 114 588 200 570 215 574 220 260 36 144 1732 692 96 828 1740 246 348 1746
260 408 146 36 150 879 586 140 88 90 420 330 588 140 74 148 204 891 24 1786 596 198 810 716 598
48 25 50 684 276 198 362 252 220 429 424 606 911 180 84 290 305 276 732 830 612 393 144 60 923
602 154 72 156 618 780 1860 594 372 1866 66 935 936 500 1876 939 90 804 84 72 472 60 90 756 135
210 1900 860 28 1906 902 84 239 764 630 900 56 64 60 460 214 1930 644 84 444 276 646 924 388 290
1948 975 30 88 306 652 468 60 260 210 890 18 1972 780 658 1978 282 660 44 1986 24 180 996 36 1996
333 308 286 200 222 420 402 60 60 336 48 322 408 540 2026 2028 676 954 180 48 1019 156 678 204 11
22 876 2052 68 440 140 228 1031 348 156 2068 36 230 820 330 90 1040 2082 276 1043 29 40 132 836 174
2098 190 700 420 42 36 1055 44 276 252 324 300 480 200 708 532 2130 234 60 1068 110 2140 51 60 252
102 714 1076 172 718 56 1080 102 72 980 24 996 260 140 465 726 242 1044 396 1458 990 156 56 292 2028
244 35 734 84 1103 1081 330 2212 884 246 948 2220 36 220 520 742 528 420 148 2236 1119 738 2242 224 318
516 750 750 20 180 150 72 45 60 2266 2268 756 568 60 330 364 190 380 76 381 36 1092 2292 72 1148
990 348 483 460 384 2308 1155 48 924 30 772 210 1100 20 1068 136 36 2332 932 180 2338 780 70 132 782
756 47 180 52 2356 21 786 552 140 786 561 2370 84 900 1188 60 476 397 156 30 2388 796 598 956 184
1199 1029 198 36 1148 90 482 126 132 1208 580 804 1211 240 404 1038 120 270 972 2436 270 305 348 324 1223
195 126 370 980 36 2458 1166 820 56 2466 822 264 618 60 2476 396 826 1140 420 828 1170 1196 276 332 1130
168 60 1251 332 396 96 270 537 1004 838 380 1260 812 100 342 210 2530 296 156 406 2538 330 1271 508 282
2548 1275 396 36 2556 852 588 290 36 120 183 428 410 1020 858 2578 308 60 460 396 862 1295 81 172 1092
308 408 612 260 390 1304 372 132 1044 1308 144 2620 420 300 1260 1190 876 1316 40 876 84 414 110 1012 1323
882 120 378 348 166 2658 886 1331 60 42 104 445 810 1060 2676 414 573 2682 356 79 224 132 2692 420 140
2698 36 104 540 2706 42 1355 1356 180 180 1359 906 1164 180 900 1364 26 182 1092 264 410 2740 420 60 660
916 390 1376 252 306 55 50 102 156 461 420 648 1334 180 1388 132 306 110 556 464 2788 465 126 84 2796
930 1400 2802 40 600 2756 234 336 1124 156 2818 60 940 140 80 220 1332 118 108 2836 664 946 2842 284 36
180 2850 948 228 102 68 2860 204 380 1380 90 420 312 1100 204 1439 462 310 144 1443 954 1218 1310 96 1448
444 966 1451 492 72 2908 140 194 260 972 138 77 468 60 1463 700 488 1254 1172 110 2938 344 36 180 420
982 1356 492 196 2956 1340 138 2962 148 154 371 110 990 120 228 30 270 468 396 1428 420 332 180 1196 108
1499 1500 60 100 240 232 3010 1430 132 129 3018 468 1511 220 504 348 72 42 1212 3036 92 1520 712 84 460
762 252 70 276 1018 198 204 340 612 3066 30 1476 219 20 360 1539 156 3082 308 294 772 70 1030 1236 162
258 1326 1484 396 1428 444 120 470 132 1038 1559 156 1038 2500 1508 444 100 24 180 784 126 348 672 72 262
1518 748 350 180 60 324 252 1054 420 1583 1584 30 1494 140 264 680 1060 1060 84 3186 1062 55 255 420 1518
228 240 3202 64 356 1604 468 72 428 804 252 644 1460 140 1380 1076 1074 780 1292 492 780 231 506 580 760
342 650 3252 60 407 1086 1086 300 652 990 1398 545 1090 260 28 364 96 462 36 1548 660 274 396 1316 156
3298 660 366 660 3306 58 210 828 24 530 1659 540 3322 180 1108 1664 222 100 308 805 156 48 557 148 3346
392 1116 717 60 372 1679 168 522 48 36 1122 3370 1124 900 510 180 462 792 676 564 484 113 84 48 546
510 1602 820 452 1703 243 378 3412 44 264 1572 310 162 340 1628 126 207 1716 76 1470 180 180 780 156 1146
431 168 1150 460 576 288 3460 577 60 3466 3468 132 165 1380 180 105 3422 378 40 1580 166 3490 498 116 804
3498 1164 140 700 498 1540 1755 1170 36 3516 264 753 540 460 1763 882 530 3532 300 1170 3538 236 236 708 3546
156 1716 360 156 3556 1779 1186 1524 220 140 574 3570 132 60 63 298 3580 1791 476 840 144 18 1796 1436 180
1740 276 300 204 601 600 572 3612 24 1808 690 280 1811 700 60 1710 605 516 484 3636 1212 30 3642 972 780
220 152 420 56 572 3658 522 180 244 288 1222 1835 918 420 3676 564 204 28 660 1228 120 3690 1230 492 1848
612 3700 759 36 210 3708 1236 897 1484 174 1859 3660 72 740 1863 140 60 3732 492 900 534 28 1764 636 156
1782 110 414 1500 408 534 188 1820 100 1883 1884 1254 1470 60 1258 3778 198 48 756 540 420 296 1896 220 3796
1820 180 3802 380 1242 876 612 20 36 1730 198 764 637 120 154 546 1276 958 348 1278 1740 913 60 384 1923
1282 3850 3852 16 252 904 180 1931 772 322 468 273 1290 100 3876 258 388 440 36 1716 648 648 152 180 72
1668 1886 1300 140 3906 1302 1955 84 252 3916 1959 1306 3922 260 120 1964 3930 198 1572 35 300 1686 219 524 3946
1790 438 1914 84 1318 1908 232 60 60 1983 378 1710 476 260 240 1892 442 852 796 1326 3988 204 1210 184 114
70 1000 4002 132 2003 630 570 4012 180 204 4018 4020 1332 660 1342 312 1932 36 268 1830 144 672 1860 404 630
506 50 96 540 169 60 130 952 540 1722 156 638 2036 1620 90 2039 780 680 252 660 644 4090 4092 12 24
4098 1366 1860 820 1332 1758 2055 228 1644 1958 1372 948 90 100 2063 688 648 4132 1652 588 4138 100 1380 828 420
1380 444 346 92 4156 2079 18 1980 168 462 1890 336 636 1660 87 198 252 253 180 156 2030 70 897 1676 466
72 525 1398 812 75 660 842 1910 140 1054 4218 66 1020 780 704 4228 2115 328 660 666 468 2120 4242 188 340
303 36 4252 396 210 4258 4260 84 852 200 474 305 534 180 276 1940 1426 4282 428 84 1072 612 1404 1716 537
358 440 60 60 522 690 1434 2034 1724 1438 462 1036 130 860 2163 36 420 618 136 2168 1446 1446 700 780 198
4348 684 1450 132 4356 1452 231 4362 48 220 16 230 4372 1500 486 420 84 486 876 1060 90 2195 1045 292 4396
2132 162 72 220 84 551 200 490 1764 45 1470 340 737 580 522 714 210 60 1772 168 1056 2220 370 84 2223
1482 4450 180 540 1114 588 1486 2231 828 744 180 1048 210 1780 1980 1492 560 4482 132 192 4422 498 4492 140 1498
1020 642 234 104 4506 1494 2076 47 84 4516 753 340 266 180 1506 969 2156 1510 1812 348 88 2142 870 300 4546
1516 180 364 364 210 1104 2280 468 820 761 1522 1956 536 60 99 72 1524 2291 780 690 264 2295 1530 612 1532
18 742 4602 204 1080 2090 364 1974 420 162 740 4620 66 900 660 1542 420 140 204 4636 2319 24 422 464 1548
2324 1550 690 252 388 194 2262 777 620 2148 924 1548 2336 40 1558 2339 15 222 468 252 780 4690 684 156 60
252 1566 2351 940 522 184 48 1570 220 572 660 295 4722 180 2268 788 738 364 1892 526 2028 430 120 36 2300
1582 475 336 316 2310 793 1518 360 68 678 450 732 252 380 280 1566 66 2391 140 4786 4788 532 2396 204 60
2399 1200 400 620 990 228 376 4812 636 1204 780 1606 156 480 402 730 2415 1602 1932 690 52 1173 2324 72 2340
372 210 2310 388 1618 28 972 1620 276 260 540 487 2210 300 4876 120 542 144 488 180 2444 198 174 220 2378
770 1092 2451 36 2100 1636 1636 2312 1964 740 2459 36 546 980 756 260 986 4932 276 1234 1120 540 2471 308 48
2100 2475 84 1980 4956 252 220 708 60 2483 2484 92 4972 1980 78 2292 584 30 332 4986 1662 165 624 36 2358</lang>


=={{header|PARI/GP}}==
=={{header|PARI/GP}}==

Revision as of 20:15, 15 June 2015

Perfect shuffle is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.

A deck can be divided in two halves:

   a b c d e f -> a b c | d e f

Perfect shuffling means taking one card from the first half, one card for the second half, and so on:

   a d b e c f

Perfect shuffling can be done only with an even number of cards.

A remarkable feature of perfect shuffling is that the deck goes back to the start after a number that is fixed for every n (where n is the number of cards)

  • Implement a magic shuffle function
  • Print the number of perfect shuffles needed to go back to start for decks from 2 to 10,000 cards (by steps of 2), determined by using the magic shuffle function

EchoLisp

<lang lisp>

shuffler
a permutation vector which interleaves both halves of deck

(define (make-shuffler n) (let ((s (make-vector n))) (for ((i (in-range 0 n 2))) (vector-set! s i (/ i 2))) (for ((i (in-range 0 n 2))) (vector-set! s (1+ i) (+ (/ n 2) (vector-ref s i)))) s))

output
(n . # of shuffles needed to go back)

(define (magic-shuffle n) (when (odd? n) (error "magic-shuffle:odd input" n)) (let [(deck (list->vector (iota n))) ;; (0 1 ... n-1) (dock (list->vector (iota n))) ;; keep trace or init deck (shuffler (make-shuffler n))]

(cons n (1+ (for/sum ((i Infinity)) ; (in-naturals missing in EchoLisp v2.9) (vector-permute! deck shuffler) ;; permutes in place #:break (eqv? deck dock) ;; compare to first 1))))) </lang>

Output:

For reasons of size ... and performance for large n, we compute the results by chuncks of 50. The result format is: (deck size . number of steps to go back) <lang lisp> (make-shuffler 10) → #( 0 5 1 6 2 7 3 8 4 9) ;; sample permutation vector for n = 10

(map magic-shuffle (range 2 102 2)) ;; 40 msec

→ ((2 . 1) (4 . 2) (6 . 4) (8 . 3) (10 . 6) (12 . 10) (14 . 12) (16 . 4) (18 . 8) (20 . 18) (22 . 6) (24 . 11) (26 . 20) (28 . 18) (30 . 28) (32 . 5) (34 . 10) (36 . 12) (38 . 36) (40 . 12) (42 . 20) (44 . 14) (46 . 12) (48 . 23) (50 . 21) 

(52 . 8) (54 . 52) (56 . 20) (58 . 18) (60 . 58) (62 . 60) (64 . 6) (66 . 12) (68 . 66) (70 . 22) (72 . 35) (74 . 9) (76 . 20) (78 . 30) (80 . 39) (82 . 54) (84 . 82) (86 . 8) (88 . 28) (90 . 11) (92 . 12) (94 . 10) (96 . 36) (98 . 48) (100 . 30))

(map magic-shuffle (range 9900 10002 2)) ;; 9 seconds → ((9900 . 2340) (9902 . 9900) (9904 . 660) (9906 . 564) (9908 . 9906) (9910 . 1098) (9912 . 520) (9914 . 473) (9916 . 660) (9918 . 4830) (9920 . 36) (9922 . 3306) (9924 . 9922) (9926 . 220) (9928 . 174) (9930 . 292) (9932 . 3310) (9934 . 210) (9936 . 3972) (9938 . 522) (9940 . 828) (9942 . 9940) (9944 . 1620) (9946 . 24) (9948 . 588) (9950 . 9948) (9952 . 530) (9954 . 2412) (9956 . 180) (9958 . 3318) (9960 . 792) (9962 . 237) (9964 . 1620) (9966 . 996) (9968 . 4983) (9970 . 3322) (9972 . 4524) (9974 . 3324) (9976 . 180) (9978 . 4530) (9980 . 2344) (9982 . 3324) (9984 . 4884) (9986 . 1996) (9988 . 1664) (9990 . 4278) (9992 . 816) (9994 . 222) (9996 . 1332) (9998 . 384) (10000 . 300))

Let's look in the On-line Encyclopedia of Integer Sequences
Given a list of numbers, the (oeis ...) function looks for a sequence

(lib 'web) Lib: web.lib loaded. (oeis '(1 2 4 3 6 10 12 4)) → Sequence A002326 found </lang>

J

The shuffle routine:

<lang J> shuf=: /: $ /:@$ 0 1"_</lang>

Example uses:

<lang J> shuf 'abcdef' adbecf

  shuf 'abcdefgh'

aebfcgdh</lang>

The cycle length routine:

<lang J> shuflen=: [: *./ #@>@C.@shuf@i.</lang>

The task example (with most of the middle trimmed out to avoid crashing the rosettacode wiki implementation):

<lang J> shuflen"0 }.2*i.5000 1 2 4 3 6 10 12 4 8 18 6 11 20 18 28 5 10 12 36 12 20 14 12 23 21 8 52 20 18 ... 4278 816 222 1332 384</lang>

Here's a representation of what all but the very last value (which is 384):

<lang J> (1000*i.5) shuflen ::_:@+/ (#~ 0=2&|)i.1000

  _    1    2   4    3   6   10   12   4   8   18    6   11  20   18   28    5  10   12   36   12   20   14  12  23  21   8   52  20   18  58   60    6  12   66   22   35    9   20  30   39   54   82   8   28  11   12   10   36  48   30  100   51  12  106   36   36  28   44   12   24 110   20  100    7  14  130   18   36   68  138   46   60  28  42  148  15   24  20   52   52   33  162  20   83  156   18  172   60  58 178  180   60  36   40   18  95  96   12  196  99  66   84  20   66   90 210   70  28   15   18   24   37  60  226   76   30  29   92   78  119   24  162  84  36  82  50  110   8  16   36   84 131  52   22  268 135   12  20   92   30   70   94  36   60  136   48  292  116   90  132   42 100  60  102  102  155  156   12  316  140  106   72  60   36   69   30   36 132   21   28   10 147  44  346  348   36   88 140   24  179 342  110  36 183   60  156  372  100   84 378   14 191  60   42  388   88  130 156   44   18  200  60 108  180 204  68  174  164  138  418 420  138  40   60   60  43   72   28  198   73   42 442  44  148  224   20   30  12   76   72  460  231  20  466   66   52  70  180  156  239   36   66  48  243  162  490   56  60  105  166  166  251 100  156  508    9   18  204  230 172  260  522  60   40 253  174   60  212  178  210  540  180  36  546   60  252  39  36  556   84   40  562  28  54  284  114 190  220 144   96  246  260  12 586  90  196  148   24  198  299  25   66 220  303   84 276  612   20  154  618  198   33 500   90   72  45  210  28   84  210  64  214   28  323  290   30 652 260  18  658  660   24  36  308   74   60   48  180  676   48 226   22  68   76 156  230   30 276   40   58  700   36  92  300  708   78   55   60 238  359   51   24 140  121  486  56  244   84 330  246   36  371 148  246  318 375   50   60  756 110  380   36  24  348  384   16  772  20   36  180  70  252  52  786  262  84   60  52  796  184   66   90 132  268  404 270  270  324  126   12  820 411  20 826 828   92  168  332   90  419  812   70 156  330   94  396  852  36  428 858   60  431 172  136 390 132   48  300  876  292  55 882 116  443   21  270  414 356  132  140  104   42 180  906  300   91  410   60  390  153  102  420 180  102  464  126  310   40  117  156  940  220  36  946   36  316   68  380  140  204 155  318  96  483   72  194  138   60 488  110  36 491 196  138  154 495   30  396  332
 36   60  232 132  468 504   42   92  84  84 1018  340   10  20  156  294  515 258  132  120  519  346  444 180 348 262 350  108 420   15  88 1060  531 140  240  356   24  252  140 358  492  253  342  60  543 330 1090  364   36 274  156  366   29  24  180 1108  100 156  148 1116  372 522 1122  300  231 564   84  510  452  378  264  162   42  76 180  382 575  288  60  132  180  126  166 116  388  249 1170   88  460 530 390  236  156 156 1186  140  44 298  476   18 180 300  200  24  280   60 516 1212 324  152  572  180  611 420  204 1228  615 204   36 1236  174   72  140 164  28 156 138  534 100 418 1258   48 420 220  180  414  20  198  40 1276  639   60 1282  16   60  161 1290   86   36  648   72 1300 651  84 1306  120  198  300  524  146  659   60  126 260  221  442 1210   70  44  285  204  444 312 268  224  630   96   20 540  638   30 680  644  12 683 1332   76 1372  100  216 588 1380 460  92   18  462  636   99  60   70  233  466 660 140   66 704 328  156  188   36   70  84  237 180 1426   84 468  179   60  478  719  130  36 136  723   66 1450 1452  48  115  486  486   90 292  162   84  245 490  580  210   56  370 1482 180  743  744  210 1492 132  166 1498  234  498  84  340  502  755   88  100  180 105  156 1522  60  508 690 1530   18  204  364   54   66  771 204   24 1548  230 194 620  516  779  111  260 156 783  522 1570 660   60 738  526   40  791 316 506 678  252  522  140  532   60 400  228 212  803  201 534   52   72  210 1618 1620  540 300  542  180  87  385  36 1636  740 546  260  276  180   48   84 252  60  92   78   30  831  36 1666 1668  556  357  660   84   99 820  120  84   24 562  198 1692  28  848  566  162  780  20  284  244  812  114  588 200  570  215  574 220  260   36 144 1732  692  96  828 1740  246 348 1746  260 408  146   36  150 879  586  140  88   90  420  330  588 140   74  148 204  891  24 1786  596 198  810 716  598   48   25   50 684  276  198 362  252  220  429  424  606 911 180  84 290  305  276  732  830  612  393  144  60  923  602  154   72 156  618 780 1860  594 372 1866  66 935  936  500 1876  939  90 804  84   72  472   60   90 756  135  210 1900  860  28 1906  902   84  239  764  630  900   56   64  60  460  214 1930  644   84  444  276  646  924 388  290 1948  975   30   88  306  652 468   60 260  210  890   18 1972  780 658 1978 282 660  44 1986   24 180  996   36 1996
333  308  286 200  222 420  402   60  60 336   48  322  408 540 2026 2028  676 954  180   48 1019  156  678 204  11  22 876 2052  68  440 140  228 1031 348  156 2068   36  230  820 330   90 1040 2082 276 1043  29   40  132  836 174 2098  190  700 420   42   36 1055  44  276  252  324 300  480  200  708 532 2130  234   60 1068  110 2140   51  60 252  102 714 1076 172  718   56 1080  102  72  980   24  996  260  140 465 726  242 1044 396 1458  990 156  56  292 2028 244  35  734  84 1103 1081 330 2212 884  246  948 2220   36 220  520  742  528 420  148 2236 1119  738 2242 224 318 516 750  750  20 180  150   72  45  60 2266 2268 756  568  60  330  364  190  380  76  381   36 1092 2292   72 1148  990  348 483 460  384 2308 1155   48  924   30  772  210 1100  20 1068  136   36 2332 932  180 2338  780  70 132  782  756   47  180  52 2356   21 786  552 140 786  561 2370   84  900 1188  60  476 397 156   30 2388  796  598 956  184 1199 1029 198  36 1148  90 482  126  132 1208  580 804 1211 240  404 1038 120  270  972 2436  270  305 348 324 1223  195  126  370 980   36 2458 1166  820  56 2466  822  264 618   60 2476  396  826 1140 420  828 1170 1196  276 332 1130  168   60 1251 332  396   96  270  537 1004  838 380 1260  812 100  342 210 2530  296  156  406 2538  330 1271 508  282 2548 1275 396  36 2556  852  588  290  36 120  183  428 410 1020 858 2578  308   60 460 396 862 1295   81  172 1092  308 408  612 260  390 1304 372  132 1044 1308  144 2620  420 300 1260 1190 876 1316  40  876   84 414  110 1012 1323  882  120 378 348 166 2658  886 1331  60   42  104  445  810 1060 2676  414 573 2682 356   79 224  132 2692 420  140 2698   36  104 540 2706   42 1355 1356  180 180 1359  906 1164 180  900 1364  26  182 1092 264  410 2740  420  60  660  916 390 1376  252  306  55   50  102 156  461  420  648 1334 180 1388  132 306  110 556  464 2788 465  126  84 2796  930 1400 2802  40  600 2756 234  336 1124  156 2818   60 940 140  80 220 1332  118  108 2836  664  946 2842 284   36  180 2850  948 228  102  68 2860  204 380 1380  90 420  312 1100  204 1439 462 310 144 1443  954 1218 1310  96 1448  444  966 1451 492   72 2908  140  194  260  972  138   77  468  60 1463  700  488 1254 1172  110 2938  344   36 180  420  982 1356  492  196 2956 1340 138 2962 148  154  371  110  990  120 228   30 270 468 396 1428  420 332  180 1196  108

1499 1500 60 100 240 232 3010 1430 132 129 3018 468 1511 220 504 348 72 42 1212 3036 92 1520 712 84 460 762 252 70 276 1018 198 204 340 612 3066 30 1476 219 20 360 1539 156 3082 308 294 772 70 1030 1236 162 258 1326 1484 396 1428 444 120 470 132 1038 1559 156 1038 2500 1508 444 100 24 180 784 126 348 672 72 262 1518 748 350 180 60 324 252 1054 420 1583 1584 30 1494 140 264 680 1060 1060 84 3186 1062 55 255 420 1518 228 240 3202 64 356 1604 468 72 428 804 252 644 1460 140 1380 1076 1074 780 1292 492 780 231 506 580 760 342 650 3252 60 407 1086 1086 300 652 990 1398 545 1090 260 28 364 96 462 36 1548 660 274 396 1316 156 3298 660 366 660 3306 58 210 828 24 530 1659 540 3322 180 1108 1664 222 100 308 805 156 48 557 148 3346 392 1116 717 60 372 1679 168 522 48 36 1122 3370 1124 900 510 180 462 792 676 564 484 113 84 48 546 510 1602 820 452 1703 243 378 3412 44 264 1572 310 162 340 1628 126 207 1716 76 1470 180 180 780 156 1146 431 168 1150 460 576 288 3460 577 60 3466 3468 132 165 1380 180 105 3422 378 40 1580 166 3490 498 116 804 3498 1164 140 700 498 1540 1755 1170 36 3516 264 753 540 460 1763 882 530 3532 300 1170 3538 236 236 708 3546 156 1716 360 156 3556 1779 1186 1524 220 140 574 3570 132 60 63 298 3580 1791 476 840 144 18 1796 1436 180 1740 276 300 204 601 600 572 3612 24 1808 690 280 1811 700 60 1710 605 516 484 3636 1212 30 3642 972 780 220 152 420 56 572 3658 522 180 244 288 1222 1835 918 420 3676 564 204 28 660 1228 120 3690 1230 492 1848 612 3700 759 36 210 3708 1236 897 1484 174 1859 3660 72 740 1863 140 60 3732 492 900 534 28 1764 636 156 1782 110 414 1500 408 534 188 1820 100 1883 1884 1254 1470 60 1258 3778 198 48 756 540 420 296 1896 220 3796 1820 180 3802 380 1242 876 612 20 36 1730 198 764 637 120 154 546 1276 958 348 1278 1740 913 60 384 1923 1282 3850 3852 16 252 904 180 1931 772 322 468 273 1290 100 3876 258 388 440 36 1716 648 648 152 180 72 1668 1886 1300 140 3906 1302 1955 84 252 3916 1959 1306 3922 260 120 1964 3930 198 1572 35 300 1686 219 524 3946 1790 438 1914 84 1318 1908 232 60 60 1983 378 1710 476 260 240 1892 442 852 796 1326 3988 204 1210 184 114

 70 1000 4002 132 2003 630  570 4012 180 204 4018 4020 1332 660 1342  312 1932  36  268 1830  144  672 1860 404 630 506  50   96 540  169  60  130  952 540 1722  156  638 2036 1620  90 2039  780  680 252  660 644 4090 4092   12  24 4098 1366 1860 820 1332 1758 2055 228 1644 1958 1372 948   90  100 2063 688  648 4132 1652  588 4138  100 1380 828 420 1380 444  346  92 4156 2079   18 1980 168  462 1890  336  636 1660  87 198  252  253 180  156 2030  70 897 1676  466  72 525 1398 812   75  660 842 1910 140 1054 4218   66 1020 780  704 4228 2115 328  660  666  468 2120 4242 188 340 303  36 4252 396 210 4258 4260  84 852  200  474 305  534 180  276 1940 1426 4282 428   84 1072  612 1404 1716  537  358  440  60  60  522  690 1434 2034 1724 1438  462 1036  130 860 2163   36  420  618 136 2168 1446 1446 700 780  198 4348  684 1450 132 4356 1452 231 4362  48 220   16  230 4372 1500  486 420   84 486 876 1060   90 2195 1045 292 4396 2132  162  72 220   84 551 200  490 1764   45 1470 340  737 580  522  714 210   60 1772  168 1056 2220 370  84 2223 1482 4450  180 540 1114  588 1486 2231 828  744  180 1048 210 1780 1980 1492  560 4482 132  192 4422  498 4492 140 1498 1020  642  234 104 4506 1494 2076   47   84 4516 753  340  266 180 1506 969 2156 1510 1812  348   88 2142  870 300 4546 1516  180 364 364  210 1104 2280  468 820 761 1522 1956 536   60  99   72 1524 2291 780 690 264 2295 1530  612 1532   18 742 4602 204 1080 2090 364 1974  420  162  740 4620   66 900  660 1542 420  140 204 4636 2319  24  422  464 1548 2324 1550 690 252 388  194 2262  777 620 2148  924 1548 2336   40 1558 2339  15  222 468  252 780 4690  684 156   60  252 1566 2351 940  522  184   48 1570  220 572  660  295 4722 180 2268  788 738  364 1892 526 2028  430  120  36 2300 1582 475  336  316 2310 793 1518  360  68  678  450  732  252 380  280 1566  66 2391 140 4786 4788 532 2396 204   60 2399 1200  400 620  990  228 376 4812  636 1204  780 1606 156 480 402 730 2415 1602 1932  690   52 1173 2324  72 2340  372  210 2310 388 1618  28  972 1620 276  260 540 487 2210  300 4876  120 542 144 488  180 2444  198  174 220 2378  770 1092 2451  36 2100 1636 1636 2312 1964  740 2459   36  546 980  756  260  986 4932  276 1234 1120  540 2471 308   48 2100 2475   84 1980 4956  252 220  708  60 2483 2484   92 4972 1980  78 2292 584  30 332 4986 1662 165  624   36 2358</lang>

PARI/GP

<lang parigp>magic(v)=vector(#v,i,v[if(i%2,1,#v/2)+i\2]); shuffles_slow(n)=my(v=[1..n],o=v,s=1);while((v=magic(v))!=o,s++);s; shuffles(n)=znorder(Mod(2,n-1)); vector(5000,n,shuffles_slow(2*n))</lang>

Output:
%1 = [1, 2, 4, 3, 6, 10, 12, 4, 8, 18, 6, 11, 20, 18, 28, 5, 10, 12, 36, 12,
 20, 14, 12, 23, 21, 8, 52, 20, 18, 58, 60, 6, 12, 66, 22, 35, 9, 20, 30, 39, 54
, 82, 8, 28, 11, 12, 10, 36, 48, 30, 100, 51, 12, 106, 36, 36, 28, 44, 12, 24, 1
10, 20, 100, 7, 14, 130, 18, 36, 68, 138, 46, 60, 28, 42, 148, 15, 24, 20, 52, 5
2, 33, 162, 20, 83, 156, 18, 172, 60, 58, 178, 180, 60, 36, 40, 18, 95, 96, 12,
196, 99, 66, 84, 20, 66, 90, 210, 70, 28, 15, 18, 24, 37, 60, 226, 76, 30, 29, 9
2, 78, 119, 24, 162, 84, 36, 82, 50, 110, 8, 16, 36, 84, 131, 52, 22, 268, 135,
12, 20, 92, 30, 70, 94, 36, 60, 136, 48, 292, 116, 90, 132, 42, 100, 60, 102, 10
2, 155, 156, 12, 316, 140, 106, 72, 60, 36, 69, 30, 36, 132, 21, 28, 10, 147, 44
, 346, 348, 36, 88, 140, 24, 179, 342, 110, 36, 183, 60, 156, 372, 100, 84, 378,
 14, 191, 60, 42, 388, 88, 130, 156, 44, 18, 200, 60, 108, 180, 204, 68, 174, 16
4, 138, 418, 420, 138, 40, 60, 60, 43, 72, 28, 198, 73, 42, 442, 44, 148, 224, 2
0, 30, 12, 76, 72, 460, 231, 20, 466, 66, 52, 70, 180, 156, 239, 36, 66, 48, 243
, 162, 490, 56, 60, 105, 166, 166, 251, 100, 156, 508, 9, 18, 204, 230, 172, 260
, 522, 60, 40, 253, 174, 60, 212, 178, 210, 540, 180, 36, 546, 60, 252, 39, 36,
556, 84, 40, 562, 28, 54, 284, 114, 190, 220, 144, 96, 246, 260, 12, 586, 90, 19
6, 148, 24, 198, 299, 25, 66, 220, 303, 84, 276, 612, 20, 154, 618, 198, 33, 500
, 90, 72, 45, 210, 28, 84, 210, 64, 214, 28, 323, 290, 30, 652, 260, 18, 658, 66
0, 24, 36, 308, 74, 60, 48, 180, 676, 48, 226, 22, 68, 76, 156, 230, 30, 276, 40
, 58, 700, 36, 92, 300, 708, 78, 55, 60, 238, 359, 51, 24, 140, 121, 486, 56, 24
4, 84, 330, 246, 36, 371, 148, 246, 318, 375, 50, 60, 756, 110, 380, 36, 24, 348
, 384, 16, 772, 20, 36, 180, 70, 252, 52, 786, 262, 84, 60, 52, 796, 184, 66, 90
, 132, 268, 404, 270, 270, 324, 126, 12, 820, 411, 20, 826, 828, 92, 168, 332, 9
0, 419, 812, 70, 156, 330, 94, 396, 852, 36, 428, 858, 60, 431, 172, 136, 390, 1
32, 48, 300, 876, 292, 55, 882, 116, 443, 21, 270, 414, 356, 132, 140, 104,[+++]

(By default gp won't show more than 25 lines of output, though an arbitrary amount can be printed or written to a file; use print, write, or default(lines, 100) to show more.)

Perl

<lang perl>use List::Util qw(all);

sub perfect_shuffle {

  my $mid = @_ / 2;
  map { @_[$_, $_ + $mid] } 0..($mid - 1);

}

for my $i (2 .. 10000) {

   next if $i % 2;
   
   my $n = 0;
   my @shuffled = my @deck = 1 .. $i;
   do {
       $n++;
       @shuffled = perfect_shuffle(@shuffled);
   } until all { $shuffled[$_] == $deck[$_] } 0..$#shuffled;
   
   printf "%5d ", $n;
   print "\n" if !($i % 20)

}</lang>

Output:
    1     2     4     3     6    10    12     4     8    18 
    6    11    20    18    28     5    10    12    36    12 
   20    14    12    23    21     8    52    20    18    58 
   60     6    12    66    22    35     9    20    30    39 
   54    82     8    28    11    12    10    36    48    30 
  100    51    12   106    36    36    28    44    12    24 
  110    20   100     7    14   130    18    36    68   138
(...elided...)

Perl 6

Translation of: Perl

<lang perl6>sub perfect-shuffle (@deck) {

  my $mid = @deck / 2;
  flat @deck[0 .. $mid-1] Z @deck[$mid .. *-1];

}

for 2, 4 ... 10000 -> $i {

   my @shuffled = my @deck = 1 .. $i;
   
   my $n;
   loop {
       $n++;
       @shuffled = perfect-shuffle @shuffled;
       last if @shuffled eqv @deck;
   }
   
   printf "%5d ", $n;
   print "\n" if $i %% 20;

}</lang>

Python

<lang python> import doctest import random


def flatten(lst):

   """
   >>> flatten([[3,2],[1,2]])
   [3, 2, 1, 2]
   """
   return [i for sublst in lst for i in sublst]

def magic_shuffle(deck):

   """
   >>> magic_shuffle([1,2,3,4])
   [1, 3, 2, 4]
   """
   half = len(deck) // 2 
   return flatten(zip(deck[:half], deck[half:]))

def after_how_many_is_equal(shuffle_type,start,end):

   """
   >>> after_how_many_is_equal(magic_shuffle,[1,2,3,4],[1,2,3,4])
   2
   """
   start = shuffle_type(start)
   counter = 1
   while start != end:
       start = shuffle_type(start)
       counter += 1
   return counter

def main():

   doctest.testmod()
   print("Length of the deck of cards | Perfect shuffles needed to obtain the same deck back")
   for length in range(2,10**4,2):
       deck = list(range(length))
       shuffles_needed = after_how_many_is_equal(magic_shuffle,deck,deck)
       print("{} | {}".format(length,shuffles_needed))


if __name__ == "__main__":

   main()

</lang> Reversed shuffle or just calculate how many shuffles are needed: <lang python>def mul_ord2(n): # directly calculate how many shuffles are needed to restore # initial order: 2^o mod(n-1) == 1 if n == 2: return 1

n,t,o = n-1,2,1 while t != 1: t,o = (t*2)%n,o+1 return o

def shuffles(n): a,c = list(range(n)), 0 b = a

while True: # Reverse shuffle; a[i] can be taken as the current # position of the card with value i. This is faster. a = a[0:n:2] + a[1:n:2] c += 1 if b == a: break return c

for n in range(2, 10000, 2): #print(n, mul_ord2(n)) print(n, shuffles(n))</lang>

Racket

With an overwhelming urge to say that math/number-theory rocks! <lang racket>#lang racket (require math/number-theory)

COMMENTS
Number of riffle shuffles of 2n+2 cards required to return a deck to initial state.

(define (A002326 2n+2)

 (unit-group-order 2 (- 2n+2 1)))

(define (perfect-shuffle l)

 (define-values (as bs) (split-at l (/ (length l) 2)))
 (foldr (λ (a b d) (list* a b d)) null as bs))

(define (magic-shuffle n)

 (for/fold ((d (range n))) ((s (A002326 n)))
   (printf "shuffle#~a:\tdeck: ~a~%" s d)
   (perfect-shuffle d)))

(magic-shuffle 10) (magic-shuffle 14)

(define magic-numbers (for/list ((n (in-range 2 10001 2))) (A002326 n)))

(append (take magic-numbers 50) (list '...) (take-right magic-numbers 50))

(module+ test

 (require tests/eli-tester)
 (test
  (for/list ((i (in-range 2 16 2))) (A002326 i)) => '(1 2 4 3 6 10 12)
  (perfect-shuffle '(1 2 3 4)) => '(1 3 2 4)))</lang>
Output:
shuffle#0:	deck: (0 1 2 3 4 5 6 7 8 9)
shuffle#1:	deck: (0 5 1 6 2 7 3 8 4 9)
shuffle#2:	deck: (0 7 5 3 1 8 6 4 2 9)
shuffle#3:	deck: (0 8 7 6 5 4 3 2 1 9)
shuffle#4:	deck: (0 4 8 3 7 2 6 1 5 9)
shuffle#5:	deck: (0 2 4 6 8 1 3 5 7 9)
(0 1 2 3 4 5 6 7 8 9)
shuffle#0:	deck: (0 1 2 3 4 5 6 7 8 9 10 11 12 13)
shuffle#1:	deck: (0 7 1 8 2 9 3 10 4 11 5 12 6 13)
shuffle#2:	deck: (0 10 7 4 1 11 8 5 2 12 9 6 3 13)
shuffle#3:	deck: (0 5 10 2 7 12 4 9 1 6 11 3 8 13)
shuffle#4:	deck: (0 9 5 1 10 6 2 11 7 3 12 8 4 13)
shuffle#5:	deck: (0 11 9 7 5 3 1 12 10 8 6 4 2 13)
shuffle#6:	deck: (0 12 11 10 9 8 7 6 5 4 3 2 1 13)
shuffle#7:	deck: (0 6 12 5 11 4 10 3 9 2 8 1 7 13)
shuffle#8:	deck: (0 3 6 9 12 2 5 8 11 1 4 7 10 13)
shuffle#9:	deck: (0 8 3 11 6 1 9 4 12 7 2 10 5 13)
shuffle#10:	deck: (0 4 8 12 3 7 11 2 6 10 1 5 9 13)
shuffle#11:	deck: (0 2 4 6 8 10 12 1 3 5 7 9 11 13)
(0 1 2 3 4 5 6 7 8 9 10 11 12 13)
(1 2 4 3 6 10 12 4 8 18 6 11 20 18 28 5 10 12 36 12 20 14 12 23 21 8 52 20 18 58 60 6 12 66 22 35 9 20 30 39 54 82 8 28 11 12 10 36 48 30 ... 9900 660 564 9906 1098 520 473 660 4830 36 3306 9922 220 174 292 3310 210 3972 522 828 9940 1620 24 588 9948 530 2412 180 3318 792 237 1620 996 4983 3322 4524 3324 180 4530 2344 3324 4884 1996 1664 4278 816 222 1332 384 300)
2 tests passed

REXX

unoptimized

<lang rexx>/*REXX program does a "perfect shuffle" for a number of even numbered decks.*/ parse arg N .; if N== then n=10000 /*N not specified? Then use default.*/ w=length(N) /*used for right─aligning the numbers. */

   do j=2  to N  by 2                 /*create some even-numbered card decks.*/
     do k=1  for j;       @.k=k;       end       /*generate a deck to be used*/
     do t=1  until eq();  call magic;  end       /*shuffle 'til before=after.*/
   say 'deck size:'    right(j,w)","       right(t,w)      'perfect shuffles.'
   end   /*j*/

exit /*stick a fork in it, we're all done. */ /*──────────────────────────────────EQ subroutine─────────────────────────────*/ eq: do ?=1 for j; if @.?\==? then return 0; end; return 1 /*──────────────────────────────────MAGIC subroutine──────────────────────────*/ magic: z=0 /*set the Z pointer (used as index).*/ h=j%2 /*get the half─way (midpoint) pointer. */

      do s=1  for h;  z=z+1;  h=h+1   /*traipse through the card deck pips.  */
      !.z=@.s;        z=z+1           /*assign left half; then bump pointer. */
      !.z=@.h                         /*   "   right  "                      */
      end   /*s*/                     /*perform a perfect shuffle of the deck*/
      do r=1  for j;  @.r=!.r;  end   /*re─assign to the original card deck. */

return</lang> output (abbreviated) when using the default input:

deck size:     2,     1 perfect shuffles.
deck size:     4,     2 perfect shuffles.
deck size:     6,     4 perfect shuffles.
deck size:     8,     3 perfect shuffles.
deck size:    10,     6 perfect shuffles.
deck size:    12,    10 perfect shuffles.
deck size:    14,    12 perfect shuffles.
deck size:    16,     4 perfect shuffles.
deck size:    18,     8 perfect shuffles.
deck size:    20,    18 perfect shuffles.
deck size:    22,     6 perfect shuffles.
deck size:    24,    11 perfect shuffles.
deck size:    26,    20 perfect shuffles.
deck size:    28,    18 perfect shuffles.
deck size:    30,    28 perfect shuffles.
deck size:    32,     5 perfect shuffles.
deck size:    34,    10 perfect shuffles.
deck size:    36,    12 perfect shuffles.
deck size:    38,    36 perfect shuffles.
deck size:    40,    12 perfect shuffles.
 ·
 ·
 ·

(the rest of the output was elided.)

optimized

This REXX version takes advantage that the 1st and last cards of the deck don't change. <lang rexx>/*REXX program does a "perfect shuffle" for a number of even numbered decks.*/ parse arg N .; if N== then n=10000 /*N not specified? Then use default.*/ w=length(N) /*used for right─aligning the numbers. */

   do j=2  to N  by 2                 /*create some even-numbered card decks.*/
     do k=1  for j;       @.k=k;       end       /*generate a deck to be used*/
     do t=1  until eq();  call magic;  end       /*shuffle 'til before=after.*/
   say 'deck size:'    right(j,w)","       right(t,w)      'perfect shuffles.'
   end     /*j*/

exit /*stick a fork in it, we're all done. */ /*──────────────────────────────────EQ subroutine─────────────────────────────*/ eq: do ?=1 for j; if @.?\==? then return 0; end; return 1 /*──────────────────────────────────MAGIC subroutine──────────────────────────*/ magic: z=1; h=j%2; m=h-1 /*set Z & H (half─way) pointers.*/

 do L=3  by 2  for m;  z=z+1;  !.L=@.z; end  /*assign left half of the deck. */
 do R=2  by 2  for m;  h=h+1;  !.R=@.h; end  /*   "   right  "   "  "    "   */
 do a=2        for j-2;        @.a=!.a; end  /*re─assign to the original deck*/

return</lang> output is the same as the 1st version.

Ruby

<lang ruby>def perfect_shuffle(n)

 start = *1..n
 deck = start.dup
 m = n / 2
 magic_shuffle = ->(d){ d.shift(m).zip(d).flatten }
 1.step do |i|
   deck = magic_shuffle[deck]
   return i if deck == start
 end

end

fmt = "%4d -%5d :" + "%5d" * 20 (2..10000).step(2).each_slice(20) do |ary|

 puts fmt % [*ary.minmax, *ary.map{|n| perfect_shuffle(n)}]

end</lang>

Output:
   2 -   40 :    1    2    4    3    6   10   12    4    8   18    6   11   20   18   28    5   10   12   36   12
  42 -   80 :   20   14   12   23   21    8   52   20   18   58   60    6   12   66   22   35    9   20   30   39
  82 -  120 :   54   82    8   28   11   12   10   36   48   30  100   51   12  106   36   36   28   44   12   24
 122 -  160 :  110   20  100    7   14  130   18   36   68  138   46   60   28   42  148   15   24   20   52   52
 162 -  200 :   33  162   20   83  156   18  172   60   58  178  180   60   36   40   18   95   96   12  196   99
 202 -  240 :   66   84   20   66   90  210   70   28   15   18   24   37   60  226   76   30   29   92   78  119
 242 -  280 :   24  162   84   36   82   50  110    8   16   36   84  131   52   22  268  135   12   20   92   30
 282 -  320 :   70   94   36   60  136   48  292  116   90  132   42  100   60  102  102  155  156   12  316  140
 322 -  360 :  106   72   60   36   69   30   36  132   21   28   10  147   44  346  348   36   88  140   24  179
 362 -  400 :  342  110   36  183   60  156  372  100   84  378   14  191   60   42  388   88  130  156   44   18
 402 -  440 :  200   60  108  180  204   68  174  164  138  418  420  138   40   60   60   43   72   28  198   73
 442 -  480 :   42  442   44  148  224   20   30   12   76   72  460  231   20  466   66   52   70  180  156  239
 482 -  520 :   36   66   48  243  162  490   56   60  105  166  166  251  100  156  508    9   18  204  230  172
 522 -  560 :  260  522   60   40  253  174   60  212  178  210  540  180   36  546   60  252   39   36  556   84
 562 -  600 :   40  562   28   54  284  114  190  220  144   96  246  260   12  586   90  196  148   24  198  299
  .
  .
  .
9602 - 9640 : 2400  240   56  492 3202 4116 9612   64 4698 9618 1068  283  300 1604 9628 1605  468  460  418  216
9642 - 9680 :  155 9642  428 4380  402  804  588 3860  252 4452 9660  644  644 1380 1460 4572  568  420 9676 4839
9682 - 9720 : 1380 4620  444 1076 4844  110 3222  276 2424  780  396  780 1292  456   18  492 4410  924  780   43
9722 - 9760 :  810  462 1940 2380 1518 4716 9732  580  636 3246  760 4871 1948  342 9748  693  650 3900 4430 3252
9762 - 9800 : 1582 1500   60 4883 1221  814   84  440 1086  210  652 1086  612 3262  300 4895  699  652 1200 2380
9802 - 9840 : 2970 9802  468 1398  144 3270 1090   60 1636 3270  660 2070  260 1580 1404   28 4916  420 1092 4919
9842 - 9880 :  756   96 1780  532  462 9850 4814   36 4928 9858 1548 2112 1972  660 4830 4935  822 3900  984  396
9882 - 9920 :  120 9882 1316 4943  140  156 1140 3956 3298 2340 9900  660  564 9906 1098  520  473  660 4830   36
9922 - 9960 : 3306 9922  220  174  292 3310  210 3972  522  828 9940 1620   24  588 9948  530 2412  180 3318  792
9962 -10000 :  237 1620  996 4983 3322 4524 3324  180 4530 2344 3324 4884 1996 1664 4278  816  222 1332  384  300