September 2017 Update

This commit is contained in:
Ingy döt Net 2017-09-23 10:01:46 +02:00
parent bba7bfd280
commit ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions

View file

@ -0,0 +1,47 @@
in='10 -12 1 0 999 8 2 2 4 4'
Do i=1 To words(in)
z.i=word(in,i)
End
n=i-1
init=0
Call minmax
beads.=0;
Do i=1 To words(in)
z=z.i
beads.z+=1
End
j=0
Do i=lo To hi
Do While beads.i>0
j+=1
s.j=i
beads.i-=1
End;
End;
Call show ' Input:',z.,n
Call show 'Sorted:',s.,n
Exit
minmax:
Do i=1 To n
If init=0 Then Do
init=1
lo=z.i
hi=z.i
End
Else Do
lo=min(lo,z.i)
hi=max(hi,z.i)
End
End
Return
show: Procedure Expose n
Use Arg txt,a.
ol=txtg>
Do i=1 To n
ol=ol format(a.i,3)
End
Say ol
Return

View file

@ -0,0 +1,82 @@
/*REXX program sorts a list of integers using a bead sort. */
/*get some grassHopper numbers. */
grasshopper=,
1 4 10 12 22 26 30 46 54 62 66 78 94 110 126 134 138 158 162 186 190 222 254 270
/*GreeenGrocer numbers are also called hexagonal pyramidal */
/* numbers. */
greengrocer=,
0 4 16 40 80 140 224 336 480 660 880 1144 1456 1820 2240 2720 3264 3876 4560
/*get some Bernoulli numerator numbers. */
bernN='1 -1 1 0 -1 0 1 0 -1 0 5 0 -691 0 7 0 -3617 0 43867 0 -174611 0 854513'
/*Psi is also called the Reduced Totient function, and */
/* is also called Carmichale lambda, or LAMBDA function.*/
psi=,
1 1 2 2 4 2 6 2 6 4 10 2 12 6 4 4 16 6 18 4 6 10 22 2 20 12 18 6 28 4 30 8 10 16
list=grasshopper greengrocer bernN psi /*combine the four lists into one*/
call showL 'before sort',list /*show list before sorting. */
!=beadSort(list) /*invoke the bead sort. */
call showL ' after sort',! /*show after array elements*/
exit
/*─────────────────────────────────beadSort@ subroutine────────────*/
beadSort: procedure expose _.
parse arg z
!='' /*this'll be the sorted list*/
low=999999999; high=-low /*define the low and high #s*/
_.=0 /*define all beads to zero. */
do j=1 until z=='' /*pick the meat off the bone*/
parse var z x z
if \datatype(x,'Whole') then
do
say
say '*** error! ***'
say
say 'element' j "in list isn't numeric:" x
say
exit 13
end
x=x/1 /*normalize number, it could*/
/*be: +4 007 5. 2e3 etc.*/
_.x=_.x+1 /*indicate this bead has a #*/
low=min(low,x) /*keep track of the lowest #*/
high=max(high,x) /* " " " " highest#*/
end j
/*now, collect the beads and*/
do m=low to high /*let them fall (to zero). */
if _.m==0 then iterate /*No bead here? Keep looking*/
do n=1 for _.m /*let the beads fall to 0. */
!=! m /*add it to the sorted list.*/
end n
end m
return !
/*─────────────────────────────────────SHOW@ subroutine────────────*/
showL:
widthH=length(words(arg(2))) /*maximum width of the index*/
do j=1 for words(arg(2))
say 'element' right(j,widthH) arg(1)":" right(word(arg(2),j),10)
end j
say copies('',80) /*show a separator line. */
return