% リスト Xs を(可能な限り)同じ長さで 2 つのリストに分けた時の、 %% 各リストの長さを求める。 %% 例: halflengths([1,2,3,4,5], 3, 2). halflengths(Xs, L1, L2) :- length(Xs, L), R is L mod 2, L1 is L // 2 + R, L2 is L // 2. %% リスト Xs を真ん中で2つのリストに分ける。 %% Xs の長さが奇数の場合は1つ目のリストが 1 つ分長くなる。 %% 例: half([1,2,3], [1,2], [3]). half(Xs, Y1, Y2) :- halflengths(Xs, L1, L2), length(Y1, L1), length(Y2, L2), append(Y1, Y2, Xs). %% 2つのリストを交互にマージしたようなリストを考える。 %% 例: merge([1,2], [3,4], [1,3,2,4]). merge([], X, X). merge(X, [], X). merge([X|Xs], [Y|Ys], [X,Y|Zs]) :- merge(Xs, Ys, Zs). %% リスト Xs から、真ん中の元が先に来るようなリスト Ys を構築 %% 例: middlefirst([1,2,3,4,5], [3,4,2,5,1]). middlefirst(Xs, Ys) :- half(Xs, H1, H2), reverse(H1, R1), merge(R1, H2, Ys).
google.load("visualization", "1", {packages:["corechart"]}); google.setOnLoadCallback(drawChart); function drawChart() { var data = google.visualization.arrayToDataTable([ ['N','leftfirst','midfirst','leftfirst ([ff])','midfirst ([ff])'], [4,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667], [5,0.666666666666667,0.666666666666667,1,0.666666666666667], [6,2,3,3,2.33333333333333], [7,1.33333333333333,1,1.33333333333333,1], [8,6.33333333333333,6.33333333333333,6.66666666666667,6.66666666666667], [9,4,3.66666666666667,4.66666666666667,4], [10,9.33333333333333,9,6.33333333333333,5.33333333333333], [11,5.33333333333333,5.33333333333333,9,8], [12,20,21,20.6666666666667,19.3333333333333], [13,10.3333333333333,11.3333333333333,27.3333333333333,28.3333333333333], [14,135,133.333333333333,19,18.6666666666667], [15,106,105.333333333333,7.66666666666667,7.33333333333333], [16,738.333333333333,719.333333333333,10.3333333333333,10], [17,490.666666666667,476.666666666667,13,11.6666666666667], [18,3213.33333333333,3178.66666666667,13.6666666666667,14.3333333333333], [19,258.333333333333,258.333333333333,14.3333333333333,15], [20,16777,16789,28.3333333333333,30.3333333333333], [21,804.666666666667,790.333333333333,13.6666666666667,14.3333333333333], [22,138128.666666667,137760.333333333,15,13], [23,2343,2342.66666666667,21.6666666666667,22.3333333333333], [24,36592.6666666667,36504.3333333333,18.3333333333333,18.3333333333333], [25,4689.33333333333,4617,53.3333333333333,57.6666666666667] ]); var options = { title: 'Benchmark Results', vAxis: {title: "CPU Time (ms)", logScale: true}, hAxis: {title: "N"} }; var chart = new google.visualization.LineChart(document.getElementById('nqueen_chart_div')); chart.draw(data, options); }