Peter Struycken

Computer programma's - OSTRC - Details

Het programma OSTRC is het eerste programma dat Peter Struycken gebruikt voor het maken van zijn kunstwerken. Het programma is geschreven in Algol 60 door Drs Stan Tempelaars terwijl hij werkte bij Het Instituut voor Sonologie. Het programma is gepubliceerd in de tentoonstellings catalogus P. Struycken komputerstrukturen. Een transcriptie van het programma is:

 0
 1  BEGIN COMMENT INSTITUUT VOOR SONOLGOIE
 2                PLOMPETORENGRACHT 14,UTRECHT
 3                VISUELE STRUKTUREN 3;
 4            INTEGER I,K,N,P,BR,H,R,S,Y,NR,REGEL,L,BRMAX;
 5            REAL START;
 6            BOOLEAN C;
 7            INTEGER ARRAY X/1:100/;
 8            BOOLEAN ARRAY BETA/0:40,1:4/;
 9            SWITCH SWM:= MAIN1,MAIN2,M3,M4,M5,M6,M7,M8,MAIN9;
10            FOR K:= 0 STEP 1 UNTIL 10,15 STEP 1 UNTIL 20,27 STEP 1 UNTIL 30,35 STEP 1 UNTIL 39
11            DO FOR N:= 1,2,3,4 DO BETA/K,N/:= FALSE;
12            BETA/11,1/:= TRUE: BETA/11,2/:= BETA/11,3/:= BETA/11,4/:= FALSE;
13            BETA/21,1/:= BETA/21,2/:= TRUE: BETA/21,3/:= BETA/21,4/:= FALSE;
14            BETA/31,1/:= BETA/31,2/:= BETA/31,3/:= TRUE; BETA/31,4/:= FALSE;
15            FOR K:= 11,12,13,21,22,23,31,32,33 DO
16            FOR N:= 1,2,3,4 DO BETA/K+1,IF N=4 THEN 1 ELSE N+1/:= BETA/K,N/;
17            BETA/25,1/:= BETA/25,3/:= TRUE; BETA/25,2/:= BETA/25,4/:= FALSE;
18            BETA/26,2/:= BETA/26,4/:= TRUE; BETA/26,1/:= BETA/26,3/:= FALSE;
19            FOR N:= 1,2,3,4 DO BETA/40,N/:= TRUE;
20    MAIN0:  M3:M4:M5:M6:M7:M8:
21            Y:= READ; IF Y>2^Y<9 THEN GOTO BB ELSE GOTO SWM/Y/;
22    MAIN1:  NEW PAGE;
23            PRINTTEXT(<INSTITUUT VOOR SONOLOGIE>);NLCR;
24            PRINTTEXT(<PLOMPETORENGRACHT 14-16, UTRECHT>);NLCR;
25            PRINTTEXT(<VISUELE STRUKTUREN 3>);NLCR;NLCR;NLCR;
26            PRINTTEXT(<COMMENT :>);
27    AA:     Y:= RESYM; IF Y=87 THEN BEGIN NLCR;NLCR; GOTO MAINNO END
28            PRSYM(Y); GOTO AA;
29        
30    MAIN2:  L:= READ; BRMAX:= READ; C:= TRUE; GOTO EE;
31    BB:     C:= FALSE;
32    EE:     BEGIN   BOOLEAN ARRAY B/0:2*L+1,0:2*BRMAX+1/;
33                    SWITCH SWSM:= M1,M2,MAIN3,MAIN4,MAIN5,MAIN6,MAIN7,MAIN8;
34                    REGEL:= 0;
35                    FOR K:= 0 STEP 1 UNTIL 2*BRMAX+1 DO B/0,K/:= B/2*L+1,K/:=FALSE;
36                    FOR K:= 0 STEP 1 UNTIL 2*L+1 DO B/K,0/:= B/K,2*BRMAX+1/:=FALSE;
37            MAIN20: M1:M2:  IF C THEN Y:= READ ELSE C:= TRUE; GOTO SWSM/Y/ ;
38            MAIN3:  START:= READ; SETRANDOM(START); GOTO MAIN20;
39            MAIN4:  BR:= READ; GOTO MAIN20;
40            MAIN5:  H:= READ; GOTO MAIN20;
41            MAIN6:  I:= READ;
42                    FOR K:= 1 STEP 1 UNTIL I DO X/K/:= READ; GOTO MAIN20;
43            MAIN7:  P:= 0;
44            CC:     R:= ENTIER(I*RANDOM+1);
45                    P:= P+1; S:= ENTIER((P-1)/BR);
46                    IF S=H THEN BEGIN REGEL:= REGEL+S; GOTO DD END;
47                    B/2*(REGELS+S)+1,2*(P-BR*S)-1/:= BETA/X/R/,1/: B/2*(REGELS+S)+1,2*(P-BR*S)/:= BETA/X/R/,2/;
48                    B/2*(REGELS+S)+2,2*(P-BR*S)/: = BETA/X/R/,3/; B/2*(REGELS+S)+2,2*(P-BR*S)-1/:= BETA/X/R/,4/;
49                    GOTO CC;
50            DD:     FOR K:= 2*(REGEL-H)+1 STEP 1 UNTIL 2*REGEL DO
51                            FOR N:= 2*BR+1 STEP 1 UNTIL 2*BRMAX DO B/K,N/:= FALSE;
52                    GOTO MAIN20;
53            MAIN8:  NLCR;NLCR;NLCR; NR:= 0';
54                    FOR I:= 0 STEP 1 UNTIL 2*L DO
55                    BEGIN NLCR; NR:= NR+1; ABSFIXT(4,0,NR); SPACE(4);
56                          FOR K:= 1 STEP 1 UNTIL 2*BRMAX+1 DO
57                          BEGIN     IF (B/I,K/^-B/I,K-1/)^(-B/I,K/^B/I,K-1/)
58                                    THEN BEGIN PRSYM(12/);PRSYM(93)END  ELSE PRSYM(93);
59                                    IF (B/I+1,K/^-B/I,K)v(-B/I+1,K/^B/I,K)
60                                    THEN BEGIN PRSYM(126); IF B/I,K/ THEN PRSYM(66) ELSE PRSYM(93) END
61                                    ELSE IF B/I,K/ THEN PRSYM(66) ELSE PRSYM (93)
62                          END
63                    END
64            END;
65            GOTO MAIN0;
66  MAIN9:
67  END
68

Door het programma te analyser, kan men zien dat het commando's van de invoer verwerkt. (Het programma is ontwikkeld in een tijd dat het compileren van een programma vaak veel duurder was dan de uitvoering er van. In die tijd werd geheugengebruik nog berekend in Kilo bytes per seconde.) Ieder commando begint met een getal van 1 tot en met 9 en wordt (optioneel) gevolgd door een aantal argumenten. De commando's (met een beschrijving van hun betekenis) zijn:

Het programma is opnieuw geïmplementeerd in JavaScript en opgenomen in deze pagina. Omdat informatie over de werking van de random-generator van de gebruikte versie van Algol 60 niet achterhaald kon worden, wordt de ingebouwde random generator van JavaScript gebruikt. Het is niet mogelijk om deze random-generator te initialiseren met een 'seed'. Derhalve wordt het 'seed' command genegeerd. Dit betekend dat elke keer wanneer het programma uitgevoerd wordt, een nieuwe werk wordt geproduceerd dat Struycken gebruikt had kunnen voor zijn werken.

Invoer:

De door het programma gegenereerd uitvoer:


Hieronder volgt het zwart-wit patroon dat gebaseerd is op de uitvoer, voor 90 graden tegen de klok gedraait, zoals Struycken dit voor zijn werken.

Deze tekst wordt getoond als de browser HTML5 Canvas niet ondersteund.

Voorbeeld invoer voor Komputerstrukturen 1 (gebaseerd op analyse van het werk):
1 1
2 50 50
3 4545
4 25
5 4
6 5  0  0 11 11 21
7
5 1
6 9  0  0  0 11 11 21 21 21 21
7
5 3
6 5  0 11 11 21 21
7
5 1
6 2 11 21
7
6 12 11 11 11 11 11 21 21 21 21 21 31 34
7
5 3
6 9 11 11 11 21 21 21 21 31 31
7
5 4
6 5 11 21 21 31 31
7
5 2
6 2 21 31
7
5 3
6 8 21 21 21 31 31 31 40 40
7
5 2
6 6 21 31 31 31 40 40
5 1
6 2 31 40
7
8
9
Voorbeeld invoer voor Komputerstrukturen 1A (gebaseerd op analyse van het werk):
1 1A
2 50 50
3 4545
4 25
5 4
6 5  0  0 11 11 21
7
6 9  0  0 11 11 11 21 21 21 21
7
5 6
6 9 11 11 11 11 21 21 21 21 31
7
5 5
6 7 11 21 21 21 31 31 31
7
5 3
6 6 21 21 21 31 31 40
7
6 8 21 31 31 31 31 40 40 40
7
8
9
of:
1 1A
2 50 50
3 4545
4 25
5 4
6 19  0  0  0  0  0  0  0  0 11 11 11 11 11 11 11 21 21 21 21
7
5 4
6 14  0  0  0 11 11 11 11 11 21 21 21 21 21 21
7
5 6
6 9 11 11 11 11 21 21 21 21 31
7
5 5
6 15 11 11 21 21 21 21 21 21 31 31 31 31 31 31 31
7
5 3
6 16 21 21 21 21 21 21 21 21 31 31 31 31 31 40 40 40
7
5 3
6 17 21 21 31 31 31 31 31 31 31 31 40 40 40 40 40 40 40
7
8
9
Op het eerste gezicht zou je denken dat zowel Komputerstrukturen 2 als Komputerstrukturen 2A gegenereerde zijn met de invoer:
1 2
2 50 50
3 4545
4 25
5 25
6 4 11 12 13 14
7
8
9
Maar nadere analyse van de werken, weest iets anders uit. Merk op dat Komputerstrukturen 2 één maal het patroon23 bevat. (Het is onbekend of dit opzettelijk is het gevolg van een kopiëerfout.) Voorbeeld invoer voor Komputerstrukturen 2A (gebaseerd op analyse van het werk):
1 2
2 50 50
3 4545
4 25
5 5
6 9 11 12 13 13 14 14 14 14 14
7
5 5
6 6 11 11 12 13 14 14
7
6 8 11 11 11 11 12 12 13 14
7
5 1
6 8 11 11 12 12 12 13 13 14
7
6 13 11 11 12 12 12 12 12 13 13 13 14 14 23
7
5 3
6 8 11 11 12 12 12 13 13 14
7
5 5
6 9 11 12 12 13 13 13 13 14 14
7
8
9
Voorbeeld invoer voor Komputerstrukturen 2A (gebaseerd op analyse van het werk):
1 2A
2 50 50
3 4545
4 25
5 5
6 9 11 12 13 13 14 14 14 14 14
7
6 6 11 11 12 13 14 14
7
6 8 11 11 11 11 12 12 13 14
7
6 18 11 11 11 11 11 12 12 12 12 12 12 12 13 13 13 13 14 14
7
6 7 11 12 13 13 13 14 14
7
8
9
Voorbeeld invoer voor Komputerstrukturen 3 (gebaseerd op analyse van het werk):
1 3
2 50 50
3 4545
4 25
5 5
6 6 23 24 24 26 26 26
7
6 4 23 24 24 26
7
6 7 23 23 23 23 24 24 26
7
6 9 23 23 23 23 24 24 26 26 26
7
5 3
6 7 23 24 24 26 26 26 26
7
5 1
6 13 23 23 23 24 24 24 26 26 26 26 26 32 34
7
6 10 23 24 24 24 26 26 26 26 26 26
7
8
9
Voorbeeld invoer voor Komputerstrukturen 3A (gebaseerd op analyse van het werk):
1 3A
2 50 50
3 4545
4 25
5 1
6 11 14 23 24 24 24 24 26 26 26 26 26
7
5 4
6 7 23 24 24 26 26 26 26
7
5 5
6 7 23 23 24 24 24 26 26
7
6 6 23 23 23 24 24 26
7
6 6 23 23 23 24 24 26
7
5 3
6 4 23 24 26 26
7
5 1
6 13 23 23 23 23 24 24 24 24 26 26 26 26 34
7
6 9 23 24 24 24 26 26 26 26 26
7
8
9
Voorbeeld invoer voor Komputerstrukturen 4 gebaseerd op de tabel die staat op pagina 8 van P. Struycken uit 1976:
1 4
2 50 50
3 4545
4 25
5 5
6 12 11 12 12 12 12 12 12 12 12 14 31 34
7
6 12 11 11 12 12 12 12 12 14 31 31 34 34
7
6 12 11 12 14 14 31 31 31 31 34 34 34 34
7
6 14 11 14 21 24 31 31 31 31 31 34 34 34 34 34
7
6 13 14 21 21 21 24 24 24 31 31 31 34 34 34
7
8
9
Voorbeeld invoer gebaseerd op item AB15702:
1 4
2 50 50
3 4545
4 25
5 5
6 18 14 14 11 11 12 12 12 12 12 12 12 12 12 12 12 12 34 31
7
6 22 14 14 11 11 11 11 12 12 12 12 12 12 12 12 34 34 34 34 31 31 31 31
7
6 24 14 14 14 14 11 11 12 12 34 34 34 34 34 34 34 34 31 31 31 31 31 31 31 31
7
6 20 14 11 24 21 34 34 34 34 34 34 34 34 31 31 31 31 31 31 31 31
7
6 17 14 21 24 24 24 21 21 21 21 34 34 34 34 31 31 31 31
7
8
9
Voorbeeld invoer voor Komputerstrukturen 4A gebaseerd op de tabel op de pagina's 8 en 63 van P. Struycken uit 1976:
1 4A
2 50 50
3 4545
4 25
5 5
6 13 11 11 11 11 11 11 11 11 14 14 13 33 34
7
6 13 11 11 11 11 13 13 14 14 33 33 34 34 34
7
6 12 11 11 13 13 14 33 33 33 34 34 34 34
7
6 14 14 24 23 33 33 33 33 33 33 34 34 34 34 34
7
6 13 13 23 23 23 24 24 24 33 33 33 34 34 34
7
8
9
Deze invoer komt echter niet overeen met de reproductie van het werk dat op pagina 63 wordt gevonden in Struycken uit 1976 en dat ook overeenkomt met het uitgevoerde werk. Het ziet er naar uit dat voor de negende kolom (van twee bij twee vierkantjes) een verschillende regel gebruikt is, mogelijk om de overgang met de volgende vijf kolommen iets minder abrupt te maken. Een voorbeeld van de aangepaste invoer die mogelijk gebruikt kan zijn geworden, is:
1 4A
2 50 50
3 4545
4 25
5 5
6 13 11 11 11 11 11 11 11 11 14 14 13 33 34
7
6 13 11 11 11 11 13 13 14 14 33 33 34 34 34
7
6 12 11 11 13 13 14 33 33 33 34 34 34 34
7
5 1
6 14 13 14 23 33 33 33 33 33 33 33 34 34 34 34
7
5 4
6 14 14 24 23 33 33 33 33 33 33 34 34 34 34 34
7
5 5
6 13 13 23 23 23 24 24 24 33 33 33 34 34 34
7
8
9


Thuis pagina