このディレクトリの索引

#  [1] 授業単元:Python  
#  [2] 問題文(含コード&リンク): 課題2  
#  http://pc12.2ch.net/test/read.cgi/tech/1153585095/789
[1] 授業単元:Python 
[2] 問題文(含コード&リンク): 下の例参照 
与えられた数字のみからなる文字列から各桁の数字に分割し、 
隣り合う数字の合計の下一桁の値を並べたものを次の文字列とし、 
結果が一桁になるまで繰り返しそれぞれの過程の文字列を出力する。 
[3] 環境:特になし 
[4] 期限: 明日まで 
[5] その他の制限: 例 
#  525123214112431 
#  77635535523674 
#  4398088075931 
#  727886872424 
#  99564459666 
#  8410894522 
#  251873974 
#  76950261 
#  3545287 
#  899705 
#  78675 
#  5432 
#  95 
#  4 
#  
#  上から2段目から最後の段までに現れる0から9数字の  
#  総出現数と各数字毎の出現比率を出力する。  
#  [3] 環境:特になし  
#  [4] 期限: 明日まで  
#  [5] その他の制限:  
#
#  129個  
#  0: 10回 3%  
#  1: 43回 20%  
#  2: 8回 2%  
#  ...  
#  9: 18回 6%  
#  のように出力してください。  

対象となる文字列('525123214112431').
対象となる文字列('77635535523674').
対象となる文字列('4398088075931').
対象となる文字列('727886872424').
対象となる文字列('99564459666').
対象となる文字列('8410894522').
対象となる文字列('251873974').
対象となる文字列('76950261').
対象となる文字列('3545287').
対象となる文字列('899705').
対象となる文字列('78675').
対象となる文字列('5432').
対象となる文字列('95').
対象となる文字列('4').

'上から2段目から最後の段までに現れる0から9までの数字の総出現数と各数字毎の出現比率を出力する。' :-
        findall(_文字列,(
                    対象となる文字列(_対象となる文字列),
                _行ならび),
        '上から2段目から最後の段までに現れる0から9までの数字の総出現数と各数字毎の出現比率を'(_行ならび,_数字の総出現数,_各数字毎の出現比率),
        出力する(_0から9までの数字の出現数ならび,_各数字毎の出現比率).

'上から2段目から最後の段までに現れる0から9数字の総出現数と各数字毎の出現比率を'(_行ならび,_数字の総出現数,_各数字毎の出現比率) :-
        '上から2段目から最後の段までに現れる'(_行ならび,_上から2段目から最後の段まで),
        '0から9までの数字の総出現数'(_上から2段目から最後の段まで,_0から9までの数字の出現数ならび,_総出現数),
        '各数字毎の出現比率を'(_0から9までの数字の出現数ならび,_総出現数,_各数字毎の出現比率).

'上から2段目から最後の段までに現れる'(_行ならび,_上から2段目から最後の段まで) :-
        _行ならび = [_|_上から2段目から最後の段まで].

'0から9までの数字の総出現数'(_上から2段目から最後の段まで,_0から9までの数字の出現数ならび,_総出現数) :-
        atomic_list_concat(_上から2段目から最後の段まで,_文字列),
        findall(_度数,(
                    member(_数字文字,['0','1','2','3','4','5','6','7','8','9']),
                    count(sub_atom(_文字列,_,1,_,_数字文字),_度数)),
                _0から9までの数字の出現ならび),
        sum(_0から9までの数字の出現ならび,_総出現数).

'各数字毎の出現比率を'(_0から9までの数字の出現数ならび,_総出現数,_各数字毎の出現比率) :-
        findall(_出現比率,(
                    member(_度数,_0から9までの数字の出現数ならび),
                    _出現比率 is _度数 / _総出現数 * 100.0)),
                _各数字毎の出現比率).

出力する(_0から9までの数字の出現数ならび,_各数字毎の出現比率) :-
        write('数: 出現数 出現比率\n'),
        '数字の出現数・出現比率を一行で出力する'(_0から9までの数字の出現数ならび,_各数字毎の出現比率,N),
        N = 9.

'数字の出現数・出現比率を一行で出力する'(N,_0から9までの数字の出現数ならび,_各数字毎の出現比率,N) :-
        nth0(N,_0から9までの数字の出現数ならび,_出現数),
        nth0(N,_各数字毎の出現比率,_出現比率),
        writef(' %t: %t回 ',[N,_出現数]),
        format('~1f%\n',[_出現比率]).