0,]']╠>SО}WЪмu╖Пp8╥d%qy)6o;]иA╕ЖsОВТТТ■╟бVl├3ю?╙╙╙═ ═ лл═ ═╙ ╙╙╙ ═╙ ═╙╙═╙╙╙═╙ ═╙╙╙╙╙ лл═ ═ ══╙═ ╙═ ═╙═ ╙ ╙ ╙ ╙ ╙ ═ лл═ ═ ══╙═╙═ ╙═ ╙ ╙ ╙ ╙ ╙═ лл лл╙╙═ ══╙ ╙ ═ ═╙═ ═╙╙ ╙╙═╙╙╙ лл ллюлллл лл╙╙ ═╙юлллл лл╙╙╙ ╙╙═ юлллл лл╙ ╙╙╙ юлллл ллюлл╙ ╙ ═ ╙ юлллл ллюлл╙ ╙╙═╙юлллл ллюлл""блллл ллюлл""блллл ллюлл""блллл ллюлл""блллл юллллюлл""блллл юллллюлл""блллл лл юллллюлл""блллл лл юллллюлл""блллл лл юллллюлллл ""блллл лл юллллюлллл ""блллл лл юллллюлллл ""блллл лл юллллюлллллл ""блллл лл юллллюлллллл ""блллл лл юллллюлллллл ""блллл лл юллллюллюлллллл ""блллл лл юллллюллюлллллл ""блллл лл юллллюллюлллллл ""блллл лл юлллллл юллюлллллл ""блллл лл юлллллл юллюлллллл ""блллл лл юлллллл юллюллюлллллл ""блллл лл юлллллл юллюллюлллллл ""блллл лл юлллллл юллюллюлллллл ""блллл лл юлллллл юллюллюлллллл ""блллл лл лл юлллллл юллюллюлллллл ""блллл лл лл юлллллл юллюллллллллллл ""блллл лл лл юлллллл юллюллллллллллл ""блллл лл лл юлллллл юллюллллллллллл ""блллл лл лл юлллллл юллюллллллллллл ""блллл ллллллл юлллллл юллюллллллллллл ""блллл ллллллл юлллллл юллюллллллллллл ""блллл ллллллл юлллллл юллюллюллллллллллл ""блллл ллллллл юлллллл юллюллюллллллллллл ""блллл ллллллл юлллллл юллюллюллллллллллл ""блллл ллллллл юлллллл юллюллюллллллллллл ""блллл ллллллл юлллллл юлллллллюллллллллллл ""блллл ллллллл юлллллл юллллллллллллллллллллл ""блллл ллллллл юлллллл юллллллллллллллллллллл ""блллл ллллллл юлллллл юллллллллллллллллллллл ""блллл ллллллл юлллллл юллллллллллллллллллллллл ""блллл ллллллл юлллллл юллллллллллллллллллллллл ""блллл ллллллл юлллллл юллллллллллллллллллллллл ""блллл ллллллл юлллллл юлллллллюлллллллллллллллллл ""блллл ллллллл юлллллл юлллллллюлллллллллллллллллл ""блллл ллллллл юлллллл юлллллллюлллллллллллллллллл ""блллл ллллллл юлллллл ллллллллллюлллллллллллллллллл ""блллл ллллллл юлллллл ллллллллллюлллллллллллллллллл ""блллл ллллллл юлллллл ллллллллллллллллллллллллллллллл ""блллл ллллллл юлллллл ллллллллллллллллллллллллллллллл ""блллл ллллллл юлллллл ллллллллллллллллллллллллллллллл ""блллл ллллллл юлллллл ллллллллллллллллллллллллллллллл ""блллл ллллллл лл юлллллл ллллллллллллллллллллллллллллллл ""блллл ллллллл лл юлллллл ллллллллллллллллллллллллллллллл ""блллл ллллллл лл юлллллл ллллллллллллллллллллллллллллллл ""блллл ллллллллл лл юлллллл ллллллллллллллллллллллллллллллл ""блллл ллллллллл лл юлллллл ллллллллллюллллллллллллллллллллллл ""блллл ллллллллл лл юлллллл ллллллллллюллллллллллллллллллллллл ""блллл ллллллллл лл юлллллл ллллллллллюллллллллллллллллллллллл ""блллл ллллллллл лл юлллллл лллллллллллллллллллллллллллллллллллл ""блллл ллллллллл лл юлллллл лллллллллллллллллллллллллллллллллллл ""блллл ллллллллл лл юлллллл лллллллллллллллллллллллллллллллллллл ""блллл ллллллллл лл юлллллл лллллллллллллллллллллллллллллллллллллл ""блллл ллллллллл лл юлллллл лллллллллллллллллллллллллллллллллллллл ""блллл ллллллллл лл юлллллл ллллллллллюлллллллллллллллллллллллллллллл ""блллл ллллллллл лл юлллллл ллллллллллюлллллллллллллллллллллллллллллл ""блллл ллллллллл лл юлллллл ллллллллллюлллллллллллллллллллллллллллллл ""блллл ллллллллл лл юлллллл ллллллллллллллллллллллллллллллллллллллллллл ""блллл ллллллллл лл юлллллл ллллллллллллллллллллллллллллллллллллллллллл ""блллл ллллллллл лл юлллллл ллллллллллллллллллллллллллллллллллллллллллл ""блллл ллллллллл лл юлллллл ллллллллллллллллллллллллллллллллллллллллллл ""блллл лллллллллллллл юлллллл ллллллллллллллллллллллллллллллллллллллллллл ""блллл лллллллллллллл юлллллл ллллллллллллллллллллллллллллллллллллллллллл ""блллл лллллллллллллл юлллллл ллллллллллллллллллллллллллллллллллллллллллл ""блллллл лллллллллллллл юлллллл ллллллллллллллллллллллллллллллллллллллллллл ""блллллл лллллллллллллл юлллллл ллллллллллллллллллллллллллллллллллллллллллл ""блллллл лллллллллллллл юлллллл ллллллллллллллллллллллллллллллллллллллллллллл ""блллллл лллллллллллллл юлллллл ллллллллллллллллллллллллллллллллллллллллллллл ""блллллл лллллллллллллл юлллллл ллллллллллллллллллллллллллллллллллллллллллллл ""блллллл лллллллюллллллллл юлллллл ллллллллллллллллллллллллллллллллллллллллллллл ""блллллл лллллллюллллллллл юлллллл ллллллллллллллллллллллллллллллллллллллллллллл ""блллллл лллллллюллллллллл юлллллл ллллллллллллюллллллллллллллллллллллллллллллллллл ""блллллл лллллллюллллллллл юлллллл ллллллллллллюллллллллллллллллллллллллллллллллллл ""блллллл лллллллюллллллллл юлллллл ллллллллллллюллллллллллллллллллллллллллллллллллл ""блллллл лллллллюллллллллл ллллллллл ллллллллллллюллллллллллллллллллллллллллллллллллл ""блллллл лллллллюллллллллл ллллллллл ллллллллллллюллллллллллллллллллллллллллллллллллл ""блллллл лллллллюллллллллл ллллллллл ллллллллллллюллллллллллллллллллллллллллллллллллл ""блллллл лллллллюллллллллллллллллллллл ллллллллллллюллллллллллллллллллллллллллллллллллл ""блллллл лллллллюллллллллллллллллллллл ллллллллллллюллллллллллллллллллллллллллллллллллл ""блллллл лллллллюллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл ""блллллл лллллллюллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл ""блллллл лллллллюллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллл ""блллллл лллллллюллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллллл ""блллллл лллллллюллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллллл ""блллллл лллллллюллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллллл ""блллллл лллллллюлллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл ""блллллл лллллллюлллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл ""блллллл лллллллюлллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллл лллллллюлллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллл лллллллюлллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллл лллллллюллллллллллллллллллллллллллллллллллллюлллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллл лллллллюллллллллллллллллллллллллллллллллллллюлллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллл лллллллюллллллллллллллллллллллллллллллллллллюлллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллл лллллллюллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллл лллллллюллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллл лллллллюллллллллллллллллллллллллллллллллллллюллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллл лллллллюллллллллллллллллллллллллллллллллллллюллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллл лллллллюллллллллллллллллллллллллллллллллллллюллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллл лллллллюллллллллллллллллллллллллллллллллллллюллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллл лллллллюллллллллллллллллллллллллллллллллллллллюллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллл лллллллюллллллллллллллллллллллллллллллллллллллюллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллл лллллллюллллллллллллллллллллллллллллллллллллллюллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллл ллллллллллллллллллллллллллллллллллллллллллллллллюллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллл лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллл лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллл лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллл лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллл лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллл лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллл ллллллллллллллллллллллллллллллллллллллллллллллллюлллллллллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллл ллллллллллллллллллллллллллллллллллллллллллллллллюлллллллллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллл ллллллллллллллллллллллллллллллллллллллллллллллллюлллллллллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллл ллллллллллллллллллллллллллллллллллллллллллллллллюлллллллллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллллллллллллллллллллллллллллллллллллллллллллллллллллллюлллллллллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""блллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл╛╙╙""бллллллллллллллллллллллллллллллллллллллллллллллллллллллллл²-- title: Sorting EX -- author: Sava -- desc: Much better sorting algorithm visualizer -- license: MIT License -- version: 0.1 -- script: lua w=240 h=136 sorts={ {name="Insertion sort", size=50, func=function() for i=1, #arr do local pos = 1 for j=i-1, 1, -1 do if read(i) > read(j) then pos = j+1 break end end for j=i-1, pos, -1 do swap(j+1, j) end end end}, {name="Binary insertion sort", size=50, func=function() for i=1, #arr do local pos = binarySearch({1, i}, arr[i]) for j=i-1, pos, -1 do swap(j+1, j) end end end}, {name="Selection sort", size=50, func=function() for i=1, #arr do local pos = i for j=i+1, #arr do if read(pos) > read(j) then pos = j end end swap(i, pos) end end}, {name="Double selection sort", size=50, func=function() for i=1, #arr//2+1 do local posMin, posMax = i, #arr-i+1 for j=i, #arr-i+1 do if read(posMin) > read(j) then posMin = j end if read(posMax) < read(j) then posMax = j end end swap(i, posMin) if posMax == i then swap(#arr-i+1, posMin) else swap(#arr-i+1, posMax) end end end}, {name="Bubble sort", size=50, func=function() for i=#arr-2, 0, -1 do for j=1, i+1 do if read(j) > read(j+1) then swap(j, j+1) end end end end}, {name="Cocktail shaker sort", size=50, func=function() for i=#arr-2, #arr//2-1, -1 do local swapped = false for j=#arr-i-1, i+1 do if read(j) > read(j+1) then swap(j, j+1) swapped = true end end for j=i+1, #arr-i-1, -1 do if read(j) > read(j+1) then swap(j, j+1) swapped = true end end if not swapped then break end end end}, {name="Comb sort", size=80, func=function() local gap = #arr+1 local shrink = 1.3 local swapped = true while swapped do swapped = false for j=1, #arr-gap+1 do if read(j//1) > read((j+gap)//1) then swap(j//1, (j+gap)//1) swapped = true end end gap = math.max(gap/shrink, 1) if gap > 1 then swapped = true end end end}, {name="Shell sort", size=80, func=function() local shrink = 2.3 local gap = #arr//shrink while true do for i=1, #arr do local pos = 1 for j=i-gap, 1, -gap do if read(i) > read(j) then pos = j+gap break end end for j=i-gap, pos, -gap do swap(j+gap, j) end end if gap == 1 then break end gap = math.max(gap//shrink, 1) end end}, {name="Quick sort", size=100, func=function() quicksort({1, #arr}) end}, {name="Quick sort LL", size=100, func=function() quicksortLL({1, #arr}) end}, {name="Merge sort", size=100, func=function() mergesort({1, #arr}) end}, {name="Iterative merge sort", size=100, func=function() itermergesort() end}, {name="Heap sort", size=80, func=function() heapsort() end}, {name="LSD Radix sort (base 2)", size=100, func=function() local radix = 2 local largest = #arr-1 local result = {} for i=1, #arr do result[i] = read(i) end local exp = 1 while largest//exp > 0 do countingArr = countingsort({1, #arr}, exp, radix) for i=1, #arr do local t = read(i) write(i, result[i]) result[i] = t end for i=2, radix do countingArr[i] = countingArr[i]+countingArr[i-1] end for i=#arr, 1, -1 do local digit = math.floor(result[i]/exp)%radix local pos = countingArr[digit+1] write(pos, result[i]) countingArr[digit+1]=countingArr[digit+1]-1 end exp = exp*radix end end}, {name="LSD Radix sort (base 16)", size=240, func=function() local radix = 16 local largest = #arr local result = {} for i=1, #arr do result[i] = read(i) end local exp = 1 while largest//exp > 0 do countingArr = countingsort({1, #arr}, exp, radix) for i=1, #arr do local t = read(i) write(i, result[i]) result[i] = t end for i=2, radix do countingArr[i] = countingArr[i]+countingArr[i-1] end for i=#arr, 1, -1 do local digit = math.floor(result[i]/exp)%radix local pos = countingArr[digit+1] write(pos, result[i]) countingArr[digit+1]=countingArr[digit+1]-1 end exp = exp*radix end end}, {name="Counting sort", size=240, func=function() local count = {} for i=1, #arr do count[read(i)]=count[read(i)] and count[read(i)]+1 or 1 coroutine.yield(read(read(i)), read(i)) end j=1 for i=1, #count do while count[i] > 0 do write(j, i) count[i]=count[i]-1 j=j+1 end end end}, {name="Stooge sort", size=20, func=function() stoogesort({1, #arr}) end}, {name="Slow sort", size=25, func=function() slowsort({1, #arr}) end}, {name="Bogo sort", size=5, func=function() local done = false while not done do shuffle() done = true for i=2, #arr do if read(i-1) > read(i) then done = false break end end end end}, {name="Music sort", size=80, func=function() notes = {{0,240,64,40},{480,720,64,43},{960,1200,64,50},{1320,1560,64,49},{1680,1920,64,40},{2160,2400,64,40},{2400,2640,64,43},{2880,3120,64,50},{3240,3480,64,49},{3840,4080,64,40},{4320,4560,64,43},{4800,5040,64,50},{5160,5400,64,49},{5520,5760,64,40},{6000,6240,64,40},{6240,6480,64,43},{6720,6960,64,50},{7080,7320,64,49},{7680,7920,64,40},{7680,7920,64,28},{8040,8280,64,35},{8160,8400,64,43},{8160,8400,64,31},{8400,8640,64,28},{8640,8880,64,50},{8640,8880,64,31},{8880,9120,64,38},{9000,9240,64,49},{9120,9360,64,31},{9360,9600,64,40},{9360,9600,64,33},{9840,10080,64,40},{9840,10080,64,33},{10080,10320,64,43},{10080,10320,64,35},{10320,10560,64,31},{10560,10800,64,50},{10560,10800,64,33},{10800,11040,64,40},{10920,11160,64,49},{10920,11160,64,33},{11280,11520,64,31},{11520,11760,64,40},{11520,11760,64,28},{11880,12120,64,35},{12000,12240,64,43},{12000,12240,64,31},{12240,12480,64,28},{12480,12720,64,50},{12480,12720,64,31},{12720,12960,64,38},{12840,13080,64,49},{12960,13200,64,31},{13200,13440,64,40},{13200,13440,64,33},{13680,13920,64,40},{13680,13920,64,33},{13920,14160,64,43},{13920,14160,64,35},{14160,14400,64,31},{14400,14640,64,50},{14400,14640,64,33},{14640,14880,64,40},{14760,15000,64,49},{14760,15000,64,33},{15120,15360,64,31},{15360,15600,64,78},{15360,15600,64,67},{15360,15600,64,71},{15360,15600,64,40},{15720,15960,64,47},{15840,16080,64,69},{15840,16080,64,73},{15840,16080,64,43},{16080,16320,64,40},{16320,16560,64,71},{16320,16560,64,74},{16320,16560,64,43},{16560,16800,64,50},{16680,16920,64,69},{16680,16920,64,73},{16800,17040,64,43},{17040,17280,64,67},{17040,17280,64,71},{17040,17280,64,45},{17520,17760,64,67},{17520,17760,64,71},{17520,17760,64,45},{17760,18000,64,69},{17760,18000,64,73},{17760,18000,64,55},{18000,18240,64,52},{18240,18480,64,79},{18240,18480,64,71},{18240,18480,64,74},{18240,18480,64,45},{18480,18720,64,52},{18600,18840,64,69},{18600,18840,64,73},{18600,18840,64,47},{18720,18960,64,81},{18960,19200,64,50},{19200,19440,64,78},{19200,19440,64,67},{19200,19440,64,71},{19200,19440,64,40},{19560,19800,64,47},{19680,19920,64,69},{19680,19920,64,73},{19680,19920,64,43},{19920,20160,64,40},{20160,20400,64,71},{20160,20400,64,74},{20160,20400,64,43},{20400,20640,64,50},{20520,20760,64,69},{20520,20760,64,73},{20640,20880,64,43},{20880,21120,64,67},{20880,21120,64,71},{20880,21120,64,45},{21360,21600,64,67},{21360,21600,64,71},{21360,21600,64,45},{21600,21840,64,69},{21600,21840,64,73},{21600,21840,64,55},{21840,22080,64,52},{22080,22320,64,74},{22080,22320,64,71},{22080,22320,64,45},{22320,22560,64,52},{22440,22680,64,69},{22440,22680,64,73},{22440,22680,64,47},{22560,22800,64,78},{22800,23040,64,50},{23040,23280,64,76},{23040,23280,64,67},{23040,23280,64,71},{23040,23280,64,40},{23400,23640,64,47},{23520,23760,64,69},{23520,23760,64,73},{23520,23760,64,43},{23760,24000,64,40},{24000,24240,64,71},{24000,24240,64,74},{24000,24240,64,43},{24240,24480,64,50},{24360,24600,64,69},{24360,24600,64,73},{24480,24720,64,43},{24720,24960,64,67},{24720,24960,64,71},{24720,24960,64,45},{25200,25440,64,67},{25200,25440,64,71},{25200,25440,64,45},{25440,25680,64,69},{25440,25680,64,73},{25440,25680,64,55},{25680,25920,64,52},{25920,26160,64,71},{25920,26160,64,74},{25920,26160,64,45},{26160,26400,64,52},{26280,26520,64,69},{26280,26520,64,73},{26280,26520,64,47},{26400,26640,64,77},{26520,26760,64,78},{26640,26880,64,79},{26640,26880,64,50},{26760,27000,64,80},{26880,27120,64,81},{26880,27120,64,67},{26880,27120,64,71},{26880,27120,64,40},{27240,27480,65,47},{27360,27600,66,69},{27360,27600,66,73},{27360,27600,66,43},{27600,27840,67,40},{27840,28080,68,71},{27840,28080,68,74},{27840,28080,68,43},{28080,28320,69,50},{28200,28440,69,69},{28200,28440,69,73},{28320,28560,70,43},{28560,28800,71,67},{28560,28800,71,71},{28560,28800,71,45},{29040,29280,73,67},{29040,29280,73,71},{29040,29280,73,45},{29280,29520,74,69},{29280,29520,74,73},{29280,29520,74,55},{29520,29760,75,52},{29760,30000,76,71},{29760,30000,76,74},{29760,30000,76,45},{30000,30240,77,52},{30120,30360,77,69},{30120,30360,77,73},{30120,30360,77,47},{30480,30720,79,50},{30720,30960,80,67},{30720,30960,80,71},{30720,30960,80,40},{30960,31200,80,76},{31080,31320,80,47},{31200,31440,80,83},{31200,31440,80,69},{31200,31440,80,73},{31200,31440,80,43},{31440,31680,80,79},{31440,31680,80,40},{31680,31920,80,81},{31680,31920,80,71},{31680,31920,80,74},{31680,31920,80,43},{31800,32040,80,79},{31920,32160,80,76},{31920,32160,80,50},{32040,32280,80,74},{32040,32280,80,69},{32040,32280,80,73},{32160,32400,80,43},{32280,32520,80,76},{32400,32640,80,71},{32400,32640,80,67},{32400,32640,80,45},{32880,33120,80,71},{32880,33120,80,67},{32880,33120,80,45},{33120,33360,80,76},{33120,33360,80,69},{33120,33360,80,73},{33120,33360,80,55},{33360,33600,80,79},{33360,33600,80,52},{33600,33840,80,81},{33600,33840,80,71},{33600,33840,80,74},{33600,33840,80,45},{33720,33960,80,79},{33840,34080,80,76},{33840,34080,80,52},{33960,34200,80,74},{33960,34200,80,69},{33960,34200,80,73},{33960,34200,80,47},{34320,34560,80,76},{34320,34560,80,50},{34560,34800,80,67},{34560,34800,80,71},{34560,34800,80,40},{34800,35040,80,76},{34920,35160,80,47},{35040,35280,80,83},{35040,35280,80,69},{35040,35280,80,73},{35040,35280,80,43},{35280,35520,80,79},{35280,35520,80,40},{35520,35760,80,81},{35520,35760,80,71},{35520,35760,80,74},{35520,35760,80,43},{35640,35880,80,79},{35760,36000,80,76},{35760,36000,80,50},{35880,36120,80,74},{35880,36120,80,69},{35880,36120,80,73},{36000,36240,80,43},{36120,36360,80,76},{36240,36480,80,71},{36240,36480,80,67},{36240,36480,80,45},{36720,36960,80,71},{36720,36960,80,67},{36720,36960,80,45},{36960,37200,80,76},{36960,37200,80,69},{36960,37200,80,73},{36960,37200,80,55},{37200,37440,80,79},{37200,37440,80,52},{37440,37680,80,81},{37440,37680,80,71},{37440,37680,80,74},{37440,37680,80,45},{37560,37800,80,79},{37680,37920,80,76},{37680,37920,80,52},{37800,38040,80,74},{37800,38040,80,69},{37800,38040,80,73},{37800,38040,80,47},{38160,38400,80,76},{38160,38400,80,50},{38400,38640,80,67},{38400,38640,80,71},{38400,38640,80,40},{38640,38880,80,76},{38760,39000,80,47},{38880,39120,80,83},{38880,39120,80,69},{38880,39120,80,73},{38880,39120,80,43},{39120,39360,80,79},{39120,39360,80,40},{39360,39600,80,81},{39360,39600,80,71},{39360,39600,80,74},{39360,39600,80,43},{39480,39720,80,79},{39600,39840,80,76},{39600,39840,80,50},{39720,39960,80,74},{39720,39960,80,69},{39720,39960,80,73},{39840,40080,80,43},{39960,40200,80,76},{40080,40320,80,71},{40080,40320,80,67},{40080,40320,80,45},{40560,40800,80,71},{40560,40800,80,67},{40560,40800,80,45},{40800,41040,80,76},{40800,41040,80,69},{40800,41040,80,73},{40800,41040,80,55},{41040,41280,80,79},{41040,41280,80,52},{41280,41520,80,81},{41280,41520,80,71},{41280,41520,80,74},{41280,41520,80,45},{41400,41640,80,79},{41520,41760,80,76},{41520,41760,80,52},{41640,41880,80,74},{41640,41880,80,69},{41640,41880,80,73},{41640,41880,80,47},{42000,42240,80,76},{42000,42240,80,50},{42240,42480,80,67},{42240,42480,80,71},{42240,42480,80,40},{42480,42720,80,76},{42600,42840,80,47},{42720,42960,80,83},{42720,42960,80,69},{42720,42960,80,73},{42720,42960,80,43},{42960,43200,80,79},{42960,43200,80,40},{43200,43440,80,81},{43200,43440,80,71},{43200,43440,80,74},{43200,43440,80,43},{43320,43560,80,79},{43440,43680,80,76},{43440,43680,80,50},{43560,43800,80,74},{43560,43800,80,69},{43560,43800,80,73},{43680,43920,80,43},{43800,44040,80,76},{43920,44160,80,71},{43920,44160,80,67},{43920,44160,80,45},{44400,44640,80,71},{44400,44640,80,67},{44400,44640,80,45},{44640,44880,80,76},{44640,44880,80,69},{44640,44880,80,73},{44640,44880,80,55},{44880,45120,80,79},{44880,45120,80,52},{45120,45360,80,81},{45120,45360,80,71},{45120,45360,80,74},{45120,45360,80,45},{45240,45480,80,79},{45360,45600,80,76},{45360,45600,80,52},{45480,45720,80,74},{45480,45720,80,69},{45480,45720,80,73},{45480,45720,80,47},{45840,46080,80,76},{45840,46080,80,50},{46080,46320,80,64},{46080,46320,80,40},{46320,46560,80,67},{46440,46680,80,47},{46560,46800,80,64},{46680,46920,80,59},{46800,47040,80,40},{46920,47160,80,62},{47040,47280,80,43},{47160,47400,80,62},{47280,47520,80,64},{47280,47520,80,50},{47400,47640,80,64},{47520,47760,80,69},{47520,47760,80,43},{47760,48000,80,67},{47760,48000,80,45},{48000,48240,80,64},{48240,48480,80,67},{48240,48480,80,45},{48480,48720,80,69},{48480,48720,80,45},{48600,48840,80,71},{48720,48960,80,52},{48840,49080,80,67},{48960,49200,80,45},{49080,49320,80,67},{49200,49440,80,64},{49200,49440,80,52},{49320,49560,80,47},{49440,49680,80,62},{49680,49920,80,63},{49680,49920,80,43},{49920,50160,80,64},{49920,50160,80,40},{50040,50280,80,64},{50160,50400,80,67},{50280,50520,80,69},{50280,50520,80,47},{50640,50880,80,40},{50880,51120,80,43},{51120,51360,80,50},{51360,51600,80,43},{51600,51840,80,45},{51687,51927,80,74},{51764,52004,80,75},{51840,52080,80,76},{52080,52320,80,45},{52200,52440,80,76},{52320,52560,80,71},{52320,52560,80,45},{52560,52800,80,71},{52560,52800,80,52},{52800,53040,80,67},{52800,53040,80,45},{53040,53280,80,67},{53040,53280,80,52},{53160,53400,80,47},{53280,53520,80,64},{53520,53760,80,64},{53520,53760,80,43},{53760,54000,80,64},{53760,54000,80,40},{54000,54240,80,67},{54120,54360,80,47},{54240,54480,80,64},{54360,54600,80,59},{54480,54720,80,40},{54600,54840,80,62},{54720,54960,80,43},{54840,55080,80,62},{54960,55200,80,64},{54960,55200,80,50},{55080,55320,80,64},{55200,55440,80,69},{55200,55440,80,43},{55440,55680,80,67},{55440,55680,80,45},{55680,55920,80,64},{55920,56160,80,67},{55920,56160,80,45},{56160,56400,80,69},{56160,56400,80,45},{56280,56520,80,71},{56400,56640,80,52},{56520,56760,80,67},{56640,56880,80,45},{56760,57000,80,67},{56880,57120,80,64},{56880,57120,80,52},{57000,57240,80,47},{57120,57360,80,62},{57360,57600,80,63},{57360,57600,80,43},{57600,57840,80,64},{57600,57840,80,40},{57720,57960,80,64},{57840,58080,80,67},{57960,58200,80,69},{57960,58200,80,47},{58320,58560,80,40},{58560,58800,80,43},{58800,59040,80,50},{59040,59280,80,43},{59280,59520,80,45},{59367,59607,80,74},{59444,59684,80,75},{59520,59760,80,76},{59760,60000,80,45},{59880,60120,80,76},{60000,60240,80,71},{60000,60240,80,45},{60240,60480,80,71},{60240,60480,80,52},{60480,60720,80,67},{60480,60720,80,45},{60720,60960,80,67},{60720,60960,80,52},{60840,61080,80,47},{60960,61200,80,64},{61200,61440,80,64},{61200,61440,80,43},{61440,61680,80,64},{61440,61680,80,76},{61440,61680,80,40},{61680,61920,80,67},{61680,61920,80,79},{61800,62040,80,47},{61920,62160,80,64},{61920,62160,80,76},{62040,62280,80,59},{62040,62280,80,71},{62160,62400,80,40},{62280,62520,80,62},{62280,62520,80,74},{62400,62640,80,43},{62520,62760,80,62},{62520,62760,80,74},{62640,62880,80,64},{62640,62880,80,76},{62640,62880,80,50},{62760,63000,80,64},{62760,63000,80,76},{62880,63120,80,69},{62880,63120,80,81},{62880,63120,80,43},{63120,63360,80,67},{63120,63360,80,79},{63120,63360,80,45},{63360,63600,80,64},{63360,63600,80,76},{63600,63840,80,67},{63600,63840,80,79},{63600,63840,80,45},{63840,64080,80,69},{63840,64080,80,81},{63840,64080,80,45},{63960,64200,80,71},{63960,64200,80,83},{64080,64320,80,52},{64200,64440,80,67},{64200,64440,80,79},{64320,64560,80,45},{64440,64680,80,67},{64440,64680,80,79},{64560,64800,80,64},{64560,64800,80,76},{64560,64800,80,52},{64680,64920,80,47},{64800,65040,80,62},{64800,65040,80,74},{65040,65280,80,63},{65040,65280,80,75},{65040,65280,80,43},{65280,65520,80,64},{65280,65520,80,76},{65280,65520,80,40},{65400,65640,80,64},{65400,65640,80,76},{65520,65760,80,67},{65520,65760,80,79},{65640,65880,80,69},{65640,65880,80,81},{65640,65880,80,47},{66000,66240,80,40},{66240,66480,80,43},{66480,66720,80,50},{66720,66960,80,43},{66960,67200,80,45},{67047,67287,80,86},{67124,67364,80,87},{67200,67440,80,76},{67200,67440,80,88},{67440,67680,80,45},{67560,67800,80,76},{67560,67800,80,88},{67680,67920,80,71},{67680,67920,80,83},{67680,67920,80,45},{67920,68160,80,71},{67920,68160,80,83},{67920,68160,80,52},{68160,68400,80,67},{68160,68400,80,79},{68160,68400,80,45},{68400,68640,80,67},{68400,68640,80,79},{68400,68640,80,52},{68520,68760,80,47},{68640,68880,80,64},{68640,68880,80,76},{68880,69120,80,43},{69120,69360,80,64},{69120,69360,80,76},{69120,69360,80,40},{69360,69600,80,67},{69360,69600,80,79},{69480,69720,80,47},{69600,69840,80,64},{69600,69840,80,76},{69720,69960,80,59},{69720,69960,80,71},{69840,70080,80,40},{69960,70200,80,62},{69960,70200,80,74},{70080,70320,80,43},{70200,70440,80,62},{70200,70440,80,74},{70320,70560,80,64},{70320,70560,80,76},{70320,70560,80,50},{70440,70680,80,64},{70440,70680,80,76},{70560,70800,80,69},{70560,70800,80,81},{70560,70800,80,43},{70800,71040,80,67},{70800,71040,80,79},{70800,71040,80,45},{71040,71280,80,64},{71040,71280,80,76},{71280,71520,80,67},{71280,71520,80,79},{71280,71520,80,45},{71520,71760,80,69},{71520,71760,80,81},{71520,71760,80,45},{71640,71880,80,71},{71640,71880,80,83},{71760,72000,80,52},{71880,72120,80,67},{71880,72120,80,79},{72000,72240,80,45},{72120,72360,80,67},{72120,72360,80,79},{72240,72480,80,64},{72240,72480,80,76},{72240,72480,80,52},{72360,72600,80,47},{72480,72720,80,62},{72480,72720,80,74},{72720,72960,80,63},{72720,72960,80,75},{72720,72960,80,43},{72960,73200,80,64},{72960,73200,80,76},{72960,73200,80,40},{73080,73320,80,64},{73080,73320,80,76},{73200,73440,81,67},{73200,73440,81,79},{73320,73560,81,69},{73320,73560,81,81},{73320,73560,81,47},{73440,73680,82,64},{73680,73920,83,40},{73920,74160,84,64},{73920,74160,84,76},{73920,74160,84,43},{74040,74280,84,64},{74040,74280,84,76},{74160,74400,85,67},{74160,74400,85,79},{74160,74400,85,50},{74280,74520,85,69},{74280,74520,85,81},{74400,74640,86,64},{74400,74640,86,43},{74640,74880,87,45},{74880,75120,88,64},{74880,75120,88,76},{75000,75240,88,64},{75000,75240,88,76},{75120,75360,89,67},{75120,75360,89,79},{75120,75360,89,45},{75240,75480,89,69},{75240,75480,89,81},{75360,75600,90,64},{75360,75600,90,76},{75360,75600,90,45},{75480,75720,90,64},{75480,75720,90,76},{75600,75840,91,69},{75600,75840,91,81},{75600,75840,91,52},{75720,75960,91,71},{75720,75960,91,83},{75840,76080,92,64},{75840,76080,92,76},{75840,76080,92,45},{76320,76560,94,64},{76440,76680,94,66},{76560,76800,95,67},{76680,76920,95,71},{76800,77040,96,64},{76800,77040,96,67},{76800,77040,96,72},{76800,77040,96,48},{77040,77280,96,36},{77280,77520,96,48},{77520,77760,96,64},{77520,77760,96,36},{77640,77880,96,60},{77760,78000,96,64},{77760,78000,96,48},{78000,78240,96,36},{78240,78480,96,48},{78480,78720,96,60},{78480,78720,96,36},{78720,78960,96,54},{78720,78960,96,59},{78720,78960,96,63},{78720,78960,96,47},{78960,79200,96,35},{79200,79440,96,59},{79200,79440,96,47},{79440,79680,96,35},{79680,79920,96,59},{79680,79920,96,71},{79680,79920,96,47},{79920,80160,96,35},{80160,80400,96,58},{80160,80400,96,70},{80160,80400,96,47},{80280,80520,96,43},{80400,80640,96,40},{80640,80880,96,57},{80640,80880,96,69},{80640,80880,96,45},{80880,81120,96,34},{81120,81360,96,45},{81360,81600,96,66},{81360,81600,96,34},{81600,81840,96,59},{81600,81840,96,63},{81600,81840,96,47},{81840,82080,96,35},{82080,82320,96,35},{82320,82560,96,71},{82560,82800,96,64},{82560,82800,96,76},{82560,82800,96,52},{82800,83040,96,40},{83040,83280,96,66},{83040,83280,96,78},{83040,83280,96,54},{83280,83520,96,42},{83520,83760,96,67},{83520,83760,96,79},{83520,83760,96,55},{83760,84000,96,43},{84000,84240,96,67},{84000,84240,96,57},{84120,84360,96,66},{84240,84480,96,67},{84240,84480,96,45},{84360,84600,96,71},{84480,84720,96,64},{84480,84720,96,67},{84480,84720,96,72},{84480,84720,96,48},{84720,84960,96,36},{84960,85200,96,48},{85200,85440,96,64},{85200,85440,96,36},{85320,85560,96,60},{85440,85680,96,64},{85440,85680,96,48},{85680,85920,96,36},{85920,86160,96,48},{86160,86400,96,60},{86160,86400,96,36},{86400,86640,96,54},{86400,86640,96,59},{86400,86640,96,63},{86400,86640,96,47},{86640,86880,96,35},{86880,87120,96,59},{86880,87120,96,47},{87120,87360,96,35},{87360,87600,96,59},{87360,87600,96,71},{87360,87600,96,47},{87600,87840,96,35},{87840,88080,96,58},{87840,88080,96,70},{87840,88080,96,47},{87960,88200,96,43},{88080,88320,96,40},{88320,88560,96,57},{88320,88560,96,69},{88320,88560,96,45},{88560,88800,96,34},{88800,89040,96,45},{89040,89280,96,66},{89040,89280,96,34},{89280,89520,96,59},{89280,89520,96,63},{89280,89520,96,47},{89520,89760,96,35},{89760,90000,96,35},{90000,90240,96,71},{90240,90480,96,79},{90240,90480,96,52},{90480,90720,96,81},{90480,90720,96,40},{90600,90840,96,79},{90720,90960,96,78},{90720,90960,96,54},{90960,91200,96,74},{90960,91200,96,42},{91200,91440,96,76},{91200,91440,96,55},{91440,91680,96,43},{91680,91920,96,67},{91680,91920,96,57},{91800,92040,96,66},{91920,92160,96,67},{91920,92160,96,45},{92040,92280,96,71},{92160,92400,96,64},{92160,92400,96,67},{92160,92400,96,72},{92160,92400,96,48},{92400,92640,96,36},{92640,92880,96,48},{92880,93120,96,64},{92880,93120,96,36},{93000,93240,96,60},{93120,93360,96,64},{93120,93360,96,48},{93360,93600,96,36},{93600,93840,96,48},{93840,94080,96,60},{93840,94080,96,36},{94080,94320,96,54},{94080,94320,96,59},{94080,94320,96,63},{94080,94320,96,47},{94320,94560,96,35},{94560,94800,96,59},{94560,94800,96,47},{94800,95040,96,35},{95040,95280,96,59},{95040,95280,96,71},{95040,95280,96,47},{95280,95520,96,35},{95520,95760,96,58},{95520,95760,96,70},{95520,95760,96,47},{95640,95880,96,43},{95760,96000,96,40},{96000,96240,96,57},{96000,96240,96,69},{96000,96240,96,45},{96240,96480,96,34},{96480,96720,96,45},{96720,96960,96,66},{96720,96960,96,34},{96960,97200,96,59},{96960,97200,96,63},{96960,97200,96,47},{97200,97440,96,35},{97440,97680,96,35},{97680,97920,96,71},{97920,98160,96,64},{97920,98160,96,76},{97920,98160,96,52},{98160,98400,96,40},{98400,98640,96,66},{98400,98640,96,78},{98400,98640,96,54},{98640,98880,96,42},{98880,99120,96,67},{98880,99120,96,79},{98880,99120,96,55},{99120,99360,96,43},{99360,99600,96,67},{99360,99600,96,57},{99480,99720,96,66},{99600,99840,96,67},{99600,99840,96,45},{99720,99960,96,71},{99840,100080,96,64},{99840,100080,96,67},{99840,100080,96,72},{99840,100080,96,48},{100080,100320,96,36},{100320,100560,96,48},{100560,100800,96,64},{100560,100800,96,36},{100680,100920,96,60},{100800,101040,96,64},{100800,101040,96,48},{101040,101280,96,36},{101280,101520,96,48},{101520,101760,96,60},{101520,101760,96,36},{101760,102000,96,54},{101760,102000,96,59},{101760,102000,96,63},{101760,102000,96,47},{102000,102240,96,35},{102240,102480,96,59},{102240,102480,96,47},{102480,102720,96,35},{102720,102960,96,59},{102720,102960,96,71},{102720,102960,96,47},{102960,103200,96,35},{103200,103440,96,58},{103200,103440,96,70},{103200,103440,96,47},{103320,103560,96,43},{103440,103680,96,40},{103680,103920,96,57},{103680,103920,96,69},{103680,103920,96,45},{103920,104160,96,34},{104160,104400,96,45},{104400,104640,96,66},{104400,104640,96,34},{104640,104880,96,59},{104640,104880,96,63},{104640,104880,96,47},{104880,105120,96,35},{105120,105360,96,35},{105447,105687,80,72},{105524,105764,80,73},{105600,105840,80,74},{105960,106200,83,74},{106320,106560,86,74},{106560,106800,88,74},{106920,107160,91,74},{107040,107280,92,75},{107280,107520,94,74},{107400,107640,95,75},{107520,107760,96,78},{107520,107760,96,37},{107760,108000,96,49},{108000,108240,96,76},{108000,108240,96,37},{108240,108480,96,75},{108240,108480,96,49},{108360,108600,96,76},{108480,108720,96,37},{108720,108960,96,49},{108960,109200,96,75},{108960,109200,96,37},{109200,109440,96,73},{109200,109440,96,49},{109440,109680,96,73},{109440,109680,96,37},{109680,109920,96,75},{109680,109920,96,49},{109920,110160,96,73},{109920,110160,96,37},{110160,110400,96,71},{110160,110400,96,49},{110280,110520,96,66},{110400,110640,96,37},{110880,111120,96,63},{110880,111120,96,37},{111120,111360,96,64},{111120,111360,96,49},{111360,111600,96,66},{111360,111600,96,35},{111600,111840,96,47},{111720,111960,96,66},{111840,112080,96,35},{112080,112320,96,68},{112080,112320,96,47},{112320,112560,96,66},{112320,112560,96,35},{112560,112800,96,47},{112800,113040,96,73},{112800,113040,96,35},{113040,113280,96,70},{113040,113280,96,47},{113280,113520,96,72},{113280,113520,96,36},{113520,113760,96,48},{113640,113880,96,72},{113760,114000,96,36},{114000,114240,96,73},{114000,114240,96,48},{114240,114480,96,75},{114240,114480,96,36},{114720,114960,96,73},{114720,114960,96,36},{114960,115200,96,75},{114960,115200,96,48},{115200,115440,96,37},{115440,115680,96,78},{115440,115680,96,49},{115680,115920,96,76},{115680,115920,96,37},{115920,116160,96,75},{115920,116160,96,49},{116040,116280,96,76},{116160,116400,96,37},{116400,116640,96,49},{116640,116880,96,75},{116640,116880,96,37},{116880,117120,96,73},{116880,117120,96,49},{117120,117360,96,73},{117120,117360,96,39},{117360,117600,96,75},{117360,117600,96,51},{117600,117840,96,73},{117600,117840,96,39},{117840,118080,96,71},{117840,118080,96,51},{117960,118200,96,66},{118080,118320,96,39},{118560,118800,96,63},{118560,118800,96,39},{118800,119040,96,64},{118800,119040,96,51},{119040,119280,96,66},{119040,119280,96,32},{119280,119520,96,44},{119400,119640,96,66},{119520,119760,96,32},{119760,120000,96,68},{119760,120000,96,44},{120000,120240,96,66},{120000,120240,96,32},{120240,120480,96,44},{120480,120720,96,73},{120480,120720,96,32},{120720,120960,96,70},{120720,120960,96,34},{120960,121200,96,71},{120960,121200,96,35},{121200,121440,96,47},{121320,121560,96,71},{121440,121680,96,35},{121680,121920,96,73},{121680,121920,96,47},{121920,122160,96,75},{121920,122160,96,35},{122160,122400,96,47},{122400,122640,96,73},{122400,122640,96,35},{122640,122880,96,71},{122640,122880,96,47},{122880,123120,96,78},{122880,123120,96,37},{123120,123360,96,49},{123360,123600,96,76},{123360,123600,96,37},{123600,123840,96,75},{123600,123840,96,49},{123720,123960,96,76},{123840,124080,96,37},{124080,124320,96,49},{124320,124560,96,75},{124320,124560,96,37},{124560,124800,96,73},{124560,124800,96,49},{124800,125040,96,73},{124800,125040,96,37},{125040,125280,96,75},{125040,125280,96,49},{125280,125520,96,73},{125280,125520,96,37},{125520,125760,96,71},{125520,125760,96,49},{125640,125880,96,66},{125760,126000,96,37},{126240,126480,96,63},{126240,126480,96,37},{126480,126720,96,64},{126480,126720,96,49},{126720,126960,96,66},{126720,126960,96,35},{126960,127200,96,47},{127080,127320,96,66},{127200,127440,96,35},{127440,127680,96,68},{127440,127680,96,47},{127680,127920,96,66},{127680,127920,96,35},{127920,128160,96,47},{128160,128400,96,73},{128160,128400,96,35},{128400,128640,96,70},{128400,128640,96,47},{128640,128880,96,72},{128640,128880,96,36},{128880,129120,96,48},{129000,129240,96,72},{129120,129360,96,36},{129360,129600,96,73},{129360,129600,96,48},{129600,129840,96,75},{129600,129840,96,36},{130080,130320,96,73},{130080,130320,96,36},{130320,130560,96,75},{130320,130560,96,48},{130560,130800,96,37},{130800,131040,96,78},{130800,131040,96,49},{131040,131280,96,76},{131040,131280,96,37},{131280,131520,96,75},{131280,131520,96,49},{131400,131640,96,76},{131520,131760,96,37},{131760,132000,96,49},{132000,132240,96,75},{132000,132240,96,37},{132240,132480,96,73},{132240,132480,96,49},{132480,132720,96,73},{132480,132720,96,39},{132720,132960,96,75},{132720,132960,96,51},{132960,133200,96,73},{132960,133200,96,39},{133200,133440,96,71},{133200,133440,96,51},{133320,133560,96,66},{133440,133680,96,39},{133920,134160,96,63},{133920,134160,96,39},{134160,134400,96,64},{134160,134400,96,51},{134400,134640,96,66},{134400,134640,96,32},{134640,134880,96,44},{134760,135000,96,66},{134880,135120,96,32},{135120,135360,96,68},{135120,135360,96,44},{135360,135600,96,66},{135360,135600,96,32},{135600,135840,96,44},{135840,136080,96,73},{135840,136080,96,32},{136080,136320,96,70},{136080,136320,96,34},{136320,136560,96,71},{136320,136560,96,35},{136560,136800,96,47},{136680,136920,96,71},{136800,137040,96,35},{137040,137280,96,73},{137040,137280,96,47},{137280,137520,96,75},{137280,137520,96,35},{137520,137760,96,47},{137760,138000,96,73},{137760,138000,96,35},{138000,138240,96,71},{138000,138240,96,47},{138240,138480,112,64},{138240,138480,112,76},{138240,138480,112,28},{138240,138480,112,40},{138600,138840,112,35},{138600,138840,112,47},{138720,138960,112,67},{138720,138960,112,79},{138960,139200,112,28},{138960,139200,112,40},{139200,139440,112,74},{139200,139440,112,86},{139200,139440,112,31},{139200,139440,112,43},{139440,139680,112,38},{139440,139680,112,50},{139560,139800,112,73},{139560,139800,112,85},{139680,139920,112,31},{139680,139920,112,43},{139920,140160,112,64},{139920,140160,112,76},{139920,140160,112,33},{139920,140160,112,45},{140400,140640,112,64},{140400,140640,112,76},{140400,140640,112,33},{140400,140640,112,45},{140640,140880,112,67},{140640,140880,112,79},{140640,140880,112,33},{140640,140880,112,45},{140880,141120,112,40},{140880,141120,112,52},{141120,141360,112,74},{141120,141360,112,86},{141120,141360,112,33},{141120,141360,112,45},{141360,141600,112,40},{141480,141720,112,73},{141480,141720,112,85},{141480,141720,112,35},{141480,141720,112,47},{141840,142080,112,31},{141840,142080,112,43},{142080,142320,112,64},{142080,142320,112,76},{142080,142320,112,28},{142080,142320,112,40},{142440,142680,112,35},{142440,142680,112,47},{142560,142800,112,67},{142560,142800,112,79},{142800,143040,112,28},{142800,143040,112,40},{143040,143280,112,74},{143040,143280,112,86},{143040,143280,112,31},{143040,143280,112,43},{143280,143520,112,38},{143280,143520,112,50},{143400,143640,112,73},{143400,143640,112,85},{143520,143760,112,31},{143520,143760,112,43},{143760,144000,112,64},{143760,144000,112,76},{143760,144000,112,33},{143760,144000,112,45},{144240,144480,112,64},{144240,144480,112,76},{144240,144480,112,33},{144240,144480,112,45},{144480,144720,112,67},{144480,144720,112,79},{144480,144720,112,33},{144480,144720,112,45},{144720,144960,112,40},{144720,144960,112,52},{144960,145200,112,74},{144960,145200,112,86},{144960,145200,112,33},{144960,145200,112,45},{145200,145440,112,40},{145320,145560,112,73},{145320,145560,112,85},{145320,145560,112,35},{145320,145560,112,47},{145680,145920,112,31},{145680,145920,112,43},{145920,146160,112,64},{145920,146160,112,76},{145920,146160,112,28},{145920,146160,112,40},{146280,146520,112,35},{146280,146520,112,47},{146400,146640,112,67},{146400,146640,112,79},{146640,146880,112,28},{146640,146880,112,40},{146880,147120,112,74},{146880,147120,112,86},{146880,147120,112,31},{146880,147120,112,43},{147120,147360,112,38},{147120,147360,112,50},{147240,147480,112,73},{147240,147480,112,85},{147360,147600,112,31},{147360,147600,112,43},{147600,147840,112,64},{147600,147840,112,76},{147600,147840,112,33},{147600,147840,112,45},{148080,148320,112,64},{148080,148320,112,76},{148080,148320,112,33},{148080,148320,112,45},{148320,148560,112,67},{148320,148560,112,79},{148320,148560,112,33},{148320,148560,112,45},{148560,148800,112,40},{148560,148800,112,52},{148800,149040,112,74},{148800,149040,112,86},{148800,149040,112,33},{148800,149040,112,45},{149040,149280,112,40},{149160,149400,112,73},{149160,149400,112,85},{149160,149400,112,35},{149160,149400,112,47},{149520,149760,112,31},{149520,149760,112,43},{149760,150000,112,64},{149760,150000,112,76},{149760,150000,112,28},{149760,150000,112,40},{150120,150360,112,35},{150120,150360,112,47},{150240,150480,112,67},{150240,150480,112,79},{150480,150720,112,28},{150480,150720,112,40},{150720,150960,112,74},{150720,150960,112,86},{150720,150960,112,31},{150720,150960,112,43},{150960,151200,112,38},{150960,151200,112,50},{151080,151320,112,73},{151080,151320,112,85},{151200,151440,112,31},{151200,151440,112,43},{151440,151680,112,64},{151440,151680,112,76},{151440,151680,112,33},{151440,151680,112,45},{151920,152160,112,64},{151920,152160,112,76},{151920,152160,112,33},{151920,152160,112,45},{152160,152400,112,67},{152160,152400,112,79},{152160,152400,112,33},{152160,152400,112,45},{152400,152640,112,40},{152400,152640,112,52},{152640,152880,112,74},{152640,152880,112,86},{152640,152880,112,33},{152640,152880,112,45},{152880,153120,112,40},{153000,153240,112,73},{153000,153240,112,85},{153000,153240,112,35},{153000,153240,112,47},{153360,153600,112,31},{153360,153600,112,43},{153600,153840,112,81},{153600,153840,112,40},{153720,153960,109,79},{153840,154080,106,78},{153960,154200,103,76},{153960,154200,103,47},{154080,154320,100,74},{154080,154320,100,43},{154200,154440,97,71},{154320,154560,94,69},{154320,154560,94,40},{154440,154680,91,67},{154560,154800,88,64},{154560,154800,88,43},{154680,154920,85,62},{154800,155040,82,59},{154800,155040,82,50},{154920,155160,79,62},{155040,155280,76,64},{155040,155280,76,43},{155160,155400,73,67},{155280,155520,70,69},{155280,155520,70,45},{155400,155640,67,71},{155520,155760,64,76},{155760,156000,64,45},{155880,156120,64,76},{156000,156240,64,71},{156000,156240,64,55},{156240,156480,64,71},{156240,156480,64,52},{156480,156720,64,67},{156480,156720,64,45},{156720,156960,64,67},{156960,157200,64,64}} local count = {} spd=4 for i=1, #arr do count[read(i)]=count[read(i)] and count[read(i)]+1 or 1 coroutine.yield(read(read(i)), read(i)) end j=1 for i=1, #count do while count[i] > 0 do write(j, i) count[i]=count[i]-1 j=j+1 end end spd=1 coroutine.yield() spd=4 local idx = 1 local count = 0 for t1=1, notes[#notes][2], 1184.001184001184/60 do local play = {} for i=1, #notes do if t1 > notes[i][1] and t1 < notes[i][2] then play[(i-1)%spd+1] = notes[i][4]*#arr/80-24 end end for i=1, spd do if play[i] then coroutine.yield(arr[play[i]], play[i]) else coroutine.yield() end end end spd=2 end}, {name="Quantum bogo sort", size=50, func=function() shuffle() done = true for i=2, #arr do if read(i-1) > read(i) then done = false break end end for i=1, 120 do coroutine.yield() end if not done then for i=1, #arr do arr[i] = 0 end end end}, } function countingsort(r, exp, radix) local countingArr = {} for i=1, radix do countingArr[i] = 0 end for i=r[1], r[2] do countingArr[math.floor(read(i)/exp)%radix+1]=countingArr[math.floor(read(i)/exp)%radix+1]+1 coroutine.yield(arr[math.floor(read(i)/exp)%radix+1], math.floor(read(i)/exp)%radix+1) end return countingArr end function quicksort(r) if r[2] > r[1] then local r1, r2 = partitionLR(r) quicksort(r1) quicksort(r2) end end function quicksortLL(r) if r[2] > r[1] then local r1, r2 = partitionLL(r) quicksortLL(r1) quicksortLL(r2) end end function mergesort(r) if r[2] > r[1] then local mid = (r[1]+r[2])//2 mergesort({r[1], mid}) mergesort({mid+1, r[2]}) local merged = merge({r[1], mid}, {mid+1, r[2]}) for i=1, #merged do write(i+r[1]-1, merged[i]) end end end function itermergesort() for i=math.ceil(math.log(#arr, 2))-1, 0, -1 do local scale = #arr/math.pow(2, i) for j=0, math.pow(2, i)-1 do local r = {(j*scale)//1+1, ((j+1)*scale)//1} local mid = ((j+0.5)*scale)//1 local merged = merge({r[1], mid}, {mid+1, r[2]}) for i=1, #merged do write(i+r[1]-1, merged[i]) end end end end function heapsort() for i=#arr//2, 1, -1 do maxheapify(#arr, i) end for i=#arr, 2, -1 do swap(1, i) maxheapify(i, 1) end end function stoogesort(r) if r[1] >= r[2] then return end if r[1]+1 == r[2] then if read(r[1]) > read(r[2]) then swap(r[1], r[2]) end else local third = math.floor((r[2]-r[1]+1)/3) local r1, r2 = {r[1], r[2]-third}, {r[1]+third, r[2]} stoogesort(r1) stoogesort(r2) stoogesort(r1) end end function slowsort(r) if r[1] >= r[2] then return end local mid = (r[1]+r[2])//2 slowsort({r[1], mid}) slowsort({mid+1, r[2]}) if read(mid) > read(r[2]) then swap(mid, r[2]) end slowsort({r[1], r[2]-1}) end function partitionLR(r) local p1, p2 = r[1], r[2] local pivot = read(r[1]) while p1 ~= p2 do while read(p1) < pivot do p1=p1+1 end while read(p2) > pivot do p2=p2-1 end swap(p1, p2) end return {r[1], p1-1}, {p1+1, r[2]} end function partitionLL(r) local p1, p2 = r[1], r[1] local pivot = read(r[1]) while read(p1) < pivot do p1=p1+1 end p2=p1 while p2 <= r[2] do if read(p2) <= pivot then swap(p1, p2) p1=p1+1 end p2=p2+1 end swap(p1-1, r[1]) return {r[1], p1-1}, {p1, r[2]} end function maxheapify(l, a) local larg = a local left = a*2 local right = a*2+1 if left < l and read(left) > read(larg) then larg = left end if right < l and read(right) > read(larg) then larg = right end if larg ~= a then swap(larg, a) maxheapify(l, larg) end end function read(a) coroutine.yield(arr[a], a) return arr[a] end function write(a, v) coroutine.yield(v, a) arr[a] = v end function swap(a, b) arr[a], arr[b] = arr[b], arr[a] coroutine.yield(arr[a], a) coroutine.yield(arr[b], b) end function binarySearch(r, a) local curR = {r[1], r[2]} while curR[1] <= curR[2] do local mid = (curR[1]+curR[2])//2 local cur = read(mid) if cur >= a then curR[2] = mid-1 else curR[1] = mid+1 end end return curR[1] end function merge(r1, r2) local aux = {} local p1, p2, i = 0, 0, 1 while p1 < r1[2]-r1[1]+1 and p2 < r2[2]-r2[1]+1 do if read(r1[1]+p1) < read(r2[1]+p2) then aux[i] = read(r1[1]+p1) p1=p1+1 else aux[i] = read(r2[1]+p2) p2=p2+1 end i=i+1 end while p1 < r1[2]-r1[1]+1 do aux[i] = read(r1[1]+p1) p1=p1+1 i=i+1 end while p2 < r2[2]-r2[1]+1 do aux[i] = read(r2[1]+p2) p2=p2+1 i=i+1 end return aux end function shuffle() for i=1, #arr do swap(i, math.random(1, #arr)) end end init = coroutine.create(function() while true do if not sorts[cur] then break end arr={} for i=1, sorts[cur].size do arr[i] = i--sorts[cur].size-i+1 end shuffle() for i=1, 60 do coroutine.yield() end sorts[cur].func() for i=1, #arr do coroutine.yield(arr[i], i) end for i=1, 120 do coroutine.yield() end cur=cur+1 end while true do coroutine.yield() end end) arr={} cur=1 spd=2 hcols = {2, 10, 4, 6} t=0 function TIC() local hls = {} if sorts[cur] then local ps = {} for i=1, spd do _, ps[i], hls[i] = coroutine.resume(init) end for i=1, spd do if type(ps[i]) == "string" then error(ps[i]) end if ps[i] and ps[i] > 0 then rsfx(ps[i]/#arr*80, 15, i%4) end end end cls(0) local s = w/#arr for i=1, #arr do local col = 12 for j=1, spd do if i == hls[j] then col = hcols[j] end end crect(s*(i-1), h-(arr[i]/#arr*h), s*i, h, col) end if not sorts[cur] then print("done!", 0, 0, 10) else print(sorts[cur].name.."\nn = "..#arr, 0, 0, 10) end end function crect(x, y, x1, y1, col) tri(x, y, x1, y, x, y1, col) tri(x1, y, x1, y1, x, y1, col) end function rsfx(note, volume, channel) local w = {} t=0 for i=1, 32 do w[i]=((math.sin(t/16*2*math.pi)+1)/2*15+0.5)//1 t=t+1 end local freq = math.pow(2, ((note-69)/12))*64*(440/60)*2//1 poke(0xFF9C+channel*18, freq%256) poke(0xFF9C+channel*18+1, (volume<<4)+(freq>>8)) local empty = true for i,p in ipairs(w) do if p ~= 0 and p ~= 15 then empty = false end poke4((0xFF9C+channel*18+2)*2+i-1, p) end if empty then poke(0xFF9C+channel*18, 0) poke(0xFF9C+channel*18+1, 0) end end