Latin Squares in reduced form/Randomizing using Jacobson and Matthews’ Technique: Difference between revisions

→‎{{header|Raku}}: fix oversight in squares generation
(added Raku programming solution)
(→‎{{header|Raku}}: fix oversight in squares generation)
Line 1,337:
{{trans|Go}}
<lang perl6># 20210729 Raku programming solution
 
#!/usr/bin/env raku
 
sub makeCube(\from, Int \n) {
Line 1,345 ⟶ 1,347:
}
 
sub shuffleCube(@c is copy) {
my ($rx, $ry, $rz); my \n = +@c; my Bool \proper = $ = True;
 
Line 1,370 ⟶ 1,372:
proper = False
}
return @c
}
 
Line 1,415 ⟶ 1,416:
@c = makeCube(@in, 4);
for ^10_000 {
@c = shuffleCube @c ;
my %freq{@m = c.&toMatrix @c;.&toReduced».List.flat.Str}++
my @rm = toReduced @m;
%freq{@rm».List.flat.Str}++
}
for %freq.kv -> $k, $v {
Line 1,429 ⟶ 1,428:
%freq = ();
@c = makeCube(@in, 5);
for ^10_000 {
@c = shuffleCube @c ;
my %freq{@m = c.&toMatrix.&toReduced».List.flat.Str}++ @c;
my @rm = toReduced @m;
%freq{@rm».List.flat.Str}++
}
for %freq.values.kv -> $i, $j { printf "%2d(%3d)%s", $i+1, $j, ' ' }
Line 1,439 ⟶ 1,436:
say "\n\nPart 3: 750 latin squares of order 42, showing the last one:\n";
@c = makeCube([], 42); # (1..42).pick(*)
#( printAs1basedfor (^750 toMatrix{ (shuffleCube shuffleCube(@c } ) xxand *printAs1based )[749] )@c.&toMatrix».List.flat ;
my @m42;
for ^750 { $_==749 ?? (@m42 = toMatrix(shuffleCube @c)) !! shuffleCube(@c) }
printAs1based @m42».List.flat ;
 
say "\nPart 4: 1000100 latin squares of order 256:\n";
@c = makeCube([], 256);
my $snapshot = now;
@c = makeCube([], 256);
race for ^1000100 { shuffleCube @c } # ;without say "$_\t"hyper, nowwill -do $snapshotonly 100 cycles }
say "Generated in { now - $snapshot } seconds."
</lang>
Line 1,453 ⟶ 1,447:
<pre>
Part 1: 10,000 latin Squares of order 4 in reduced form:
 
1 2 3 4
2 31 4 13
3 4 1 2
4 13 2 31
 
Occurs 25182442 times.
 
1 2 3 4
Line 1,459 ⟶ 1,460:
4 3 2 1
 
Occurs 25642705 times.
 
1 2 3 4
2 13 4 31
3 4 1 2
4 31 2 13
 
Occurs 25122548 times.
 
1 2 3 4
Line 1,473 ⟶ 1,474:
4 3 1 2
 
Occurs 24062305 times.
 
1 2 3 4
2 3 4 1
3 4 1 2
4 1 2 3
 
Occurs 2518 times.
 
Part 2: 10,000 latin Squares of order 5 in reduced form:
 
1(172210) 2(172191) 3(179186) 4(169158) 5(157219) 6(189164) 7(182147) 8(165160) 9(170196) 10(147188) 11(149193) 12(198168) 13(171195) 14(212173) 15(167151) 16(205184) 17(170211) 18(199171) 19(189185) 20(179155) 21(196157) 22(184191) 23(216195) 24(218177) 25(149157) 26(191) 27(163165) 28(240178) 29(164191) 30(182180) 31(179193) 32(192176) 33(173196) 34(154178) 35(169156) 36(145168) 37(180155) 38(173152) 39(168155) 40(182223) 41(150159) 42(150165) 43(187210) 44(212175) 45(190195) 46(180188) 47(167178) 48(163154) 49(222172) 50(170176) 51(181178) 52(186164) 53(162175) 54(171196) 55(175187) 56(175189)
 
Part 3: 750 latin squares of order 42, showing the last one:
 
326 927 294 3441 3031 2710 1928 2213 413 3629 13 2821 42 2114 3239 1019 8 355 167 316 2440 1517 3337 535 3733 61 3938 2622 134 18 11 712 42 2532 3836 179 2024 2 1425 23 4016 1215 1830 20
1316 2140 326 1211 222 14 41 42 3620 87 1924 158 3029 2327 3728 344 2426 919 421 639 3837 409 12 732 1036 315 2612 1713 2038 225 16 1831 33 3534 253 3117 281 3923 4135 2930 518 2710 1125
4131 3715 1211 263 235 3222 2413 510 3114 924 1441 118 386 3616 2817 1129 3936 2037 2912 4228 1323 2739 3534 8 2127 2240 24 3035 347 1719 1532 2526 621 101 182 33 420 409 738 330 1925 1642
15 413 37 31 38 42 79 2211 272 3510 3036 2322 2934 1618 1923 812 4039 3425 20 319 526 39 318 41 2616 286 3621 1032 255 144 33 17 3840 924 1330 1129 3327 63 228 2414 181 327 2135 1 1215
3541 407 1417 1128 3224 4212 329 25 26 24 398 31 22 1 123 2911 942 2223 1826 1739 1613 3825 1019 36 3318 233 37 306 345 420 2815 82 1916 2114 54 1327 2335 1538 2710 630 732 419 2021 34 40
65 3319 3412 32 20 1930 26 2233 1017 1516 1427 2613 388 219 412 4237 121 1718 3239 4 87 1140 281 2915 93 4035 1611 2324 1810 31 536 2723 3529 3741 1322 25 2426 1228 734 314 3042 36 3938
4011 1614 3620 25 3 2032 1719 1827 942 118 612 741 34 316 424 3921 1038 1226 2210 2435 2533 3528 89 3022 2623 1439 3717 3340 4231 15 1130 2137 4116 232 3836 324 298 281 2713 1925 529 137
420 6 1722 2116 2934 15 38 2426 33 4223 12 911 22 2629 7 354 4113 1021 1142 149 3724 4014 2741 39 3015 31 85 3 25 2318 3619 1330 31 3210 2837 1636 17 12 1939 527 2040 238 1828 3432 8 35
194 2725 1632 68 1128 317 3940 3419 3622 3815 1023 52 1735 245 2134 4216 1418 2939 4138 2224 930 213 3741 261 1820 303 3136 2333 2042 412 3226 1229 2810 1531 336 721 1314 137 257 359 811 4027
1021 262 1135 939 2526 3128 2336 1316 357 237 4019 2232 633 1 3938 527 364 428 3723 346 205 1834 40 30 1429 2842 1214 2110 389 3322 3211 1612 4125 315 2713 2431 17 718 2941 1524 820 4 193
33 32 5 40 3830 28 343 12 10 6 188 1331 232 940 1142 325 3538 249 1533 2516 1914 813 2327 26 17 274 19 20 1424 4115 736 2637 2918 3011 23 10 22 1 39 3721 365 3134 1641 422 435 217 2229
208 1734 726 6 16 33 15 28 2441 3038 2640 1224 3930 421 4122 817 320 35 1632 3723 1342 1925 2311 365 2912 111 31 2 3113 183 3239 27 14 69 3318 347 519 4229 136 104 2537 22 40 38 9 2110
1 22 2 347 1839 3523 3314 1918 511 2030 615 17 26 24 10 37 38 86 28 2916 4112 324 731 135 1736 3137 4221 1440 2529 913 398 363 2241 2334 4038 304 32 1225 442 165 1127 2120 1319 1533 279
2425 1032 311 13 19 35 76 4142 34 837 1710 2913 1620 39 235 19 330 2641 917 2136 147 3015 22 440 38 4026 1131 62 1223 4218 28 1524 33 221 3211 2722 204 2514 3639 1827 378 53 29 16 12
2617 12 18 230 1911 214 2310 355 1628 18 733 331 2519 422 1736 3313 296 129 3934 2042 4129 221 1127 4239 1338 621 2825 3423 3226 1024 317 2415 272 3816 3641 14 3732 540 835 3020 93 40 1537
1227 736 439 37 35 34 18 2 13 2034 3214 2719 5 2932 2226 4038 3112 193 2123 111 1030 2617 11 6 1535 21 16 3324 41 287 259 2428 1420 422 2331 140 3010 84 1729 3822 3925 3633 342 915 8
2336 1524 28 42 2032 711 1637 912 1129 3233 1916 179 2640 63 1210 234 247 115 364 4027 3022 13 3820 25 518 2713 3326 21 342 39 34 1817 14 225 298 4241 821 1023 3730 35 31 356 4138 19 1
532 30 36 634 2814 187 4122 339 135 2523 166 38 20 7 10 2421 37 422 115 2315 2631 2133 123 216 3225 917 4 27 19 13 3024 1929 40 39 3428 81 2220 338 1410 3511 1742 1512 298 3141 26 18
362 1141 158 2520 4029 535 225 74 396 341 4117 2419 353 3018 1042 3133 2712 2134 425 1732 2611 15 30 38 439 114 1923 3231 1321 37 8 20 1222 9 2226 27 16 2328 1836 37 640 3310 2913 28 1424
28 339 1 827 1714 122 20 9 42 3826 4 2225 3218 4033 1641 3028 2729 532 734 1838 3313 417 3721 398 2310 2035 2931 17 16 19 3123 30 15 215 6 240 1037 2412 11 343 36 1342 3522 1424 26 2511
183 13 429 3024 12 10 29 1915 21 288 3141 3633 332 420 171 2025 40 927 2422 3729 2731 618 3436 10 11 3917 82 737 1528 3539 2342 2214 324 216 1435 57 2530 3834 26 4138 16 1612 3323 5 19
376 3933 37 26 530 415 2920 4135 1421 1639 3114 27 157 204 1332 336 382 65 25 29 18 34 23 2422 3217 1242 1124 3528 3611 8 1 938 403 2112 725 1731 3441 28 1929 10 3019 813 3340 22 4216
1733 2416 3821 3229 1440 3938 1524 87 2230 25 4227 11 3025 232 1332 1237 5 35 4 3622 279 331 542 3318 1936 710 4134 1 1614 2912 2813 108 3541 623 2017 313 2119 4015 920 239 186 37 3428 26
1614 2517 924 2931 3919 3727 826 276 2438 183 209 4036 3312 41 15 3118 1437 2122 3440 133 616 232 2329 542 3611 4 1310 357 2234 3225 1223 4128 3835 713 320 198 262 305 1721 111 4239 10 2830
718 531 29 22 4137 3125 363 1124 2926 28 15 8 354 3220 1836 199 30 2633 242 27 38 1 37 1413 2010 2732 2511 212 4216 419 4021 1335 1714 245 923 3740 3915 1641 3439 2317 12 6 33 1034
2234 239 1315 1719 2423 941 105 1139 2924 3331 1626 1230 3613 3225 3711 6 110 40 311 1516 1822 252 2133 328 3412 214 2837 3538 3932 4129 58 143 277 1942 420 3035 266 4218 384 2027 717 821 36
2924 1 19 2742 5 2123 26 2310 37 3035 717 18 1413 257 639 1721 3329 168 121 32 1540 2220 1314 4012 244 3915 1026 1122 3825 9 36 841 3136 427 2034 353 4119 3628 3416 2811 4230 31 2 38 33
97 223 27 3941 10 117 3624 17 4021 22 1236 3314 2930 1116 25 13 7 2842 34 3018 3219 11 3 141 2037 839 2312 1538 540 198 1833 3835 3125 4 2132 4220 416 379 245 15 13 31 26 1629 628 3527 2
2723 818 4025 742 1327 335 251 638 434 3712 931 215 3932 20 1640 266 34 1519 10 28 1230 2113 413 388 297 54 242 4229 11 3526 36 9 17 1821 3024 337 1433 2235 1939 122 3211 3116 2314 41
2528 11 40 35 4136 3142 916 1125 2113 4019 174 5 239 626 20 12 3415 1441 3637 2334 3038 2614 2931 89 2017 187 1930 1027 426 42 1629 3710 338 24 1 2218 1321 7 27 3933 32 153 2822 24 38 323
3040 38 3523 101 621 2619 1232 3729 2012 134 282 1435 2531 2711 926 157 228 3116 4041 5 33 3910 3 16 22 724 120 1933 1827 8 37 15 42 2325 2939 4113 3414 1130 2136 46 2434 1718 325 369 17
4219 4126 2034 1427 378 1829 137 2120 2716 4041 3036 2314 11 210 15 4 25 383 226 2833 125 299 721 123 3113 1735 1930 2632 1022 1637 338 418 3617 831 911 3512 640 331 3242 5 3424 39 242 28
135 2229 810 3833 4213 631 2839 301 79 1721 2338 311 936 30 14 240 442 1317 52 3320 1041 3927 366 2419 4118 3522 34 403 12 295 2726 37 1124 16 2628 157 218 1823 3137 1915 25 2034 4 32
2110 1935 333 24 3421 4 323 282 5 2930 25 2640 2739 712 1 1837 1531 2320 1324 3628 42 168 4014 2226 3332 1723 209 216 416 1438 3022 3734 3941 619 811 3118 3529 917 107 1213 1115 3827 36 5
3915 295 2113 2325 369 382 417 3340 3227 335 542 3437 16 8 39 31 41 4023 2036 81 1632 2710 7 13 28 30 19 2533 3521 1520 2429 4 18 1738 6 30 31 1 26 11 234 924 42 123 22 1026 12 14 37
31 1422 39 16 154 4041 371 32 4238 11 365 826 2410 2223 4115 714 1835 63 358 1929 3430 513 1728 216 2312 925 387 320 2640 2917 232 2827 129 2042 1018 1334 119 2 33 424 2737 2536 3031 21
349 303 2338 1815 825 1734 612 421 21 2720 355 2140 1517 24 33 382 32 1127 14 398 2029 718 930 19 41 16 3710 4226 36 1235 4028 246 2532 2637 1042 197 2922 4113 511 28 34 31 2223 13 139
1137 2010 2414 140 2712 836 4018 313 1439 216 3435 1929 1024 3538 2641 229 3023 3325 3231 921 419 2 42 2834 1826 138 3827 31 30 7 233 37 25 513 15 1228 3632 2920 6 394 16 415 2311 17 22
3229 4220 257 3313 2638 1618 3130 3837 323 1017 1134 4 1322 28 1831 2125 1911 814 30 35 6 342 15 29 12 4124 2216 36 4 5 29 3921 203 2427 35 1 40 939 18 2742 3732 1410 2319 1726 733 41 6
812 2821 1042 318 16 13 147 39 1827 4136 218 34 37 3128 1923 3617 3313 24 30 32 3835 253 220 1729 414 1211 641 731 15 5 2416 276 119 2025 26 42 35 4033 22 2326 3438 9 112 3010 2940 1 4
1442 124 30 36 22 25 1 1516 23 3515 3332 399 183 4210 527 4135 287 3738 822 2721 1611 312 1026 24 3239 329 28 6 9 21 34 1941 2925 40 1713 720 3819 1133 205 1337 2612 217 414 8 18 31
38 318 3319 2217 4133 3040 204 331 1915 122 3728 426 2822 57 271 2335 2510 1711 1429 425 3527 325 93 14 34 112 1141 2920 839 1318 742 10 1630 36 18 26 1524 409 16 21 223 3937 2432 613
 
Part 4: 1000100 latin squares of order 256:
 
Generated in 35976.960275435816295878 seconds.
</pre>
 
351

edits