このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1361082416/311
#  [1] 授業単元:プログラミング演習 
#  [2] 問題文(含コード&リンク): 
#  以下のような入力が与えられたときに 
#  3 
#  11010 
#  01111 
#  10101 
#  01110 
#  01100 
#   
#  01011 
#  01010 
#  00100 
#  00110 
#  10100 
#   
#  11110 
#  01110 
#  01101 
#  01110 
#  00001 
#   
#  以下のように出力されるプログラムを作成してください。よろしくお願いします。 
#  4 
#  3 
#  8 
#  

'以下のような入力が与えられたときに
3
11010
01111
10101
01110
01100

01011
01010
00100
00110
10100

11110
01110
01101
01110
00001

以下のように出力されるプログラムを作成してください。よろしくお願いします。
4
3
8'(LL) :-
        プログラム(LL,_解),
        writef('%t\n',[_解]).

プログラム(LL,_解) :-
        転置(LL,LL1),
        '1の最大連続数を得る'(LL1,_最大連続数),
        '最大連続数の連続は何か所にあるか'(LL1,_最大連続数,_何か所),
        _解 is _最大連続数 * _何か所.

'1の最大連続数を得る'(LL1,_最大連続数) :-
        '1の最大連続数を得る'(LL1,0,_最大連続数).

'1の最大連続数を得る'([],_最大連続数,_最大連続数) :- !.
'1の最大連続数を得る'([L|R],_最大連続数_1,_最大連続数) :-
        'Lの最大連続数'(L,_連続数),
        _連続数 > _最大連続数_1,
        '1の最大連続数を得る'(R,_連続数,_最大連続数),!.
'1の最大連続数を得る'([_|R],_最大連続数_1,_最大連続数) :-
        '1の最大連続数を得る'(R,_最大連続数_1,_最大連続数).

'Lの最大連続数'(L,_Lの最大連続数) :-
        findmax(_連続数,(
                    append(L1,L2,L3,L),
                    '1の連続数'(L1,L2,L3,_連続数)),
                _Lの最大連続数).

'1の連続数'(L1,L2,L3,_連続数) :-
        all(L2,1),
        \+(last(L1,1)),
        \+(L3 = [1|_]),
        length(L2,_連続数).

'最大連続数の連続は何か所にあるか'([],_最大連続数,0) :- !.
'最大連続数の連続は何か所にあるか'([L|R],_最大連続数,_何か所) :-
        length(L2,_最大連続数),
        count((
                    append(L1,L2,L3,L),
                    '1の連続数'(L1,L2,L3,_最大連続数)),
                Count),
        '最大連続数の連続は何か所にあるか'(R,_最大連続数,_何か所_1),
        _何か所 is _何か所_1 + Count.