このディレクトリの索引
#  出題場所 :: http://toro.2ch.net/test/read.cgi/tech/1390525149/300
#  お題:次のような規則の配列でインデックス番号iの配列の値を求める。 
#  ・インデックス番号1の配列の値A(1)は1である。 
#  ・配列の値は昇順である。 
#  ・インデックス番号iの配列の値A(i)は配列内のiの個数である。 
#  例 
#  A(10) -> 4
#  A(100) -> 14
#  A(1000) -> 45
# 

'次のような規則の配列でインデックス番号iの配列の値を求める。
・インデックス番号1の配列の値A(1)は1である。
・配列の値は昇順である。
・インデックス番号iの配列の値A(i)は配列内のiの個数である。'(_i,X) :-
        '次のような規則の配列でインデックス番号iの配列の値を求める。
・インデックス番号1の配列の値A(1)は1である。
・配列の値は昇順である。
・インデックス番号iの配列の値A(i)は配列内のiの個数である。'([],2,_i,2,_a),
        nth1(_i,_a,X).

'次のような規則の配列でインデックス番号iの配列の値を求める。
・インデックス番号1の配列の値A(1)は1である。
・配列の値は昇順である。
・インデックス番号iの配列の値A(i)は配列内のiの個数である。'(_a,_インデッスク,_i,_繰り返し数_1,_a) :-
        _インデックス > _i,!.
'次のような規則の配列でインデックス番号iの配列の値を求める。
・インデックス番号1の配列の値A(1)は1である。
・配列の値は昇順である。
・インデックス番号iの配列の値A(i)は配列内のiの個数である。'(_a_1,_インデッスク,_i,_繰り返し数_1,_a) :-
        繰り返し数_1から繰り返し個数を求めてインデックス列を登録する(_a_1,_インデックス,_繰り返し数_1,_次のインデックス,_繰り返し数_2,_a_2),
        '次のような規則の配列でインデックス番号iの配列の値を求める。
・インデックス番号1の配列の値A(1)は1である。
・配列の値は昇順である。
・インデックス番号iの配列の値A(i)は配列内のiの個数である。'(_a_2,_次のインデックス,_i,_繰り返し数_2,_a).

繰り返し数_1から繰り返し数を求めてインデックス列を登録する(_a_1,_インデックス,_繰り返し数_1,_次のインデックス,_繰り返し数_2,_a) :-
        繰り返し個数を得る(_a_1,_繰り返し数_1,_繰り返し数),
        _次のインデックス is _インデックス + _繰り返し数,
        インデッスク列の生成(_インデックス,_繰り返し数,L),
        _繰り返し数_2 is _繰り返し数_1 + 1,
        append(_a_1,L,_a),!.


繰り返し数を得る(_a,N,M) :-
        nth1(N,_a,M),!.
繰り返し数を得る(_,N,N).

インデッスク列の生成(_インデックス,_繰り返し数,L) :-
        _インデックス_2 is _インデックス + _繰り返し数 - 1,
        findall(N,(
                    between(_インデックス,_インデックス_2,N)),
                L).