:- prompt(_, ''). % stackoverflow.com/a/51926948
:- use_module(library(readutil)).
% length_of_list - number_of_inferences:
% bubbl(SO): 'true' bubble sort:
% N infs n^ infs n^
% 10 - 111
% 20 - 621 2.5
% 30 - 2,429 3.4
% 40 - 5,698 3.0 1,030
% 120 - 165,296 3.0 11,742 2.2
% 240 - 1,343,303 3.0 49,410 2.1
main:-
process,
process:-
/* your code goes here */
time( (L=[1,6,2,8,5,3,4,1,5,8,7,9,5,8,7,4,5,6,8,5,
1,6,2,8,5,3,4,1,5,8,7,9,5,8,7,4,5,6,8,5,
1,6,2,8,5,3,4,1,5,8,7,9,5,8,7,4,5,6,8,5,
1,6,2,8,5,3,4,1,5,8,7,9,5,8,7,4,5,6,8,5,
1,6,2,8,5,3,4,1,5,8,7,9,5,8,7,4,5,6,8,5,
1,6,2,8,5,3,4,1,5,8,7,9,5,8,7,4,5,6,8,5,
1,6,2,8,5,3,4,1,5,8,7,9,5,8,7,4,5,6,8,5,
1,6,2,8,5,3,4,1,5,8,7,9,5,8,7,4,5,6,8,5,
1,6,2,8,5,3,4,1,5,8,7,9,5,8,7,4,5,6,8,5,
1,6,2,8,5,3,4,1,5,8,7,9,5,8,7,4,5,6,8,5,
1,6,2,8,5,3,4,1,5,8,7,9,5,8,7,4,5,6,8,5,
1,6,2,8,5,3,4,1,5,8,7,9,5,8,7,4,5,6,8,5
],
% bubbl(L,_),
tbs(L,_),
) ),
bubbl([], []). % from SO
bubbl([H], [H]).
bubbl([H|T], S) :-
bubbl(T, [M|R]),
( H =< M, S = [H,M|R]
; H > M, bubbl([M,H|R], S)
).
% 'true' bubble sort -- by Will Ness
tbs([], []).
tbs([H],[H]).
tbs(L,S):- bubble(L,B),
( L==B -> S=L
; tbs(B,S) ).
bubble([],[]).
bubble([A],[A]).
bubble([A,B|C],R):-
( A =< B -> bubble([B|C],X), R=[A|X]
; bubble([A|C],X), R=[B|X]
).
:- main.
Oi0gc2V0X3Byb2xvZ19mbGFnKHZlcmJvc2Usbm9ybWFsKS4gICUgc2VlCjotIHByb21wdChfLCAnJykuICAgICAgICAgICAgICAgICAgICAlICBzdGFja292ZXJmbG93LmNvbS9hLzUxOTI2OTQ4CjotIHVzZV9tb2R1bGUobGlicmFyeShyZWFkdXRpbCkpLgoKJSBsZW5ndGhfb2ZfbGlzdCAtIG51bWJlcl9vZl9pbmZlcmVuY2VzOgolICAgYnViYmwoU08pOiAgICAgICAgICAgICAgICAndHJ1ZScgYnViYmxlIHNvcnQ6CiUgIE4gICAgICAgaW5mcyAgICAgbl4gICAgICAgICAgICBpbmZzICAgIG5eCiUgIDEwIC0gICAgIDExMSAgICAgICAgICAgICAgICAgICAgICAgICAKJSAgMjAgLSAgICAgNjIxICAgICAgIDIuNQolICAzMCAtICAgMiw0MjkgICAgICAgMy40CiUgIDQwIC0gICA1LDY5OCAgICAgICAzLjAgICAgICAgICAxLDAzMAolIDEyMCAtIDE2NSwyOTYgICAgICAgMy4wICAgICAgICAxMSw3NDIgICAgIDIuMgolIDI0MCAtIDEsMzQzLDMwMyAgICAgMy4wICAgICAgICA0OSw0MTAgICAgIDIuMQoKbWFpbjotCglwcm9jZXNzLAoJaGFsdC4KCnByb2Nlc3M6LQoJLyogeW91ciBjb2RlIGdvZXMgaGVyZSAqLwoJdGltZSggKEw9WzEsNiwyLDgsNSwzLDQsMSw1LDgsNyw5LDUsOCw3LDQsNSw2LDgsNSwKCSAgICAgICAgICAxLDYsMiw4LDUsMyw0LDEsNSw4LDcsOSw1LDgsNyw0LDUsNiw4LDUsCgkgICAgICAgICAgMSw2LDIsOCw1LDMsNCwxLDUsOCw3LDksNSw4LDcsNCw1LDYsOCw1LAoJICAgICAgICAgIDEsNiwyLDgsNSwzLDQsMSw1LDgsNyw5LDUsOCw3LDQsNSw2LDgsNSwKCSAgICAgICAgICAxLDYsMiw4LDUsMyw0LDEsNSw4LDcsOSw1LDgsNyw0LDUsNiw4LDUsCgkgICAgICAgICAgMSw2LDIsOCw1LDMsNCwxLDUsOCw3LDksNSw4LDcsNCw1LDYsOCw1LAoJICAgICAgICAgIDEsNiwyLDgsNSwzLDQsMSw1LDgsNyw5LDUsOCw3LDQsNSw2LDgsNSwKCSAgICAgICAgICAxLDYsMiw4LDUsMyw0LDEsNSw4LDcsOSw1LDgsNyw0LDUsNiw4LDUsCgkgICAgICAgICAgMSw2LDIsOCw1LDMsNCwxLDUsOCw3LDksNSw4LDcsNCw1LDYsOCw1LAoJICAgICAgICAgIDEsNiwyLDgsNSwzLDQsMSw1LDgsNyw5LDUsOCw3LDQsNSw2LDgsNSwKCSAgICAgICAgICAxLDYsMiw4LDUsMyw0LDEsNSw4LDcsOSw1LDgsNyw0LDUsNiw4LDUsCgkgICAgICAgICAgMSw2LDIsOCw1LDMsNCwxLDUsOCw3LDksNSw4LDcsNCw1LDYsOCw1CgkgICAgICAgICAgXSwKCSAgICAgICAlIGJ1YmJsKEwsXyksCgkgICAgICAgdGJzKEwsXyksCgkgICAgICAgIGxlbmd0aChMLE4pLCB3cml0ZShOKSwgbmwKCSAgICAgICApICksCgl0cnVlLgoKYnViYmwoW10sIFtdKS4gICAgICAgJSBmcm9tIFNPCmJ1YmJsKFtIXSwgW0hdKS4KYnViYmwoW0h8VF0sIFMpIDotIAogICAgYnViYmwoVCwgW018Ul0pLAogICAgKCAgSCA9PCBNLCBTID0gW0gsTXxSXQogICAgOyAgSCA+IE0sIGJ1YmJsKFtNLEh8Ul0sIFMpCiAgICApLgogICAgCiUgJ3RydWUnIGJ1YmJsZSBzb3J0IC0tIGJ5IFdpbGwgTmVzcwp0YnMoW10sIFtdKS4KdGJzKFtIXSxbSF0pLgp0YnMoTCxTKTotIGJ1YmJsZShMLEIpLAogICggTD09QiAtPiBTPUwKICA7ICAgICAgICAgdGJzKEIsUykgKS4KYnViYmxlKFtdLFtdKS4KYnViYmxlKFtBXSxbQV0pLgpidWJibGUoW0EsQnxDXSxSKTotIAogICggIEEgPTwgQiAtPiBidWJibGUoW0J8Q10sWCksIFI9W0F8WF0KICA7ICAgICAgICAgICAgYnViYmxlKFtBfENdLFgpLCBSPVtCfFhdCiAgKS4KCjotIG1haW4u