RANDOMIZE OPTION BASE 0 DIM s(11,11) FOR x=1 TO 10 LET s(x,11)=0 NEXT x FOR y=1 TO 10 LET s(11,y)=0 NEXT y PRINT FOR x=1 TO 10 FOR y=1 TO 10 LET s(x,y)=INT(RND*2) NEXT y NEXT x PRINT PRINT " 黒(1)または 白(0)をランダムに選んで10×10の行列を作ります。" PRINT "囲碁のように縦または横につながっている黒の石の軍団を、" PRINT "それぞれの軍団に色分けして示します。" PRINT FOR x=1 TO 10 PRINT " "; FOR y=1 TO 10 PRINT USING "# # # # # # # # # # ":s(x,y); NEXT y PRINT PRINT NEXT x PRINT PRINT LET K=1 FOR x=1 TO 10 LET y=1 DO WHILE y<11 IF s(x,y)>0 THEN LET K=K+1 DO WHILE s(x,y)>0 LET s(x,y)=K LET y=y+1 LOOP ELSE LET y=y+1 END IF LOOP NEXT x PRINT FOR x=1 TO 10 PRINT " "; FOR y=1 TO 10 PRINT USING "## ## ## ## ## ## ## ## ## ## ":s(x,y); NEXT y PRINT PRINT NEXT x PRINT PRINT FOR t=1 TO 8 FOR y=1 TO 10 LET x=1 DO WHILE x<11 IF s(x,y)>0 AND s(x+1,y)>0 THEN LET K=s(x,y) DO WHILE s(x,y)>0 IF K>s(x+1,y) AND s(x+1,y)>1 THEN LET K=s(x+1,y) END IF LET s(x,y)=K LET x=x+1 LOOP ELSE LET x=x+1 END IF LOOP NEXT y PRINT FOR x=1 TO 10 PRINT " "; FOR y=1 TO 10 PRINT USING "## ## ## ## ## ## ## ## ## ## ":s(x,y); NEXT y PRINT PRINT NEXT x PRINT PRINT FOR x=1 TO 10 LET y=1 DO WHILE y<11 IF s(x,y)>0 AND s(x,y+1)>0 THEN LET K=s(x,y) DO WHILE s(x,y)>0 IF K>s(x,y+1) AND s(x,y+1)>1 THEN LET K=s(x,y+1) END IF LET s(x,y)=K LET y=y+1 LOOP ELSE LET y=y+1 END IF LOOP NEXT x PRINT FOR x=1 TO 10 PRINT " "; FOR y=1 TO 10 PRINT USING "## ## ## ## ## ## ## ## ## ## ":s(x,y); NEXT y PRINT PRINT NEXT x PRINT PRINT NEXT t SET WINDOW -6,6,-6,6 FOR x=1 TO 10 FOR y=1 TO 10 SET AREA COLOR s(x,y) PLOT AREA: y-6,6-x;y-5,6-x;y-5,5-x;y-6,5-x NEXT y NEXT x FOR i=-5 TO 5 PLOT LINES : -5,i;5,i PLOT LINES : i,-5;i,5 NEXT i END