#xcharlen=2; $wchar="□"; $bchar="■"; #xlen=4; #ylen=4; #wcnt=0; #bcnt=0; ##x=0; ##y=0; ##serial=1; while( ##y < #ylen ) { ##x=0; while( ##x < #xlen ) { call GETCHAR ##x, ##y; $$c = $$return; if( ##y == 0 ) { ##no = ##serial; } else { call GETCHAR ##x, ##y-1; if( $$return == $$c ) { ##no = #mtx[##y-1][##x]; } else { ##no = ##serial; } } if( ##x > 0 ) { call GETCHAR ##x-1, ##y; if( $$return == $$c ) { if( ##no == ##serial ) { ##no = #mtx[##y][##x-1]; } else if( ##no != #mtx[##y][##x-1] ) { call RENUM ##no, #mtx[##y][##x-1], ##y, $$c; } } } #mtx[##y][##x] = ##no; if( ##no == ##serial ) { call CNTISLAND $$c, 1; ##serial = ##serial+1; } ##x = ##x+1; } ##y = ##y+1; } message "白の島は" + str(#wcnt) + "つ\n" + "黒の島は" + str(#bcnt) + "つ"; endmacro; RENUM: ##i=0; while( ##i < ##3+1 ) { ##j=0; while( ##j < #xlen ) { if( #mtx[##i][##j]==##2 ) { #mtx[##i][##j]=##1; } ##j=##j+1; } ##i=##i+1; } call CNTISLAND $$4, -1; return; CNTISLAND: if( $$1 == $wchar ) { #wcnt=#wcnt+##2; } else { #bcnt=#bcnt+##2; } return; GETCHAR: ##x1 = ##1 * #xcharlen; ##x2 = ##x1 + #xcharlen; $$res=gettext(##x1, ##2, ##x2, ##2, 0); return $$res;