|
|
1.1 root 1: procedure main()
2: s1 := collate(&cset,&cset)
3: s2 := collate(reverse(&cset),reverse(&cset))
4: write(image(decollate(s1,0)))
5: write(image(decollate(s1,1)))
6: write(image(decollate(s2,1)))
7: write(image(decollate(s2,0)))
8: end
9:
10: procedure collate(s1,s2)
11: local length, ltemp, rtemp, t
12: static llabels, rlabels, clabels, blabels, half
13: initial {
14: llabels := "abxy"
15: rlabels := "cduv"
16: blabels := llabels || rlabels
17: clabels := "acbdxuyv"
18: half := 4
19: ltemp := left(&cset,*&cset/2)
20: rtemp := right(&cset,*&cset/2)
21: clabels := collate(ltemp,rtemp)
22: llabels := ltemp
23: rlabels := rtemp
24: blabels := string(&cset)
25: half := *llabels
26: }
27: if *s1 > *s2 then {
28: t := s1[*s2+1:0]
29: s1 := s1[1:*s2+1]
30: }
31: else if *s2 > *s1 then {
32: t := s2[*s1+1:0]
33: s2 := s2[1:*s1+1]
34: }
35: else t := ""
36: length := *s1
37: if length <= half then
38: return map(left(clabels,2*length),left(llabels,length) ||
39: left(rlabels,length),s1 || s2) || t
40: else
41: return map(clabels,blabels,left(s1,half) || left(s2,half)) ||
42: collate(right(s1,length-half),right(s2,length-half)) || t
43: end
44:
45: procedure decollate(s,n)
46: static dsize, image, object
47: local ssize
48: initial {
49: image := collate(&cset[2:0],repl(&cset[1],*&cset-1))
50: object := string(&cset)
51: dsize := *image
52: }
53: n %:= 2
54: ssize := *s
55: if ssize + n <= dsize then
56: return map(object[1+:(ssize+n)/2],image[(n+1)+:ssize],s)
57: else
58: return map(object[1+:(dsize-2)/2],image[(n+1)+:dsize-2],
59: s[1+:(dsize-2)]) || decollate(s[dsize-1:0],n)
60: end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.