************************************************************************ * *   ペントミノ解法プログラム * *======================================================================= * 1979年4月号  ASCII(平林 浩一)  オリジナル作成 * 1986年11月07日  DIT (村瀬)  BASIC より Fortran に移植 * 1998年12月10日 FJCL(村瀬)  初期値の設定方法を修正 * 1998年12月17日 FJCL(村瀬)  出力形式を十進数から文字に変更 ************************************************************************ integer A(252),B(12),C(77),D(12),E(12),F(12),G(12),H(7) integer I,J,K,L,M,N,O,P C integer Q(60) character R(12) character*75 OUTREC data A / 6, 7, 8,14, + 1, 2, 3, 4, 7,14,21,28, + 1, 2, 7, 9, 1, 7,14,15, 1, 8,14,15, 2, 7, 8, 9, + 1, 2, 8,15, 5, 6, 7,14, 7, 8, 9,14, 7,13,14,15, + 1, 7,13,14, 1, 8,15,16, 5, 6, 7,12, 7, 8, 9,16, + 1, 2, 7,14, 1, 2, 9,16, 7,12,13,14, 7,14,15,16, + 1, 6, 7,13, 1, 8, 9,16, 6, 7,12,13, 7, 8,15,16, + 1, 2, 3, 7, 1, 2, 3,10, 1, 7,14,21, 1, 8,15,22, + 4, 5, 6, 7, 7, 8, 9,10, 7,14,20,21, 7,14,21,22, + 1, 2, 3, 8, 1, 2, 3, 9, 5, 6, 7, 8, 6, 7, 8, 9, + 6, 7,14,21, 7, 8,14,21, 7,13,14,21, 7,14,15,21, + 1, 2, 6, 7, 1, 2, 9,10, 1, 5, 6, 7, 1, 8, 9,10, + 6, 7,13,20, 7, 8,15,22, 7,13,14,20, 7,14,15,22, + 1, 2, 7, 8, 1, 2, 8, 9, 1, 6, 7, 8, 1, 7, 8, 9, + 1, 7, 8,14, 1, 7, 8,15, 6, 7,13,14, 7, 8,14,15, + 1, 6, 7,14, 1, 8, 9,15, 5, 6, 7,13, 6, 7, 8,13, + 6, 7, 8,15, 6, 7,14,15, 7, 8, 9,15, 7, 8,13,14 / data B / 1, 3, 7,11,15,19,23,31,39,47,55,63 / data ( C(I),I=1,77 ) / 6*0,13,6*0,13,6*0,13,6*0,13,6*0,13, + 6*0,13,6*0,13,6*0,13,6*0,13,6*0,13, 7*13 / data D(1), ( D(I),I=2,12 ) / 0, 11*0 / data E(1), ( E(I),I=2,12 ) / 1, 11*0 / data F(1), ( F(I),I=2,12 ) / 1, 11*0 / data G(1), ( G(I),I=2,12 ) / 1, 11*0 / data H / 3,9,10,16,17,23,24 / data N / 0 / data P / 0 / data ( R(I),I=1,12 ) / 'A','B','C','D','E','F', + 'G','H','I','J','K','L' / C======================================================================= C 1 2 3 4 5 6 7 C23456789*123456789*123456789*123456789*123456789*123456789*123456789*12 C----------------------------------------------------------------------- C C 十字型のはめ込み C 10 if ( P.eq.0 ) goto 20 C( H(P) )=0 do 160 I=1,4 C( A(I)+H(P) )=0 160 continue C 20 P=P+1 if ( P.gt.7 ) goto 999 C( H(P) )=1 do 170 I=1,4 C( A(I)+ H(P) )=1 170 continue O=0 M=2 C C MAIN ROUTINE C 30 O=O+1 if ( C(O).gt.0) goto 30 D(M)=O K=1 40 K=K+1 if ( K.gt.12 ) goto 60 if ( E(K).gt.0 ) goto 40 L=B(K-1) C 50 L=L+1 if ( L.gt.B(K) ) goto 40 do 180 I=1,4 if ( C(A(I+4*L-4)+O).gt.0) goto 50 180 continue C(O)=K do 190 I=1,4 C( A(I+4*L-4)+O )=K 190 continue C F(M)=K G(M)=L E(K)=M M=M+1 if ( M.lt.13 ) goto 30 C C COMPUTER FOUND ANSWER C C I1=1 C do 210 I=1, 6,1 C do 200 J=1,64,7 C Q( I1 )=C( (I-1)+J ) C I1=I1+1 C 200 continue C 210 continue C C N=N+1 C write(6,1000) N, ( Q(I),I=1,60 ) C1000 format(1H ,"No.", I4, 3X, 60I2) N=N+1 write( OUTREC, '(1H , 3HNo., I4)' ) N do 230 I=1,10 do 220 J=1,6 IJ=(I-1)*7 + J JI=(J-1)*11 + I + 10 OUTREC(JI:JI+1)=R( C(IJ) ) 220 continue 230 continue write(6,1100) OUTREC 1100 format( A ) 60 M=M-1 if ( M.lt.2 ) goto 10 O=D(M) K=F(M) E(K)=0 L=G(M) C(O)=0 do 240 I=1,4 C( A(I+4*L-4)+O ) =0 240 continue goto 50 C 999 write(6,3000) 3000 format(1H ,'***END***') stop end