Another update from ingydotnet^djgoku

This commit is contained in:
Ingy döt Net 2015-11-18 06:14:39 +00:00
parent 91df62d461
commit 948b86eafa
7604 changed files with 108452 additions and 22726 deletions

View file

@ -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.

View file

@ -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))

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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], ...)