September 2017 Update
This commit is contained in:
parent
bba7bfd280
commit
ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions
|
|
@ -0,0 +1,95 @@
|
|||
/* Rexx */
|
||||
|
||||
call demo
|
||||
return
|
||||
exit
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- Gnome sort implementation
|
||||
-- -----------------------------------------------------------------------------
|
||||
::routine gnomeSort
|
||||
use arg ra, sAsc = ''
|
||||
if sAsc = '' then sAsc = isTrue()
|
||||
|
||||
sDsc = \sAsc -- Ascending/descending switches
|
||||
i_ = 1
|
||||
j_ = 2
|
||||
loop label i_ while i_ < ra~items()
|
||||
ctx = (ra~get(i_ - 1))~compareTo(ra~get(i_))
|
||||
if (sAsc & ctx <= 0) | (sDsc & ctx >= 0) then do
|
||||
i_ = j_
|
||||
j_ = j_ + 1
|
||||
end
|
||||
else do
|
||||
swap = ra~get(i_)
|
||||
ra~set(i_, ra~get(i_ - 1))
|
||||
ra~set(i_ - 1, swap)
|
||||
i_ = i_ - 1
|
||||
if i_ = 0 then do
|
||||
i_ = j_
|
||||
j_ = j_ + 1
|
||||
end
|
||||
end
|
||||
end i_
|
||||
|
||||
return ra
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- Demonstrate the implementation
|
||||
-- -----------------------------------------------------------------------------
|
||||
::routine demo
|
||||
placesList = .nlist~of( -
|
||||
"UK London", "US New York", "US Boston", "US Washington" -
|
||||
, "UK Washington", "US Birmingham", "UK Birmingham", "UK Boston" -
|
||||
)
|
||||
|
||||
lists = .nlist~of( -
|
||||
placesList -
|
||||
, gnomeSort(placesList~copy()) -
|
||||
)
|
||||
|
||||
loop ln = 0 to lists~items() - 1
|
||||
cl = lists[ln]
|
||||
loop ct = 0 to cl~items() - 1
|
||||
say right(ct + 1, 3)':' cl[ct]
|
||||
end ct
|
||||
say
|
||||
end ln
|
||||
|
||||
i_.0 = 3
|
||||
i_.1 = .nlist~of(3, 3, 1, 2, 4, 3, 5, 6)
|
||||
i_.2 = gnomeSort(i_.1~copy(), isTrue())
|
||||
i_.3 = gnomeSort(i_.1~copy(), isFalse())
|
||||
loop s_ = 1 to i_.0
|
||||
ss = ''
|
||||
loop x_ = 0 to i_.s_~items() - 1
|
||||
ss ||= right(i_.s_~get(x_), 3)' '
|
||||
end x_
|
||||
say strip(ss, 'T')
|
||||
end s_
|
||||
|
||||
return
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
::routine isTrue
|
||||
return 1 == 1
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
::routine isFalse
|
||||
return \isTrue()
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
-- Helper class. Map get and set methods for easier conversion from java.util.List
|
||||
-- -----------------------------------------------------------------------------
|
||||
::class NList mixinclass List public
|
||||
|
||||
-- Map get() to at()
|
||||
::method get
|
||||
use arg ix
|
||||
return self~at(ix)
|
||||
|
||||
-- Map set() to put()
|
||||
::method set
|
||||
use arg ix, item
|
||||
self~put(item, ix)
|
||||
return
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
/* REXX ---------------------------------------------------------------
|
||||
* 28.06.2014 Walter Pachl
|
||||
* 30.06.2014 corrected in sync with REXX version 2
|
||||
*--------------------------------------------------------------------*/
|
||||
Call gen /* generate the array elements. */
|
||||
Call show 'before sort' /* show "before" array elements.*/
|
||||
Call gnomeSort x /* invoke the infamous gnome sort.*/
|
||||
Call show ' after sort' /* show "after" array elements.*/
|
||||
Exit /* done. */
|
||||
|
||||
gnomesort: Procedure
|
||||
Use Arg x
|
||||
n=x~items
|
||||
k=2
|
||||
Do j=3 While k<=n
|
||||
km=k-1
|
||||
If x[km]<=x[k] Then
|
||||
k=j
|
||||
Else Do
|
||||
t=x[km]; x[km]=x[k]; x[k]=t /* swap two entries in the array. */
|
||||
k=k-1
|
||||
If k==1 Then
|
||||
k=j
|
||||
Else
|
||||
j=j-1
|
||||
End
|
||||
End
|
||||
Return
|
||||
|
||||
gen:
|
||||
x=.array~of('---the seven virtues---','=======================',,
|
||||
'Faith','Hope','Charity [Love]','Fortitude',' Justice',,
|
||||
'Prudence','Temperance')
|
||||
Return
|
||||
show:
|
||||
Say arg(1)
|
||||
Do i=1 To x~items
|
||||
Say 'element' right(i,2) x[i]
|
||||
End
|
||||
Return
|
||||
Loading…
Add table
Add a link
Reference in a new issue