September Morn Update

This commit is contained in:
Ingy döt Net 2019-09-12 10:33:56 -07:00
parent 4e2d22a71d
commit aac6731f2c
6856 changed files with 141342 additions and 21127 deletions

View file

@ -0,0 +1 @@
--- {}

View file

@ -1,31 +1,31 @@
import extensions.
import system'routines.
import extensions;
import system'routines;
extension $op
extension op
{
stoogeSort
= self stoogeSort(0, self length - 1).
stoogeSort()
= self.stoogeSort(0, self.Length - 1);
stoogeSort(IntNumber i, IntNumber j)
[
{
if(self[j]<self[i])
[
self exchange(i,j)
].
{
self.exchange(i,j)
};
if (j - i > 1)
[
int t := (j - i + 1) / 3.
self stoogeSort(i,j-t).
self stoogeSort(i+t,j).
self stoogeSort(i,j-t).
]
]
{
int t := (j - i + 1) / 3;
self.stoogeSort(i,j-t);
self.stoogeSort(i+t,j);
self.stoogeSort(i,j-t)
}
}
}
program =
[
var list := 0 to:15 repeat(:n)(randomGenerator eval(20)); toArray.
public program()
{
var list := new Range(0, 15).selectBy:(n => randomGenerator.eval(20)).toArray();
console printLine("before:", list).
console printLine("after:", list stoogeSort).
].
console.printLine("before:", list.asEnumerable());
console.printLine("after:", list.stoogeSort().asEnumerable())
}

View file

@ -0,0 +1,25 @@
USING: kernel locals math prettyprint sequences ;
IN: rosetta-code.stooge-sort
<PRIVATE
:: (stooge-sort) ( seq i j -- )
j i [ seq nth ] bi@ < [
j i seq exchange
] when
j i - 1 > [
j i - 1 + 3 /i :> t
seq i j t - (stooge-sort)
seq i t + j (stooge-sort)
seq i j t - (stooge-sort)
] when ;
PRIVATE>
: stooge-sort ( seq -- sortedseq )
[ clone dup ] [ drop 0 ] [ length 1 - ] tri (stooge-sort) ;
: stooge-sort-demo ( -- )
{ 1 4 5 3 -6 3 7 10 -2 -5 } stooge-sort . ;
MAIN: stooge-sort-demo

View file

@ -1,18 +1,16 @@
/*REXX program sorts an integer array @. [the first element starts at index zero].*/
parse arg N . /*obtain an optional argument from C.L.*/
if N=='' | N=="," then N=19 /*Not specified? Then use the default.*/
wV=0 /*width of the largest value, so far.*/
do k=0 to N; @.k=k*2 + k*-1**k /*generate some kinda scattered numbers*/
if @.k//7==0 then @.k= -100 -k /*Multiple of 7? Then make a negative#*/
wV=max(wV, length(@.k)) /*find maximum width of values, so far.*/
end /*k*/ /* [↑] // is REXX division remainder.*/
wN=length(N) /*width of the largest element number.*/
call gen@ /*generate a type of scattered array. */
call show 'before sort' /*show the before array elements. */
say copies('', wN+wV+ 50) /*show a separator line (between shows)*/
call stoogeSort 0, N /*invoke the Stooge Sort. */
call show ' after sort' /*show the after array elements. */
exit /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
gen@: wV= 0; do k=0 to N; @.k= k*2 + k*-1**k; if @.k//7==0 then @.k= -100 - k
wV= max(wV, length(@.k) ); end; wN=length(N); return
/*──────────────────────────────────────────────────────────────────────────────────────*/
show: do j=0 to N; say right('element',22) right(j,wN) arg(1)":" right(@.j,wV); end;return
/*──────────────────────────────────────────────────────────────────────────────────────*/
stoogeSort: procedure expose @.; parse arg i,j /*sort from I ───► J. */