PROGRAM PENTO C C 29. 2.1984/ 1. 3.1984/ 2. 3.1984/ 7. 3.1984 C INTEGER A(12,504,15),B(10,12),D(12,24,15),E(12),G(12), 1 M(12,504,15),N(12) CHARACTER*1 C(5,4,3) LOGICAL F(7,6,5),H(5,4,3) C C I X T V W Z L S Y U R P, GROESSTES X AUF X2, Y AUF Y3 C DATA B/1,1,5,1,2,1,3,1,4,1, 1 2,1,3,2,2,3,1,2,2,2, 1 1,1,3,1,2,3,2,1,2,2, 1 1,1,3,1,1,3,2,1,1,2, 1 1,1,3,2,3,3,2,1,2,2, 1 1,1,3,3,2,3,2,1,2,2, 1 1,1,4,1,1,2,2,1,3,1, 1 1,1,4,2,3,2,2,1,3,1, 1 1,1,4,1,2,2,2,1,3,1, 1 1,1,3,1,1,2,2,1,3,2, 1 1,1,3,2,2,3,2,1,2,2, 1 1,1,3,1,1,2,2,1,2,2/ C C ALLE LAGEN IM RAUM C DO I=1,12 C C +/-X, +/-Y, Z C DO K=1,5 DO L=1,4 D(I,L,3*K-2)=B(2*K-1,I) D(I,L,3*K-1)=B(2*K,I) D(I,L,3*K)=1 END DO END DO DO K=1,2 DO L=1,5 D(I,2*K,3*L-2)=1+D(I,1,4)-D(I,1,3*L-2) D(I,K+2,3*L-1)=1+D(I,1,8)-D(I,1,3*L-1) END DO END DO C C X<->Y C DO K=1,4 DO L=1,5 D(I,K+4,3*L-2)=D(I,K,3*L-1) D(I,K+4,3*L-1)=D(I,K,3*L-2) D(I,K+4,3*L)=D(I,K,3*L) END DO END DO C C X<->Z, Y<->Z C DO K=1,8 DO L=1,5 D(I,K+8,3*L-2)=D(I,K,3*L) D(I,K+8,3*L-1)=D(I,K,3*L-1) D(I,K+8,3*L)=D(I,K,3*L-2) D(I,K+16,3*L-2)=D(I,K,3*L-2) D(I,K+16,3*L-1)=D(I,K,3*L) D(I,K+16,3*L)=D(I,K,3*L-1) END DO END DO END DO C C DOPPELTE RAUS C DO I=1,12 E(I)=24 K=0 100 K=K+1 IF(K.GE.E(I))GOTO 500 L=K 200 L=L+1 IF(L.GT.E(I))GOTO 100 300 DO JX=1,5 DO JY=1,5 DO JZ=1,5 F(JX,JY,JZ)=.FALSE. END DO END DO END DO DO J=1,5 F(D(I,K,3*J-2),D(I,K,3*J-1),D(I,K,3*J))=.TRUE. END DO DO J=1,5 IF(.NOT.F(D(I,L,3*J-2),D(I,L,3*J-1),D(I,L,3*J))) 1 GOTO 200 END DO IF(L.NE.E(I))GOTO 400 E(I)=E(I)-1 GOTO 100 400 DO J=1,15 D(I,L,J)=D(I,E(I),J) END DO E(I)=E(I)-1 GOTO 300 500 CONTINUE END DO C C VERSCHIEBUNGEN C DO I=1,12 G(I)=0 IF(I.EQ.1)THEN LY=2 LZ=2 ELSE LY=4 LZ=3 END IF IF(I.EQ.2)THEN LX=4 ELSE LX=5 END IF DO J=1,E(I) DO KZ=0,LZ-1 DO L=1,5 IF(D(I,J,3*L).GT.LZ-KZ)GOTO 800 END DO DO KY=0,LY-1 DO L=1,5 IF(D(I,J,3*L-1).GT.LY-KY)GOTO 700 END DO DO KX=0,LX-1 DO L=1,5 IF(D(I,J,3*L-2).GT.LX-KX)GOTO 600 END DO G(I)=G(I)+1 DO L=1,5 A(I,G(I),3*L-2)=D(I,J,3*L-2)+KX A(I,G(I),3*L-1)=D(I,J,3*L-1)+KY A(I,G(I),3*L)=D(I,J,3*L)+KZ END DO END DO 600 CONTINUE END DO 700 CONTINUE END DO 800 CONTINUE END DO END DO DO I=1,15 A(2,24,I)=A(2,27,I) END DO G(2)=26 TYPE *,'PENTOMINOS EINGELESEN' TYPE 1,G C C LOESUNGSSUCHE C I=0 DO JZ=1,3 DO JY=1,4 DO JX=1,5 H(JX,JY,JZ)=.FALSE. END DO END DO END DO 900 I=I+1 IF(I.GT.12)GOTO 1300 IF(I.GT.6)GOTO 980 IF(I.LT.6)THEN N(I)=0 DO K=1,G(I) DO L=1,5 IF(H(A(I,K,3*L-2),A(I,K,3*L-1), 1 A(I,K,3*L)))GOTO 950 END DO N(I)=N(I)+1 DO L=1,15 M(I,N(I),L)=A(I,K,L) END DO 950 CONTINUE END DO IF(N(I).EQ.0)GOTO 1100 ELSE DO J=6,12 N(J)=0 DO K=1,G(J) DO L=1,5 IF(H(A(J,K,3*L-2),A(J,K,3*L-1), 1 A(J,K,3*L)))GOTO 970 END DO N(J)=N(J)+1 DO L=1,15 M(J,N(J),L)=A(J,K,L) END DO 970 CONTINUE END DO IF(N(J).EQ.0)GOTO 1100 END DO END IF 980 J=0 1000 J=J+1 IF(J.GT.N(I))GOTO 1100 DO K=1,5 IF(H(M(I,J,3*K-2),M(I,J,3*K-1),M(I,J,3*K)))GOTO 1000 END DO DO K=1,5 H(M(I,J,3*K-2),M(I,J,3*K-1),M(I,J,3*K))=.TRUE. END DO DO KZ=1,5 DO KY=1,6 DO KX=1,7 F(KX,KY,KZ)=.TRUE. END DO END DO END DO DO KZ=1,3 DO KY=1,4 DO KX=1,5 F(KX+1,KY+1,KZ+1)=H(KX,KY,KZ) END DO END DO END DO DO KZ=2,4 DO KY=2,5 DO KX=2,6 IF(F(KX,KY,KZ))GOTO 1050 IF(F(KX+1,KY,KZ).AND.F(KX-1,KY,KZ).AND. 1 F(KX,KY+1,KZ).AND.F(KX,KY-1,KZ).AND. 1 F(KX,KY,KZ+1).AND.F(KX,KY,KZ-1))GOTO 1200 1050 CONTINUE END DO END DO END DO E(I)=J GOTO 900 1100 I=I-1 IF(I.LT.1)GOTO 1400 IF(I.EQ.4)THEN TYPE *,'4. EBENE ZAEHLT WEITER' TYPE 1,E END IF J=E(I) 1200 DO K=1,5 H(M(I,J,3*K-2),M(I,J,3*K-1),M(I,J,3*K))=.FALSE. END DO GOTO 1000 C C LOESUNG C 1300 TYPE *,'ACHTUNG LOESUNG' DO J=1,12 DO KZ=1,3 DO KY=1,4 DO KX=1,5 C(KX,KY,KZ)='.' END DO END DO END DO DO K=1,5 C(M(J,E(J),3*K-2),M(J,E(J),3*K-1),M(J,E(J),3*K))='O' END DO TYPE *,' ' DO KY=1,4 TYPE *,' ' DO KZ=1,3 TYPE 2 DO KX=1,5 TYPE 3,C(KX,KY,KZ) END DO END DO END DO END DO 1 FORMAT(' ',12I4) 2 FORMAT('+',' ',$) 3 FORMAT('+',A2,$) GOTO 1500 1400 TYPE *,'KEINE LOESUNG GEFUNDEN' 1500 STOP 'FERTIG' END