Another update from ingydotnet^djgoku
This commit is contained in:
parent
91df62d461
commit
948b86eafa
7604 changed files with 108452 additions and 22726 deletions
|
|
@ -1,4 +1,5 @@
|
|||
{{Sorting Algorithm}}
|
||||
In this task, the goal is to sort an array of positive integers using the [[wp:Bead_sort|Bead Sort Algorithm]].
|
||||
|
||||
Algorithm has O(S), where S is the sum of the integers in the input set: Each bead is moved individually. This is the case when bead sort is implemented without a mechanism to assist in finding empty spaces below the beads, such as in software implementations.
|
||||
Algorithm has O(S), where S is the sum of the integers in the input set: Each bead is moved individually.
|
||||
This is the case when bead sort is implemented without a mechanism to assist in finding empty spaces below the beads, such as in software implementations.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
(defun transpose (remain &optional (ret '()))
|
||||
(if (null remain)
|
||||
ret
|
||||
(transpose (remove-if #'null (mapcar #'cdr remain))
|
||||
(append ret (list (mapcar #'car remain))))))
|
||||
|
||||
(defun bead-sort (xs)
|
||||
(mapcar #'length (transpose (transpose (mapcar (lambda (x) (make-list x :initial-element 1)) xs)))))
|
||||
|
||||
(bead-sort '(5 2 4 1 3 3 9))
|
||||
|
|
@ -1,61 +1,83 @@
|
|||
class
|
||||
BEAD_SORT
|
||||
|
||||
feature
|
||||
bead_sort(ar: ARRAY[INTEGER]): ARRAY[INTEGER]
|
||||
|
||||
bead_sort (ar: ARRAY [INTEGER]): ARRAY [INTEGER]
|
||||
-- Sorted array in descending order.
|
||||
require
|
||||
only_positive_integers: across ar as a all a.item > 0 end
|
||||
local
|
||||
max, count, i, j, k: INTEGER
|
||||
sorted: ARRAY[INTEGER]
|
||||
do
|
||||
max:= max_item(ar)
|
||||
create sorted.make_filled(0,1, ar.count)
|
||||
max := max_item (ar)
|
||||
create Result.make_filled (0, 1, ar.count)
|
||||
from
|
||||
i:= 1
|
||||
i := 1
|
||||
until
|
||||
i> max
|
||||
i > max
|
||||
loop
|
||||
count:= 0
|
||||
count := 0
|
||||
from
|
||||
k:= 1
|
||||
k := 1
|
||||
until
|
||||
k> ar.count
|
||||
k > ar.count
|
||||
loop
|
||||
if ar.item (k) >= i then
|
||||
count:= count+1
|
||||
count := count + 1
|
||||
end
|
||||
k:= k+1
|
||||
k := k + 1
|
||||
end
|
||||
from
|
||||
j:= 1
|
||||
j := 1
|
||||
until
|
||||
j>count
|
||||
j > count
|
||||
loop
|
||||
sorted[j]:= i
|
||||
j:= j+1
|
||||
Result [j] := i
|
||||
j := j + 1
|
||||
end
|
||||
i:= i+1
|
||||
i := i + 1
|
||||
end
|
||||
RESULT:= sorted
|
||||
end
|
||||
|
||||
feature{NONE}
|
||||
max_item(ar: ARRAY [INTEGER]):INTEGER
|
||||
require
|
||||
ar_not_void: ar/= Void
|
||||
local
|
||||
i, max: INTEGER
|
||||
do
|
||||
from
|
||||
i:=1
|
||||
until
|
||||
i > ar.count
|
||||
loop
|
||||
if ar.item(i) > max then
|
||||
max := ar.item(i)
|
||||
end
|
||||
i := i + 1
|
||||
end
|
||||
Result := max
|
||||
ensure
|
||||
result_is_set: Result /= Void
|
||||
end
|
||||
array_is_sorted: is_sorted (Result)
|
||||
end
|
||||
|
||||
feature {NONE}
|
||||
|
||||
max_item (ar: ARRAY [INTEGER]): INTEGER
|
||||
-- Max item of 'ar'.
|
||||
require
|
||||
ar_not_void: ar /= Void
|
||||
do
|
||||
across
|
||||
ar as a
|
||||
loop
|
||||
if a.item > Result then
|
||||
Result := a.item
|
||||
end
|
||||
end
|
||||
ensure
|
||||
Result_is_max: across ar as a all a.item <= Result end
|
||||
end
|
||||
|
||||
is_sorted (ar: ARRAY [INTEGER]): BOOLEAN
|
||||
--- Is 'ar' sorted in descending order?
|
||||
require
|
||||
ar_not_empty: ar.is_empty = False
|
||||
local
|
||||
i: INTEGER
|
||||
do
|
||||
Result := True
|
||||
from
|
||||
i := ar.lower
|
||||
until
|
||||
i = ar.upper
|
||||
loop
|
||||
if ar [i] < ar [i + 1] then
|
||||
Result := False
|
||||
end
|
||||
i := i + 1
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,20 +1,32 @@
|
|||
class
|
||||
APPLICATION
|
||||
inherit
|
||||
ARGUMENTS
|
||||
|
||||
create
|
||||
make
|
||||
make
|
||||
|
||||
feature
|
||||
make
|
||||
do
|
||||
test:= <<1, 5, 99, 2, 95, 7, 7>>
|
||||
create beadsort
|
||||
io.put_string ("unsorted:"+"%N")
|
||||
across test as ar loop io.put_string(ar.item.out + "%T") end
|
||||
io.put_string ("%N"+"sorted:"+"%N")
|
||||
test:= beadsort.bead_sort (test)
|
||||
across test as ar loop io.put_string(ar.item.out + "%T") end
|
||||
end
|
||||
beadsort: BEAD_SORT
|
||||
test: ARRAY[INTEGER]
|
||||
|
||||
make
|
||||
do
|
||||
test := <<1, 5, 99, 2, 95, 7, 7>>
|
||||
create beadsort
|
||||
io.put_string ("unsorted:" + "%N")
|
||||
across
|
||||
test as ar
|
||||
loop
|
||||
io.put_string (ar.item.out + "%T")
|
||||
end
|
||||
io.put_string ("%N" + "sorted:" + "%N")
|
||||
test := beadsort.bead_sort (test)
|
||||
across
|
||||
test as ar
|
||||
loop
|
||||
io.put_string (ar.item.out + "%T")
|
||||
end
|
||||
end
|
||||
|
||||
beadsort: BEAD_SORT
|
||||
|
||||
test: ARRAY [INTEGER]
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
defmodule Sort do
|
||||
def bead_sort(list) when is_list(list), do: dist(dist(list))
|
||||
|
||||
defp dist(list), do: List.foldl(list, [], fn(n, acc) when n>0 -> dist(acc, n, []) end)
|
||||
|
||||
defp dist([], 0, acc), do: Enum.reverse(acc)
|
||||
defp dist([h|t], 0, acc), do: dist(t, 0, [h |acc])
|
||||
defp dist([], n, acc), do: dist([], n-1, [1 |acc])
|
||||
defp dist([h|t], n, acc), do: dist(t, n-1, [h+1|acc])
|
||||
end
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
function beadsort{T<:Integer}(a::Array{T,1})
|
||||
(lo, hi) = extrema(a)
|
||||
if lo < 1
|
||||
throw(DomainError())
|
||||
end
|
||||
hi = convert(Int, hi)
|
||||
len = length(a)
|
||||
abacus = falses(len, hi)
|
||||
for (i, v) in enumerate(a)
|
||||
abacus[i,1:v] = true
|
||||
end
|
||||
for i in 1:hi
|
||||
v = sum(abacus[:,i])
|
||||
if v < len
|
||||
abacus[1:end-v,i] = false
|
||||
abacus[end-v+1:end,i] = true
|
||||
end
|
||||
end
|
||||
return T[sum(abacus[i,:]) for i in 1:len]
|
||||
end
|
||||
|
||||
a = Uint8[rand(1:typemax(Uint8)) for i in 1:20]
|
||||
println("Sort of Unsigned Bytes:")
|
||||
println(" Before Sort:")
|
||||
println(" ", a)
|
||||
a = beadsort(a)
|
||||
println("\n After Sort:")
|
||||
println(" ", a, "\n")
|
||||
|
||||
a = [rand(1:2^10) for i in 1:20]
|
||||
println("Sort of Integers:")
|
||||
println(" Before Sort:")
|
||||
println(" ", a)
|
||||
a = beadsort(a)
|
||||
println("\n After Sort:")
|
||||
println(" ", a)
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
<?php
|
||||
function columns($arr) {
|
||||
if (count($m) == 0)
|
||||
if (count($arr) == 0)
|
||||
return array();
|
||||
else if (count($m) == 1)
|
||||
return array_chunk($m[0], 1);
|
||||
else if (count($arr) == 1)
|
||||
return array_chunk($arr[0], 1);
|
||||
|
||||
array_unshift($arr, NULL);
|
||||
// array_map(NULL, $arr[0], $arr[1], ...)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue