|
|
BSD 4.3reno
Berkeley Pascal PI -- Version 3.1 (9/7/85)
Sun Jul 21 14:56 1985 insan.p
0 TRA4 0
1 program insane(input, output);
2 label
6 GOTO:1 6
3 1;
4 type
5 alfa = packed array[1..10] of char;
6 metaface = (notaface, front, back, top, bottom, left, right);
7 face = front .. right;
8 metapair = (notapair, one2, three4, five6);
9 pair = one2 .. five6;
10 metacolor = (notacolor, red, blue, green, white);
11 color = red .. white;
12 blockno = 1..4;
13 var
14 nosolutions: Boolean;
15 index, halfindex: integer;
16 pointr: integer;
17 datas: array[blockno, face] of alfa;
18 sum: array[blockno, pair, color] of integer;
19 halfsolution: array[blockno, 1..30] of pair;
12 TRA4 12
21 function word(alf: alfa): color;
22 begin
23 if alf = 'red' then
24 word := red else
25 if alf = 'blue' then
26 word := blue else
27 if alf = 'green' then
28 word := green else
29 word := white;
patch 12 18
18 BEG:20 0
24 CASE4 12
28 CASE4 1
32 CASE2 22
34 "word"
40 LINO:23
42 RV:5 32 10
48 CONG:10
50 "red"
62 RELG EQ 10
66 IF -2
70 LINO:24
72 LV:5 44
76 CON1:1
78 RANG2:1 4
82 AS2
84 TRA -2
patch 66 20
88 LINO:25
90 RV:5 32 10
96 CONG:10
98 "blue"
110 RELG EQ 10
114 IF -2
118 LINO:26
120 LV:5 44
124 CON1:2
126 RANG2:1 4
130 AS2
132 TRA -2
patch 114 20
136 LINO:27
138 RV:5 32 10
144 CONG:10
146 "green"
158 RELG EQ 10
162 IF -2
166 LINO:28
168 LV:5 44
172 CON1:3
174 RANG2:1 4
178 AS2
180 TRA -2
patch 162 20
184 LINO:29
186 LV:5 44
190 CON1:4
192 RANG2:1 4
196 AS2
patch 180 16
patch 132 64
patch 84 112
198 END
patch 18 0
30 end;
200 TRA4 200
32 procedure readin;
33 var
34 hue: alfa;
35 ch: char;
36 cube: blockno;
37 position: face;
206 TRA4 206
39 procedure tone;
40 begin
41 case ch of
42 'r': hue := 'red';
43 'w': hue := 'white';
44 'g': hue := 'green';
45 'b': hue := 'blue';
46 end;
patch 206 214
214 BEG:20 0
220 CASE4 0
224 CASE4 1
228 CASE2 40
230 "tone"
236 LINO:41
238 RV1:4 -13
242 CASE1OP:4
244 .=.+8
252 CASE1 114
253 CASE1 119
254 CASE1 103
255 CASE1 98
256 TRA -2
patch 242 16
260 LINO:42
262 LV:4 -12
266 CONG:10
268 "red"
280 AS:10
282 TRA -28
patch 244 42
286 LINO:43
288 LV:4 -12
292 CONG:10
294 "white"
306 AS:10
308 TRA -54
patch 246 68
312 LINO:44
314 LV:4 -12
318 CONG:10
320 "green"
332 AS:10
334 TRA -80
patch 248 94
338 LINO:45
340 LV:4 -12
344 CONG:10
346 "blue"
358 AS:10
360 TRA -106
patch 256 106
364 END
patch 214 0
47 end;
49 begin
50 for cube := 1 to 4 do
51 begin
52 for position := front to right do
53 begin
54 read(ch);
55 tone;
56 datas[cube, position] := hue;
57 end;
58 readln;
59 end;
patch 200 366
366 BEG:22 0
372 CASE4 0
376 CASE4 1
380 CASE2 49
382 "readin"
390 LINO:50
392 LV:4 -20
396 CON1:1
398 AS24
400 LV:4 -24
404 CON1:4
406 AS24
408 RV4:4 -20
412 RV4:4 -24
416 REL4 LE
418 IF -2
422 LV:4 -25
426 RV4:4 -24
430 RANG42:1 4
434 AS41
436 LV:4 -25
440 RV4:4 -20
444 RANG42:1 4
448 AS41
450 LV:4 -14
454 RV14:4 -25
458 AS41
460 LINO:52
462 LV:4 -32
466 CON1:1
468 AS24
470 LV:4 -36
474 CON1:6
476 AS24
478 RV4:4 -32
482 RV4:4 -36
486 REL4 LE
488 IF -2
492 LV:4 -37
496 RV4:4 -36
500 RANG42:1 6
504 AS41
506 LV:4 -37
510 RV4:4 -32
514 RANG42:1 6
518 AS41
520 LV:4 -15
524 RV14:4 -37
528 AS41
530 LINO:54
532 UNITINP
534 LV:4 -13
538 READC
540 RSNG2:127
542 AS21
544 LINO:55
546 CALL:2 206
552 LINO:56
554 LV:2 -256
558 RV1:4 -25
562 INX2:60 1 4
568 RV1:4 -37
572 INX2:10 1 6
578 RV:4 -12 10
584 AS:10
586 LINO:52
588 RV4:4 -36
592 LV:4 -37
596 FOR1U:-78
patch 488 108
598 LINO:58
600 UNITINP
602 READLN
604 LINO:50
606 RV4:4 -24
610 LV:4 -25
614 FOR1U -168
patch 418 198
618 END
patch 366 40
60 end;
620 TRA4 620
62 procedure sumcolors;
63 var
64 cube: blockno;
65 side: face;
626 TRA4 626
66 function facepair(aface: face): pair;
67 begin
68 case aface of
69 front, back: facepair := one2;
70 top, bottom: facepair := three4;
71 left, right: facepair := five6
72 end;
patch 626 634
634 BEG:24 0
640 CASE4 4
644 CASE4 1
648 CASE2 67
650 "facepair"
660 LINO:68
662 RV1:7 33
666 CASE1OP:6
668 .=.+12
680 CASE1 1
681 CASE1 2
682 CASE1 3
683 CASE1 4
684 CASE1 5
685 CASE1 6
686 TRA -2
patch 666 22
patch 668 22
690 LINO:69
692 LV:7 36
696 CON1:1
698 RANG2:1 3
702 AS2
704 TRA -20
patch 670 40
patch 672 40
708 LINO:70
710 LV:7 36
714 CON1:2
716 RANG2:1 3
720 AS2
722 TRA -38
patch 674 58
patch 676 58
726 LINO:71
728 LV:7 36
732 CON1:3
734 RANG2:1 3
738 AS2
740 TRA -56
patch 686 56
744 END
patch 634 0
73 end;
746 TRA4 746
75 procedure initializesum;
76 var
77 cube: blockno;
78 side: face;
79 technicolor: color;
80 begin
81 for cube := 1 to 4 do
82 for side := front to right do
83 for technicolor := red to white do
84 sum[cube, facepair(side), technicolor] := 0;
patch 746 754
754 BEG:28 0
760 CASE4 0
764 CASE4 1
768 CASE2 80
770 "initializesum"
784 LINO:81
786 LV:6 -8
790 CON1:1
792 AS24
794 LV:6 -12
798 CON1:4
800 AS24
802 RV4:6 -8
806 RV4:6 -12
810 REL4 LE
812 IF -2
816 LV:6 -13
820 RV4:6 -12
824 RANG42:1 4
828 AS41
830 LV:6 -13
834 RV4:6 -8
838 RANG42:1 4
842 AS41
844 LV:6 -1
848 RV14:6 -13
852 AS41
854 LINO:82
856 LV:6 -20
860 CON1:1
862 AS24
864 LV:6 -24
868 CON1:6
870 AS24
872 RV4:6 -20
876 RV4:6 -24
880 REL4 LE
882 IF -2
886 LV:6 -25
890 RV4:6 -24
894 RANG42:1 6
898 AS41
900 LV:6 -25
904 RV4:6 -20
908 RANG42:1 6
912 AS41
914 LV:6 -2
918 RV14:6 -25
922 AS41
924 LINO:83
926 LV:6 -32
930 CON1:1
932 AS24
934 LV:6 -36
938 CON1:4
940 AS24
942 RV4:6 -32
946 RV4:6 -36
950 REL4 LE
952 IF -2
956 LV:6 -37
960 RV4:6 -36
964 RANG42:1 4
968 AS41
970 LV:6 -37
974 RV4:6 -32
978 RANG42:1 4
982 AS41
984 LV:6 -3
988 RV14:6 -37
992 AS41
994 LINO:84
996 LV:2 -448
1000 RV1:6 -13
1004 INX2:48 1 4
1010 PUSH:-4
1012 RV1:6 -25
1016 RANG2:1 6
1020 CALL:2 626
1026 INX2:16 1 3
1032 RV1:6 -37
1036 INX2:4 1 4
1042 CON1
1044 AS24
1046 LINO:83
1048 RV4:6 -36
1052 LV:6 -37
1056 FOR1U:-74
patch 952 104
1058 LINO:82
1060 RV4:6 -24
1064 LV:6 -25
1068 FOR1U -158
patch 882 188
1072 LINO:81
1074 RV4:6 -12
1078 LV:6 -13
1082 FOR1U -242
patch 812 272
1086 END
patch 754 40
85 end;
87 begin
88 initializesum;
89 for cube := 1 to 4 do
90 for side := front to right do
91 sum[cube, facepair(side), word(datas[cube,side])] :=
92 sum[cube, facepair(side), word(datas[cube,side])] + 1;
patch 620 1090
1090 BEG:24 0
1096 CASE4 0
1100 CASE4 1
1104 CASE2 87
1106 "sumcolors"
1116 LINO:88
1118 CALL:2 746
1124 LINO:89
1126 LV:4 -8
1130 CON1:1
1132 AS24
1134 LV:4 -12
1138 CON1:4
1140 AS24
1142 RV4:4 -8
1146 RV4:4 -12
1150 REL4 LE
1152 IF -2
1156 LV:4 -13
1160 RV4:4 -12
1164 RANG42:1 4
1168 AS41
1170 LV:4 -13
1174 RV4:4 -8
1178 RANG42:1 4
1182 AS41
1184 LV:4 -1
1188 RV14:4 -13
1192 AS41
1194 LINO:90
1196 LV:4 -20
1200 CON1:1
1202 AS24
1204 LV:4 -24
1208 CON1:6
1210 AS24
1212 RV4:4 -20
1216 RV4:4 -24
1220 REL4 LE
1222 IF -2
1226 LV:4 -25
1230 RV4:4 -24
1234 RANG42:1 6
1238 AS41
1240 LV:4 -25
1244 RV4:4 -20
1248 RANG42:1 6
1252 AS41
1254 LV:4 -2
1258 RV14:4 -25
1262 AS41
1264 LINO:91
1266 LV:2 -448
1270 RV1:4 -13
1274 INX2:48 1 4
1280 PUSH:-4
1282 RV1:4 -25
1286 RANG2:1 6
1290 CALL:2 626
1296 INX2:16 1 3
1302 PUSH:-4
1304 LV:2 -256
1308 RV1:4 -13
1312 INX2:60 1 4
1318 RV1:4 -25
1322 INX2:10 1 6
1328 IND:10
1330 CALL:1 12
1336 INX2:4 1 4
1342 LV:2 -448
1346 RV1:4 -13
1350 INX2:48 1 4
1356 PUSH:-4
1358 RV1:4 -25
1362 RANG2:1 6
1366 CALL:2 626
1372 INX2:16 1 3
1378 PUSH:-4
1380 LV:2 -256
1384 RV1:4 -13
1388 INX2:60 1 4
1394 RV1:4 -25
1398 INX2:10 1 6
1404 IND:10
1406 CALL:1 12
1412 INX2:4 1 4
1418 IND4
1420 CON1:1
1422 ADD24
1424 AS4
1426 LINO:90
1428 RV4:4 -24
1432 LV:4 -25
1436 FOR1U -186
patch 1222 216
1440 LINO:89
1442 RV4:4 -12
1446 LV:4 -13
1450 FOR1U -270
patch 1152 300
1454 END
patch 1090 28
93 end;
1456 TRA4 1456
95 procedure find2222;
96 var
97 subtotals: array[red..white] of integer;
98 pair1, pair2, pair3, pair4: pair;
1462 TRA4 1462
100 function two222(pair1, pair2, pair3, pair4: pair): Boolean;
101 var
102 hue: color;
103 begin
104 for hue := red to white do
105 subtotals[hue] :=
106 sum[1, pair1, hue]+
107 sum[2, pair2, hue]+
108 sum[3, pair3, hue]+
109 sum[4, pair4, hue];
110 if (subtotals[red]=2) and
111 (subtotals[blue]=2) and
112 (subtotals[green]=2) and
113 (subtotals[white]=2) then
114 two222 := true else
115 two222 := false;
patch 1462 1470
1470 BEG:22 0
1476 CASE4 16
1480 CASE4 1
1484 CASE2 103
1486 "two222"
1494 LINO:104
1496 LV:6 -8
1500 CON1:1
1502 AS24
1504 LV:6 -12
1508 CON1:4
1510 AS24
1512 RV4:6 -8
1516 RV4:6 -12
1520 REL4 LE
1522 IF -2
1526 LV:6 -13
1530 RV4:6 -12
1534 RANG42:1 4
1538 AS41
1540 LV:6 -13
1544 RV4:6 -8
1548 RANG42:1 4
1552 AS41
1554 LV:6 -1
1558 RV14:6 -13
1562 AS41
1564 LINO:105
1566 LV:4 -16
1570 RV1:6 -13
1574 INX2:4 1 4
1580 LV:2 -448
1584 RV1:7 45
1588 INX2:16 1 3
1594 RV1:6 -13
1598 INX2:4 1 4
1604 IND4
1606 LV:2 -448
1610 CON1:48
1612 ADD24
1614 RV1:7 41
1618 INX2:16 1 3
1624 RV1:6 -13
1628 INX2:4 1 4
1634 IND4
1636 ADD4
1638 LV:2 -448
1642 CON1:96
1644 ADD24
1646 RV1:7 37
1650 INX2:16 1 3
1656 RV1:6 -13
1660 INX2:4 1 4
1666 IND4
1668 ADD4
1670 LV:2 -448
1674 CON2 144
1678 ADD24
1680 RV1:7 33
1684 INX2:16 1 3
1690 RV1:6 -13
1694 INX2:4 1 4
1700 IND4
1702 ADD4
1704 AS4
1706 LINO:104
1708 RV4:6 -12
1712 LV:6 -13
1716 FOR1U -166
patch 1522 196
1720 LINO:110
1722 LV:4 -16
1726 IND4
1728 CON1:2
1730 REL24 EQ
1732 LV:4 -16
1736 CON1:4
1738 ADD24
1740 IND4
1742 CON1:2
1744 REL24 EQ
1746 AND
1748 LV:4 -16
1752 CON1:8
1754 ADD24
1756 IND4
1758 CON1:2
1760 REL24 EQ
1762 AND
1764 LV:4 -16
1768 CON1:12
1770 ADD24
1772 IND4
1774 CON1:2
1776 REL24 EQ
1778 AND
1780 IF -2
1784 LINO:114
1786 LV:7 48
1790 CON1:1
1792 RSNG2:1
1794 AS2
1796 TRA -2
patch 1780 18
1800 LINO:115
1802 LV:7 48
1806 CON1
1808 RSNG2:1
1810 AS2
patch 1796 14
1812 END
patch 1470 16
116 end;
1814 TRA4 1814
118 procedure listsolution;
119 begin
120 halfsolution[1, halfindex] := pair1;
121 halfsolution[2, halfindex] := pair2;
122 halfsolution[3, halfindex] := pair3;
123 halfsolution[4, halfindex] := pair4;
124 halfindex := halfindex + 1;
patch 1814 1822
1822 BEG:28 0
1828 CASE4 0
1832 CASE4 1
1836 CASE2 119
1838 "listsolution"
1852 LINO:120
1854 LV:2 -568
1858 RV4:2 -12
1862 INX4:1 1 30
1868 RV1:4 -17
1872 RANG2:1 3
1876 AS21
1878 LINO:121
1880 LV:2 -568
1884 CON1:30
1886 ADD24
1888 RV4:2 -12
1892 INX4:1 1 30
1898 RV1:4 -18
1902 RANG2:1 3
1906 AS21
1908 LINO:122
1910 LV:2 -568
1914 CON1:60
1916 ADD24
1918 RV4:2 -12
1922 INX4:1 1 30
1928 RV1:4 -19
1932 RANG2:1 3
1936 AS21
1938 LINO:123
1940 LV:2 -568
1944 CON1:90
1946 ADD24
1948 RV4:2 -12
1952 INX4:1 1 30
1958 RV1:4 -20
1962 RANG2:1 3
1966 AS21
1968 LINO:124
1970 LV:2 -12
1974 RV4:2 -12
1978 CON1:1
1980 ADD24
1982 AS4
1984 END
patch 1822 0
125 end;
127 begin
128 halfindex := 1;
129 for pair1 := one2 to five6 do
130 for pair2 := one2 to five6 do
131 for pair3 := one2 to five6 do
132 for pair4 := one2 to five6 do
133 if two222(pair1, pair2, pair3, pair4) then
134 listsolution;
135 if halfindex <= 2 then
136 begin
137 nosolutions := true;
138 goto 1;
139 end;
patch 1456 1986
1986 BEG:24 0
1992 CASE4 0
1996 CASE4 1
2000 CASE2 127
2002 "find2222"
2012 LINO 128
2016 LV:2 -12
2020 CON1:1
2022 AS24
2024 LINO 129
2028 LV:4 -24
2032 CON1:1
2034 AS24
2036 LV:4 -28
2040 CON1:3
2042 AS24
2044 RV4:4 -24
2048 RV4:4 -28
2052 REL4 LE
2054 IF -2
2058 LV:4 -29
2062 RV4:4 -28
2066 RANG42:1 3
2070 AS41
2072 LV:4 -29
2076 RV4:4 -24
2080 RANG42:1 3
2084 AS41
2086 LV:4 -17
2090 RV14:4 -29
2094 AS41
2096 LINO 130
2100 LV:4 -36
2104 CON1:1
2106 AS24
2108 LV:4 -40
2112 CON1:3
2114 AS24
2116 RV4:4 -36
2120 RV4:4 -40
2124 REL4 LE
2126 IF -2
2130 LV:4 -41
2134 RV4:4 -40
2138 RANG42:1 3
2142 AS41
2144 LV:4 -41
2148 RV4:4 -36
2152 RANG42:1 3
2156 AS41
2158 LV:4 -18
2162 RV14:4 -41
2166 AS41
2168 LINO 131
2172 LV:4 -48
2176 CON1:1
2178 AS24
2180 LV:4 -52
2184 CON1:3
2186 AS24
2188 RV4:4 -48
2192 RV4:4 -52
2196 REL4 LE
2198 IF -2
2202 LV:4 -53
2206 RV4:4 -52
2210 RANG42:1 3
2214 AS41
2216 LV:4 -53
2220 RV4:4 -48
2224 RANG42:1 3
2228 AS41
2230 LV:4 -19
2234 RV14:4 -53
2238 AS41
2240 LINO 132
2244 LV:4 -60
2248 CON1:1
2250 AS24
2252 LV:4 -64
2256 CON1:3
2258 AS24
2260 RV4:4 -60
2264 RV4:4 -64
2268 REL4 LE
2270 IF -2
2274 LV:4 -65
2278 RV4:4 -64
2282 RANG42:1 3
2286 AS41
2288 LV:4 -65
2292 RV4:4 -60
2296 RANG42:1 3
2300 AS41
2302 LV:4 -20
2306 RV14:4 -65
2310 AS41
2312 LINO 133
2316 PUSH:-4
2318 RV1:4 -29
2322 RANG2:1 3
2326 RV1:4 -41
2330 RANG2:1 3
2334 RV1:4 -53
2338 RANG2:1 3
2342 RV1:4 -65
2346 RANG2:1 3
2350 CALL:2 1462
2356 IF -2
2360 LINO 134
2364 CALL:2 1814
patch 2356 12
2370 LINO 132
2374 RV4:4 -64
2378 LV:4 -65
2382 FOR1U:-82
patch 2270 112
2384 LINO 131
2388 RV4:4 -52
2392 LV:4 -53
2396 FOR1U -170
patch 2198 200
2400 LINO 130
2404 RV4:4 -40
2408 LV:4 -41
2412 FOR1U -258
patch 2126 288
2416 LINO 129
2420 RV4:4 -28
2424 LV:4 -29
2428 FOR1U -346
patch 2054 376
2432 LINO 135
2436 RV4:2 -12
2440 CON1:2
2442 REL24 LE
2444 IF -2
2448 LINO 137
2452 LV:2 -1
2456 CON1:1
2458 RSNG2:1
2460 AS21
2462 LINO 138
2466 TRA4 6
patch 2444 26
2472 END
patch 1986 68
140 end;
2474 TRA4 2474
142 procedure simultaneous;
143 var
144 done: Boolean;
145 begin
146 nosolutions := false;
147 pointr := 0;
148 done := false;
149 repeat
150 pointr := pointr + 1;
151 repeat
152 index := succ(pointr);
153 if (halfsolution[1, pointr]<>halfsolution[1,index]) and
154 (halfsolution[2, pointr]<>halfsolution[2,index]) and
155 (halfsolution[3, pointr]<>halfsolution[3,index]) and
156 (halfsolution[4, pointr]<>halfsolution[4,index]) then
157 done := true else
158 index := index + 1;
159 until done or (index = pred(halfindex));
160 until done or (pointr = halfindex);
161 if pointr = halfindex then
162 begin
163 nosolutions := true;
164 goto 1;
165 end;
patch 2474 2482
2482 BEG:28 0
2488 CASE4 0
2492 CASE4 1
2496 CASE2 145
2498 "simultaneous"
2512 LINO 146
2516 LV:2 -1
2520 CON1
2522 RSNG2:1
2524 AS21
2526 LINO 147
2530 LV:2 -16
2534 CON1
2536 AS24
2538 LINO 148
2542 LV:4 -1
2546 CON1
2548 RSNG2:1
2550 AS21
2552 LINO 150
2556 LV:2 -16
2560 RV4:2 -16
2564 CON1:1
2566 ADD24
2568 AS4
2570 LINO 152
2574 LV:2 -8
2578 RV4:2 -16
2582 SUCC4 -2147483648 2147483647
2592 AS4
2594 LINO 153
2598 LV:2 -568
2602 RV4:2 -16
2606 INX4:1 1 30
2612 IND1
2614 LV:2 -568
2618 RV4:2 -8
2622 INX4:1 1 30
2628 IND1
2630 REL2 NE
2632 LV:2 -568
2636 CON1:30
2638 ADD24
2640 RV4:2 -16
2644 INX4:1 1 30
2650 IND1
2652 LV:2 -568
2656 CON1:30
2658 ADD24
2660 RV4:2 -8
2664 INX4:1 1 30
2670 IND1
2672 REL2 NE
2674 AND
2676 LV:2 -568
2680 CON1:60
2682 ADD24
2684 RV4:2 -16
2688 INX4:1 1 30
2694 IND1
2696 LV:2 -568
2700 CON1:60
2702 ADD24
2704 RV4:2 -8
2708 INX4:1 1 30
2714 IND1
2716 REL2 NE
2718 AND
2720 LV:2 -568
2724 CON1:90
2726 ADD24
2728 RV4:2 -16
2732 INX4:1 1 30
2738 IND1
2740 LV:2 -568
2744 CON1:90
2746 ADD24
2748 RV4:2 -8
2752 INX4:1 1 30
2758 IND1
2760 REL2 NE
2762 AND
2764 IF -2
2768 LINO 157
2772 LV:4 -1
2776 CON1:1
2778 RSNG2:1
2780 AS21
2782 TRA -2
patch 2764 20
2786 LINO 158
2790 LV:2 -8
2794 RV4:2 -8
2798 CON1:1
2800 ADD24
2802 AS4
patch 2782 20
2804 RV1:4 -1
2808 RV4:2 -8
2812 RV4:2 -12
2816 PRED4 -2147483648 2147483647
2826 REL4 EQ
2828 OR
2830 IF -262
2834 RV1:4 -1
2838 RV4:2 -16
2842 RV4:2 -12
2846 REL4 EQ
2848 OR
2850 IF -300
2854 LINO 161
2858 RV4:2 -16
2862 RV4:2 -12
2866 REL4 EQ
2868 IF -2
2872 LINO 163
2876 LV:2 -1
2880 CON1:1
2882 RSNG2:1
2884 AS21
2886 LINO 164
2890 TRA4 6
patch 2868 26
2896 END
patch 2482 4
166 end;
2898 TRA4 2898
168 procedure rearrange;
169 var
170 box: blockno;
171 a, b: pair;
2904 TRA4 2904
173 procedure put(a, b: pair);
174 var
175 old1, new1, old2, new2: face;
176 save1, save2: alfa;
2910 TRA4 2910
178 procedure oldpair(c: pair);
179 begin
180 case c of
181 one2:
182 begin
183 old1 := front;
184 old2 := back;
185 end;
186 three4:
187 begin
188 old1 := top;
189 old2 := bottom;
190 end;
191 five6:
192 begin
193 old1 := left;
194 old2 := right;
195 end
196 end;
patch 2910 2918
2918 BEG:22 0
2924 CASE4 4
2928 CASE4 1
2932 CASE2 179
2934 "oldpair"
2942 LINO 180
2946 RV1:9 33
2950 CASE1OP:3
2952 .=.+6
2958 CASE1 1
2959 CASE1 2
2960 CASE1 3
2962 TRA -2
patch 2950 14
2966 LINO 183
2970 LV:6 -1
2974 CON1:1
2976 RANG2:1 6
2980 AS21
2982 LINO 184
2986 LV:6 -3
2990 CON1:2
2992 RANG2:1 6
2996 AS21
2998 TRA -38
patch 2952 50
3002 LINO 188
3006 LV:6 -1
3010 CON1:3
3012 RANG2:1 6
3016 AS21
3018 LINO 189
3022 LV:6 -3
3026 CON1:4
3028 RANG2:1 6
3032 AS21
3034 TRA -74
patch 2954 86
3038 LINO 193
3042 LV:6 -1
3046 CON1:5
3048 RANG2:1 6
3052 AS21
3054 LINO 194
3058 LV:6 -3
3062 CON1:6
3064 RANG2:1 6
3068 AS21
3070 TRA -110
patch 2962 110
3074 END
patch 2918 0
197 end;
3076 TRA4 3076
198 procedure newpair(d: pair);
199 begin
200 oldpair(b);
201 new1 := old1;
202 new2 := old2;
patch 3076 3082
3082 BEG:22 0
3088 CASE4 4
3092 CASE4 1
3096 CASE2 199
3098 "newpair"
3106 LINO 200
3110 RV1:7 33
3114 RANG2:1 3
3118 CALL:3 2910
3124 LINO 201
3128 LV:6 -2
3132 RV1:6 -1
3136 RANG2:1 6
3140 AS21
3142 LINO 202
3146 LV:6 -4
3150 RV1:6 -3
3154 RANG2:1 6
3158 AS21
203 end;
In procedure newpair:
w - variable d is never used
3160 END
patch 3082 0
205 begin
206 newpair(b);
207 oldpair(a);
208 save1 := datas[box, new1];
209 datas[box, new1] := datas[box, old1];
210 datas[box, old1] := save1;
211 save2 := datas[box, new2];
212 datas[box, new2] := datas[box, old2];
213 datas[box, old2] := save2;
patch 2904 3162
3162 BEG:18 0
3168 CASE4 8
3172 CASE4 1
3176 CASE2 205
3178 "put"
3182 LINO 206
3186 RV1:7 33
3190 RANG2:1 3
3194 CALL:3 3076
3200 LINO 207
3204 RV1:7 37
3208 RANG2:1 3
3212 CALL:3 2910
3218 LINO 208
3222 LV:6 -16
3226 LV:2 -256
3230 RV1:4 -1
3234 INX2:60 1 4
3240 RV1:6 -2
3244 INX2:10 1 6
3250 IND:10
3252 AS:10
3254 LINO 209
3258 LV:2 -256
3262 RV1:4 -1
3266 INX2:60 1 4
3272 RV1:6 -2
3276 INX2:10 1 6
3282 LV:2 -256
3286 RV1:4 -1
3290 INX2:60 1 4
3296 RV1:6 -1
3300 INX2:10 1 6
3306 IND:10
3308 AS:10
3310 LINO 210
3314 LV:2 -256
3318 RV1:4 -1
3322 INX2:60 1 4
3328 RV1:6 -1
3332 INX2:10 1 6
3338 RV:6 -16 10
3344 AS:10
3346 LINO 211
3350 LV:6 -28
3354 LV:2 -256
3358 RV1:4 -1
3362 INX2:60 1 4
3368 RV1:6 -4
3372 INX2:10 1 6
3378 IND:10
3380 AS:10
3382 LINO 212
3386 LV:2 -256
3390 RV1:4 -1
3394 INX2:60 1 4
3400 RV1:6 -4
3404 INX2:10 1 6
3410 LV:2 -256
3414 RV1:4 -1
3418 INX2:60 1 4
3424 RV1:6 -3
3428 INX2:10 1 6
3434 IND:10
3436 AS:10
3438 LINO 213
3442 LV:2 -256
3446 RV1:4 -1
3450 INX2:60 1 4
3456 RV1:6 -3
3460 INX2:10 1 6
3466 RV:6 -28 10
3472 AS:10
3474 END
patch 3162 28
214 end;
216 begin
217 for box := 1 to 4 do
218 begin
219 a := halfsolution[box, pointr];
220 b := halfsolution[box, index];
221 if (a=one2) and (b=five6) then
222 put(five6, three4) else
223 begin
224 if a = three4 then
225 begin
226 if b = one2 then
227 begin
228 put(one2, five6);
229 put(three4, one2);
230 put(five6, three4);
231 end else
232 begin
233 put(three4, one2);
234 put(five6, three4);
235 end
236 end else
237 if b = one2 then
238 begin
239 put(one2, three4);
240 put(five6, one2);
241 end else
242 put(five6, one2);
243 end;
244 end;
patch 2898 3478
3478 BEG:24 0
3484 CASE4 0
3488 CASE4 1
3492 CASE2 216
3494 "rearrange"
3504 LINO 217
3508 LV:4 -8
3512 CON1:1
3514 AS24
3516 LV:4 -12
3520 CON1:4
3522 AS24
3524 RV4:4 -8
3528 RV4:4 -12
3532 REL4 LE
3534 IF -2
3538 LV:4 -13
3542 RV4:4 -12
3546 RANG42:1 4
3550 AS41
3552 LV:4 -13
3556 RV4:4 -8
3560 RANG42:1 4
3564 AS41
3566 LV:4 -1
3570 RV14:4 -13
3574 AS41
3576 LINO 219
3580 LV:4 -2
3584 LV:2 -568
3588 RV1:4 -13
3592 INX2:30 1 4
3598 RV4:2 -16
3602 INX4:1 1 30
3608 IND1
3610 RANG2:1 3
3614 AS21
3616 LINO 220
3620 LV:4 -3
3624 LV:2 -568
3628 RV1:4 -13
3632 INX2:30 1 4
3638 RV4:2 -8
3642 INX4:1 1 30
3648 IND1
3650 RANG2:1 3
3654 AS21
3656 LINO 221
3660 RV1:4 -2
3664 CON1:1
3666 REL2 EQ
3668 RV1:4 -3
3672 CON1:3
3674 REL2 EQ
3676 AND
3678 IF -2
3682 LINO 222
3686 CON1:3
3688 RANG2:1 3
3692 CON1:2
3694 RANG2:1 3
3698 CALL:2 2904
3704 TRA -2
patch 3678 28
3708 LINO 224
3712 RV1:4 -2
3716 CON1:2
3718 REL2 EQ
3720 IF -2
3724 LINO 226
3728 RV1:4 -3
3732 CON1:1
3734 REL2 EQ
3736 IF -2
3740 LINO 228
3744 CON1:1
3746 RANG2:1 3
3750 CON1:3
3752 RANG2:1 3
3756 CALL:2 2904
3762 LINO 229
3766 CON1:2
3768 RANG2:1 3
3772 CON1:1
3774 RANG2:1 3
3778 CALL:2 2904
3784 LINO 230
3788 CON1:3
3790 RANG2:1 3
3794 CON1:2
3796 RANG2:1 3
3800 CALL:2 2904
3806 TRA -2
patch 3736 72
3810 LINO 233
3814 CON1:2
3816 RANG2:1 3
3820 CON1:1
3822 RANG2:1 3
3826 CALL:2 2904
3832 LINO 234
3836 CON1:3
3838 RANG2:1 3
3842 CON1:2
3844 RANG2:1 3
3848 CALL:2 2904
patch 3806 46
3854 TRA -2
patch 3720 136
3858 LINO 237
3862 RV1:4 -3
3866 CON1:1
3868 REL2 EQ
3870 IF -2
3874 LINO 239
3878 CON1:1
3880 RANG2:1 3
3884 CON1:2
3886 RANG2:1 3
3890 CALL:2 2904
3896 LINO 240
3900 CON1:3
3902 RANG2:1 3
3906 CON1:1
3908 RANG2:1 3
3912 CALL:2 2904
3918 TRA -2
patch 3870 50
3922 LINO 242
3926 CON1:3
3928 RANG2:1 3
3932 CON1:1
3934 RANG2:1 3
3938 CALL:2 2904
patch 3918 24
patch 3854 88
patch 3704 238
3944 LINO 217
3948 RV4:4 -12
3952 LV:4 -13
3956 FOR1U -394
patch 3534 424
3960 END
patch 3478 16
245 end;
3962 TRA4 3962
247 procedure correct;
248 var
249 list: array[1..8] of integer;
250 done: Boolean;
251 side: face;
252 counter: integer;
3968 TRA4 3968
254 procedure check;
255 var
256 delux: array[red..white] of integer;
257 kolor: color;
258 counter: integer;
259 begin
260 done := true;
261 for kolor := red to white do
262 for counter := 1 to 4 do
263 delux[kolor] := 0;
264 for counter := 1 to 4 do
265 begin
266 delux[word(datas[counter,side])] :=
267 delux[word(datas[counter,side])] + 1;
268 if delux[word(datas[counter,side])] >= 2 then
269 done := false;
270 end;
patch 3968 3974
3974 BEG:20 0
3980 CASE4 0
3984 CASE4 1
3988 CASE2 259
3990 "check"
3996 LINO 260
4000 LV:4 -33
4004 CON1:1
4006 RSNG2:1
4008 AS21
4010 LINO 261
4014 LV:6 -28
4018 CON1:1
4020 AS24
4022 LV:6 -32
4026 CON1:4
4028 AS24
4030 RV4:6 -28
4034 RV4:6 -32
4038 REL4 LE
4040 IF -2
4044 LV:6 -33
4048 RV4:6 -32
4052 RANG42:1 4
4056 AS41
4058 LV:6 -33
4062 RV4:6 -28
4066 RANG42:1 4
4070 AS41
4072 LV:6 -17
4076 RV14:6 -33
4080 AS41
4082 LINO 262
4086 LV:6 -40
4090 CON1:1
4092 AS24
4094 LV:6 -44
4098 CON1:4
4100 AS24
4102 RV4:6 -40
4106 RV4:6 -44
4110 REL4 LE
4112 IF -2
4116 LV:6 -48
4120 RV4:6 -44
4124 AS4
4126 LV:6 -48
4130 RV4:6 -40
4134 AS4
4136 LV:6 -24
4140 RV4:6 -48
4144 AS4
4146 LINO 263
4150 LV:6 -16
4154 RV1:6 -33
4158 INX2:4 1 4
4164 CON1
4166 AS24
4168 LINO 262
4172 RV4:6 -44
4176 LV:6 -48
4180 FOR4U:-46
patch 4112 68
4182 LINO 261
4186 RV4:6 -32
4190 LV:6 -33
4194 FOR1U:-124
patch 4040 154
4196 LINO 264
4200 LV:6 -52
4204 CON1:1
4206 AS24
4208 LV:6 -56
4212 CON1:4
4214 AS24
4216 RV4:6 -52
4220 RV4:6 -56
4224 REL4 LE
4226 IF -2
4230 LV:6 -60
4234 RV4:6 -56
4238 AS4
4240 LV:6 -60
4244 RV4:6 -52
4248 AS4
4250 LV:6 -24
4254 RV4:6 -60
4258 AS4
4260 LINO 266
4264 LV:6 -16
4268 PUSH:-4
4270 LV:2 -256
4274 RV4:6 -60
4278 INX4:60 1 4
4284 RV1:4 -34
4288 INX2:10 1 6
4294 IND:10
4296 CALL:1 12
4302 INX2:4 1 4
4308 LV:6 -16
4312 PUSH:-4
4314 LV:2 -256
4318 RV4:6 -60
4322 INX4:60 1 4
4328 RV1:4 -34
4332 INX2:10 1 6
4338 IND:10
4340 CALL:1 12
4346 INX2:4 1 4
4352 IND4
4354 CON1:1
4356 ADD24
4358 AS4
4360 LINO 268
4364 LV:6 -16
4368 PUSH:-4
4370 LV:2 -256
4374 RV4:6 -60
4378 INX4:60 1 4
4384 RV1:4 -34
4388 INX2:10 1 6
4394 IND:10
4396 CALL:1 12
4402 INX2:4 1 4
4408 IND4
4410 CON1:2
4412 REL24 GE
4414 IF -2
4418 LINO 269
4422 LV:4 -33
4426 CON1
4428 RSNG2:1
4430 AS21
patch 4414 16
4432 LINO 264
4436 RV4:6 -56
4440 LV:6 -60
4444 FOR4U -198
patch 4226 220
4448 END
patch 3974 60
271 end;
4450 TRA4 4450
273 procedure rotate;
274 var
275 save: alfa;
276 opposite: face;
277 begin
278 if side = back then
279 opposite := front else
280 if side = front then
281 opposite := back else
282 if side = top then
283 opposite := bottom else
284 if side = bottom then
285 opposite := top;
286 save := datas[list[counter], side];
287 datas[list[counter], side] := datas[list[counter], opposite];
288 datas[list[counter], opposite] := save;
patch 4450 4458
4458 BEG:22 0
4464 CASE4 0
4468 CASE4 1
4472 CASE2 277
4474 "rotate"
4482 LINO 278
4486 RV1:4 -34
4490 CON1:2
4492 REL2 EQ
4494 IF -2
4498 LINO 279
4502 LV:6 -13
4506 CON1:1
4508 RANG2:1 6
4512 AS21
4514 TRA -2
patch 4494 22
4518 LINO 280
4522 RV1:4 -34
4526 CON1:1
4528 REL2 EQ
4530 IF -2
4534 LINO 281
4538 LV:6 -13
4542 CON1:2
4544 RANG2:1 6
4548 AS21
4550 TRA -2
patch 4530 22
4554 LINO 282
4558 RV1:4 -34
4562 CON1:3
4564 REL2 EQ
4566 IF -2
4570 LINO 283
4574 LV:6 -13
4578 CON1:4
4580 RANG2:1 6
4584 AS21
4586 TRA -2
patch 4566 22
4590 LINO 284
4594 RV1:4 -34
4598 CON1:4
4600 REL2 EQ
4602 IF -2
4606 LINO 285
4610 LV:6 -13
4614 CON1:3
4616 RANG2:1 6
4620 AS21
patch 4602 18
patch 4586 34
patch 4550 70
patch 4514 106
4622 LINO 286
4626 LV:6 -12
4630 LV:2 -256
4634 LV:4 -32
4638 RV4:4 -40
4642 INX4:4 1 8
4648 IND4
4650 INX4:60 1 4
4656 RV1:4 -34
4660 INX2:10 1 6
4666 IND:10
4668 AS:10
4670 LINO 287
4674 LV:2 -256
4678 LV:4 -32
4682 RV4:4 -40
4686 INX4:4 1 8
4692 IND4
4694 INX4:60 1 4
4700 RV1:4 -34
4704 INX2:10 1 6
4710 LV:2 -256
4714 LV:4 -32
4718 RV4:4 -40
4722 INX4:4 1 8
4728 IND4
4730 INX4:60 1 4
4736 RV1:6 -13
4740 INX2:10 1 6
4746 IND:10
4748 AS:10
4750 LINO 288
4754 LV:2 -256
4758 LV:4 -32
4762 RV4:4 -40
4766 INX4:4 1 8
4772 IND4
4774 INX4:60 1 4
4780 RV1:6 -13
4784 INX2:10 1 6
4790 RV:6 -12 10
4796 AS:10
4798 END
patch 4458 16
289 end;
291 begin
292 list[1] := 4;
293 list[2] := 3;
294 list[3] := 4;
295 list[4] := 2;
296 list[5] := 4;
297 list[6] := 3;
298 list[7] := 4;
299 list[8] := 3;
300 for side := back to top do
301 begin
302 counter := 0;
303 check;
304 while not done do
305 begin
306 counter := counter + 1;
307 rotate;
308 check;
309 end;
310 end
patch 3962 4802
4802 BEG:22 0
4808 CASE4 0
4812 CASE4 1
4816 CASE2 291
4818 "correct"
4826 LINO 292
4830 LV:4 -32
4834 CON1:4
4836 AS24
4838 LINO 293
4842 LV:4 -32
4846 CON1:4
4848 ADD24
4850 CON1:3
4852 AS24
4854 LINO 294
4858 LV:4 -32
4862 CON1:8
4864 ADD24
4866 CON1:4
4868 AS24
4870 LINO 295
4874 LV:4 -32
4878 CON1:12
4880 ADD24
4882 CON1:2
4884 AS24
4886 LINO 296
4890 LV:4 -32
4894 CON1:16
4896 ADD24
4898 CON1:4
4900 AS24
4902 LINO 297
4906 LV:4 -32
4910 CON1:20
4912 ADD24
4914 CON1:3
4916 AS24
4918 LINO 298
4922 LV:4 -32
4926 CON1:24
4928 ADD24
4930 CON1:4
4932 AS24
4934 LINO 299
4938 LV:4 -32
4942 CON1:28
4944 ADD24
4946 CON1:3
4948 AS24
4950 LINO 300
4954 LV:4 -44
4958 CON1:2
4960 AS24
4962 LV:4 -48
4966 CON1:3
4968 AS24
4970 RV4:4 -44
4974 RV4:4 -48
4978 REL4 LE
4980 IF -2
4984 LV:4 -49
4988 RV4:4 -48
4992 RANG42:1 6
4996 AS41
4998 LV:4 -49
5002 RV4:4 -44
5006 RANG42:1 6
5010 AS41
5012 LV:4 -34
5016 RV14:4 -49
5020 AS41
5022 LINO 302
5026 LV:4 -40
5030 CON1
5032 AS24
5034 LINO 303
5038 CALL:2 3968
5044 LINO 304
5048 RV1:4 -33
5052 NOT
5054 IF -2
5058 LINO 306
5062 LV:4 -40
5066 RV4:4 -40
5070 CON1:1
5072 ADD24
5074 AS4
5076 LINO 307
5080 CALL:2 4450
5086 LINO 308
5090 CALL:2 3968
5096 TRA -54
patch 5054 44
5100 LINO 300
5104 RV4:4 -48
5108 LV:4 -49
5112 FOR1U:-102
patch 4980 132
5114 END
patch 4802 52
311 end;
5116 TRA4 5116
313 procedure printout;
314 var
315 space: integer;
316 cube: integer;
317 side: face;
318 begin
319 if nosolutions then
320 writeln('no solutions') else
321 begin
322 writeln('solution to instant insanity');
323 for cube := 1 to 4 do
324 begin
325 write(cube, ' ');
326 for side := front to bottom do
327 write(datas[cube, side]);
328 writeln;
329 end;
330 end;
patch 5116 5122
5122 BEG:24 0
5128 CASE4 0
5132 CASE4 1
5136 CASE2 318
5138 "printout"
5148 LINO 319
5152 RV1:2 -1
5156 IF -2
5160 LINO 320
5164 UNITOUT
5166 FILE
5168 CON14:1
5170 CON14:12
5172 LVCON:14
5174 "no solutions"
5188 WRITES:16
5190 WRITLN
5192 TRA -2
patch 5156 38
5196 LINO 322
5200 UNITOUT
5202 FILE
5204 CON14:1
5206 CON14:28
5208 LVCON:30
5210 "solution to instant insanity"
5240 WRITES:16
5242 WRITLN
5244 LINO 323
5248 LV:4 -16
5252 CON1:1
5254 AS24
5256 LV:4 -20
5260 CON1:4
5262 AS24
5264 RV4:4 -16
5268 RV4:4 -20
5272 REL4 LE
5274 IF -2
5278 LV:4 -24
5282 RV4:4 -20
5286 AS4
5288 LV:4 -24
5292 RV4:4 -16
5296 AS4
5298 LV:4 -8
5302 RV4:4 -24
5306 AS4
5308 LINO 325
5312 UNITOUT
5314 RV4:4 -24
5318 LVCON:6
5320 "%10D"
5326 FILE
5328 WRITEF:12
5330 FILE
5332 CON14:1
5334 CON14:3
5336 LVCON:4
5338 " "
5342 WRITES:16
5344 LINO 326
5348 LV:4 -28
5352 CON1:1
5354 AS24
5356 LV:4 -32
5360 CON1:4
5362 AS24
5364 RV4:4 -28
5368 RV4:4 -32
5372 REL4 LE
5374 IF -2
5378 LV:4 -33
5382 RV4:4 -32
5386 RANG42:1 6
5390 AS41
5392 LV:4 -33
5396 RV4:4 -28
5400 RANG42:1 6
5404 AS41
5406 LV:4 -9
5410 RV14:4 -33
5414 AS41
5416 LINO 327
5420 UNITOUT
5422 FILE
5424 CON14:1
5426 CON14:10
5428 LV:2 -256
5432 RV4:4 -24
5436 INX4:60 1 4
5442 RV1:4 -33
5446 INX2:10 1 6
5452 WRITES:16
5454 LINO 326
5458 RV4:4 -32
5462 LV:4 -33
5466 FOR1U:-62
patch 5374 92
5468 LINO 328
5472 UNITOUT
5474 WRITLN
5476 LINO 323
5480 RV4:4 -20
5484 LV:4 -24
5488 FOR4U -194
patch 5274 216
patch 5192 298
331 end;
In procedure printout:
w - variable space is neither used nor set
5492 END
patch 5122 36
333 begin
334 reset(input);
335 readin;
336 sumcolors;
337 find2222;
338 simultaneous;
339 rearrange;
340 correct;
341 1:
342 printout;
patch 0 5494
5494 BEG:22 0
5500 CASE4 0
5504 CASE4 1
5508 CASE2 333
5510 "insane"
5518 LINO 334
5522 CON14
5524 CON14
5526 CON4 0
5532 RV4 -8
5536 RESET
5538 LINO 335
5542 CALL:1 200
5548 LINO 336
5552 CALL:1 620
5558 LINO 337
5562 CALL:1 1456
5568 LINO 338
5572 CALL:1 2474
5578 LINO 339
5582 CALL:1 2898
5588 LINO 340
5592 CALL:1 3962
patch 6 5598
5598 LINO 342
5602 CALL:1 5116
343 end.
In program insane:
w - type metacolor is never used
w - constant notacolor is never used
w - type metapair is never used
w - type metaface is never used
w - constant notapair is never used
w - constant notaface is never used
5608 END
patch 5494 568
344 {
345 wbggrb
346 wbrgrr
347 wbgwrg
348 wrgwbr
349 }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.