Skip to content

Commit

Permalink
Implemented array sorting.
Browse files Browse the repository at this point in the history
This works with arrays of the same time, but not mixed types.
For example:

    // Now sort some ints
    let a = [ 32, 2, 33, 1, -1 ];
    puts( "Original Array: " , string(a), "\n" );
    let a = a.sort();
    puts( "Sorted Array: " , string(a), "\n" );

    // Now sort some strings
    let a = [ "Steve", "Kemp", "Kirsi" ];
    puts( "Original Array: " , string(a), "\n" );
    let a = a.sort();
    puts( "Sorted Array: " , string(a), "\n" );

This closes #36, but has revealed a new bug in the process, #37.
  • Loading branch information
skx committed Sep 30, 2018
1 parent d80b660 commit f7b7a07
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 3 deletions.
52 changes: 51 additions & 1 deletion data/stdlib.mon
Original file line number Diff line number Diff line change
Expand Up @@ -203,10 +203,60 @@ function array.sorted?() {
i++;
}

// OK it is good :)
return true;
}


//
// Swap the value of two array indexes.
//
function array.swap( a, b ) {
let aVal = self[b];
let bVal = self[a];

let r = [];
let i = 0;
let l = len(self);

for( i < l ) {
if ( i == a ) {
let r = push(r, aVal);
} else {
if ( i == b ) {
let r = push(r,bVal );
} else {
let r = push( r, self[i] );
}
}
i++;
}

return r;
}


//
// Sort the given array.
//
function array.sort() {
let pass = 0;

for( ! self.sorted?() ) {
let i = 1;
let l = len(self);
for( i < l ) {
if ( self[i] < self[i-1] ) {
self = self.swap( i-1, i);
}
i++;
}
pass +=1;
}
// puts( "Sorting took ", pass, " passes ..\n");
return self;
}


//
// Is the given hash empty?
//
Expand Down
4 changes: 2 additions & 2 deletions static.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ func init() {
var tmp EmbeddedResource

tmp.Filename = "data/stdlib.mon"
tmp.Contents = "1f8b08000000000004ffc4577f6fe4b611fd7f3fc560d15eb4f1eecaeb3b3777f1e982c07500f74712f85ca0a8cf856969b4624d910249d9d914feeec50c29aebcde386dda220292b3287266de9b3733dc3c9fe4395c36d2412d154269b417523ba87b5d7a69b403712fa412b70ae1760315d6a2577e0eb2ed14b6a83d562035ac0e0f7f4b96bade22b446dfe1663909c6e51297c18374d009ebc1d4607a0bce0b5d095b2d94bcb5c2a603e7356c4c0f0fd235e00db4e20ea16c845ea3a377dfe0b3a3a3702baca5c68a8269d02299fa4c29d088159db678db4b55c18df3c2cb72b93637206a8f16b0925eea35f8818c390847667c23fc9618728fed2d561556509a6e43703c9d294d85f0d0c8b221a45297aaa73d520723086bd46885c72a32b490daa3ed2c7ab4035b97666f88bd43f67c23db4e09ed6fc01ba3864391b1cae8cf3c086551541b68c43d8ef64bedbc500a2ba8d153881e94bc4370e6cb98287ad606d6e861d103aca56ffadb6569dadcddfd9047c7a417c2f3ad79008b03228e2db1728fd649a31331ac2ca1ab84cc37483646f0e141fa86726587548fa28aae612175d77ba88417392c4cefe92de5912c0210829061266712b1fd59f8065bcab850944bd29ea7ec4e4aa39d87efcfa180d7cbd59bd5f1bba3df1dbf3e7efbee8b77af4fe2d7338002e068f9c5eaedd15bfaefcdf1bbc337c72783f553b221b47760b1466b594686712f1aa12b858ec44459aca036163e5efefefcdb39fdf3dd5f2ef9dfb38b0b0a3544c39fc9e7e110c1c74bda0905ac462b67171750c0d14942f98db4ce0386c224fa850661add890e9a1a2a1a65d59f80033f8e704c0a2efad8e6b5787d7303b993c26b3970d8245f7c4222c42610ba506870ecefe7a7af6fd25a5373879e2962c440fd1ab424fabbdf250c0d5f5c96402206bc840a1ce38ee197c8055dc0dbc5f060e28d3b5b11948781fb6cfd23682138d76bd6b32cb6ff300f84a5ecf4ef838803c38087f3ed202ff2f1011a31a73f027f16f30ab84db8198e004ef40800e53a4c15b807ab505bd5885181f89903c879bb00f74afd40df796b653b2949e3bdc92334554e7399c3b667f2def31a61eb0edfce62bfa9e14c0dc2ec3872c28601ba94355cfa028467112a32410f0b647a66c4c562d94c33157a7240aea93218ce4d66840513680dadbcd3c7604b62b86604d4d070989f4d83aca3184964af63a8b952c852739d2396ae9b647aef4e42580aba5f268b3d19188934447223a641cf4a6a0600931f0b41a54b315268512e536988a92643850009dbf92d76c81d455439602ce78d32cc6101ef29dbcb052e3eb3c9a0cc10004b6c964142c0b23aa279e61fec3c0bd606e983053d70e695ad720f4661ee9656e41862d812e3afa8c415d659485183485fb22715444db9adc9244440ce490aec8e6f66bc22123712cad6d7106ac790eda78a84dafab25398a25b1589d4c1eb70df00f26a28a3dd011e224aedb0d931254e93cb5e97dc0ff61a4ce680cd9214a826ea180e99463a4d79f6522cfe11b634782e7b077f82124405bcf59f7319754e2dae805172888aae2b01d76c20a6f2c1b1a15ac7dda5488d18382e3e768493ec90f193321f11a7f48b3229ab470504462b2a8e65938ba5f79cf4597b88e1749c917aa04ccd420ba4e6da45e538d534d876c24ed7913298b432ce6d3f55da72456a0a4f3fb92d68a2e835a97e394bd98a358bca900e3fcd9cd10d119268f6f3b28c845a226d2cb7a48769e16b26fbbb46d3f873c9c9848aac13c870ba4fb13262a6939d113aad5862db175931c499d842004b3d3d1261195820fe3a63e9c8b11cf438daac58ac73f03578b0581a4928c0537cef94763e9321bbe381e0e54ec94558e9374ec78cf1e0ce1c3307e28164ad78adcd1cb7308790e5fd35d8644f4a3419b1b8d439d9327a11ec4c645872468ee3b0adec3d1208a182a474a8eb8b7d0d4ac418012f42b809b9374e05aba2c5bbafc73b94cb84c515825d1865d4f7052770a90c8f54e99e739b3d9f5de65303d356d27a8f9c034722eafe73005b1a65f5e7ebbba58d1fa273d1d24c4886261c2fbf817dd16f812c74f48c630937989b247fd220c8f01f3777f04c9bcad8da9e04baaf37896462a0b328c9327578a46b866df8d82d65fba502cef70e3b2d97f77afb8c0d6dc23281415f59587467a749d28116a6b5acec7beae1ed794b7b28d25c312b3b8a69efef7ecd3277730cb969fcf7eb3edefa6a7d9df0a5fd205721d1235e32b6a48036dd8f21ea8cb68f56a753d0352173c022a872937610f672d7ce68b5b2039157d8c764eeba9ea23823d653fcca4fd25c332dca9fad0e351d55ce91c08fc649d5314dc9298786f8554bf8079fb93cc2f3fff6a46f4ffafa83ffc05d45f5ad9264dbd7a19641856311d44ce6e8a7691521b23b207f531df410819a8c4cc939f5ba746dfa3f5ace7b1439a8dca3ca05d94c2ed5c7a6348def086b1caa9abfeec5d97ea601ac4cd9ae15f55b09537c9ab84d1153774965009257c2860faf5145ebd8212de1730fddb7474969fc140b934b6ca020dc353d2ade3f51153333ce4ac5c968dddee8d6d2c8cd1e89fc55cf249ee6b91da2753ea253afbae7b994edef06bd0294674fef81fd2b928fe0f74fe2b0000ffffc429159e2a140000"
tmp.Length = 5162
tmp.Contents = "1f8b08000000000004ffc4587f6f1bc711fd5f9f624ab40919913c51b61bbb321d04ae03b868d340568ba2b20badeee6c8ad96bb87dd3dc94ca1ef5ebcd9bde389a695366dd1036c897bb3f3e3cd9b1f54511c15055dac75a05a1ba6d2d9a8b40d54b7b68cdad940ea5669a3ae0dd3f5962aae556be294f4a631bc611bb9226d697172f22b686a5acfb471f686b7f3a3a45ccf799e2ce8408df2915c4daef514a2b295f2d5cce86baf7c7fe16d4d5bd7d29d0e6b8a8e36ea86a95c2bbbe280cf71cd9f5c1db85b71ad2d577066cd9ea1ea4b63c83257b8edf9bad5a6a2ab1055d4e57ce5ae48d5913d71a5a3b62b8a1d185352016ae25ac51d3030cf9b6bae2aaea874cd16e144dc295dc574b7d6e51a916a5b9a1632da26254c2bb6ec55e42a2334d336b26f3c47f61d5a17eea08b6d60b17ca5378d51365e5174ce7497326295b35f4652c6b3aab6b456b73c90d73644650c575473848b918cbe610aee37395178568e561c69d612ad745cb7d7f3d26d8a70f3b1c886c117c4f3bdbb23cf5d44e25b8fca2dfba09ded811166295bf591c53543c7207cbad3718d5cf92ed503afb2699a69dbb4912a15554133d7467ceaf3088d4488206558c039cab1fd41c5356f907165904b702f22bb47a5b321d20f6f69494fe68ba78b672f4e7ffdecc9b3e72fbe7ef1e42cbf7d43b4243a9d7fbd787efa1cff9e3e7b71f2f4d959a7fd3574281b0379aed97ba19193b8676b652bc3016442162baa9da77717bf7dfbfd143ffef8a70bf9f9e6fc1cae266fe4356c9e741ebcbb80242d69313879737e4e4b3a3deba3fc4efb10895361027e654979afb650dd5534d5901aa71734a17f1c11798eadb7f9ecf2e4034dce8eee7bb5176b26cfe181469aa5c256c6740603bdf9cbeb373f5c20bdc9c803b3d0902d64ab86234e5b136949971fce8e8e88744d63326cc7e2f7845ed1224b93c8eb8401325d3b3f264d2f93f8a41743385969d386f5d8cba7690af8527f989cc975227d7c9c7ebdc781fc9780c85e0d31f8bdfa1790352aec85d88793ac13023ae93d4dd652a897bba0678be4e33d00290aba4a72645b63aea4b76c1aa34b1da5c3cd255380ba28e86d10f457fa9673ea89374ddc7e83f73d0304db797a314e0cd8791ad8d4135a2e077e02511084a26f59201b82552b137888d56b90027d32b9d19b759658956b621bfd769a3b82e8559db3aec64544a2236f02724ca9a5425fe3b9d2a58aa023eea1a5fb96a5d27b2b29b85a9bc87e3cb892e304e940a21389039f0c2d854212787f9a58b323265cc974eb54654a4a38b424dcbfd41f4403d855d3b877782c4293ec437a60bbb7224ccd1fa75965728628a10d9599b0428ccc9e7c47f04f03f75cb011c05c5d07c6b4ae49d9ed34c32bd8924e22092e5cfd04415b8d9185ec34dc7d143814d1ae26772001880e1cf00a3a776ffb3874064ea8b52bce146b519075916ad7da6a0e43b924668bb3a3fb5d03fc9dcb51e51e1810714faeebad8092581922daf4a1c0ffeeb41d630cf9ce4b84ee6949a391f8888f3f894451d077ce0f082f6eefe1834808a26f85f739972871ebec4c0a94545589db811be555745e140d0ad63f6c2a40f47829fe8bb7a04f6f07ca5c4abce58ffdacc82a3d1d2f3330e3cce649ba7a98799f92aec73a2f925a16aa3e3057936a1ab3d576851a474da76cf4dc8b2e43968758ce67689bc668aec8e8100f256da39a31d5b61ca6ecd11ce5e2ed0b30cf9ffd0c01ce3479e2a6a1254cf4d06478850fbd9e87851c374d2f761843194e02246ab028e89cb13f710f258e7b7852b5fa24925b37e808762282e4cc5e473bca51197a356ceaddbdecf134d5a8992d64fc4be06636439028c95c70c39cbf731ecb6c7a136438a0d89155f1133c0e22732086f4a21b3ff005e95ac01c3e7c1a4251d0b7d86540a21f1dfbc259eeea1c9694b953db900d82d0d2770cbda4d38e14d955f11486a4b7606ad6a4c8287c0b90e6a403850d96658fe55fcae548ca9495379a7d927a1027ba530a09a6f7ca5cb014777255d1cbfc1b46bd6c60f22424bb812a47801ec59e3abf389ca530f986bc7977a71af1e95699968152bc735d226cc51f391c2a9c7087ca5153bace28017df567850488b7d732d1707a3d3855695dc3f143ee218b325bf10a4ab0d740d144f6bbcf22a3311a54f6213dd000e542503f15afba6aba27368177d0257845491748ffece991303a3d449faaca05df9ba6ae36f4ae3270efa732946a05dc2f0a2916494f6a78522007f3e17c1c1476a342a02510edaaf817929641fdf404429c805f8a2807b197011c1fcc013886d51b99429c0382ee0cc803094adb4e268f9e2da6a48788263bd099789bd12a0aa214d1f1529cbc0732d4b4318c69847622f3c2b91b1a4d45704a23f9c981e6f3f77624467201c09161013cd87dd72aac0fadbe387f6cf39ddff0368c27ffd9027cce1b77cb64585508e86ead238746954cb5771b61c1a1f5239f99e8f526534072ea7985e5e36fe3f7efc3f1643cff6af2cbdd22e25a2ca91b154b7cd359a52e9e6a2dd504047a8a64ecc638bd5c7c9810dae07e053cc05752b7fb2ed84fa7eced14f4eec7538ee0c07cea962770748f931db1f7c6535a46d8d43292c44ffaec408217323b05f8e895363f0379ff59e4e75f7d3301fcff2de84f7e06f4175e6f7a4e7df17890a9c9e474009cfd14ed478a9c00ec8e7d827722c2984c8fcc83bf0bbc76f696fdb0ab258358e28cbb633f2b55d8fb769624e6d189c090e5e85c32380e7104a9c75f0b500723192487bb18844a4add49be8be126fa107a5b49af9634fa76445f7c4125bd5cd2e8af23da95863c9d8272ee7c354e30744f89f5f8c9a940d33d3056cecbb5dfc976dd4f7a5fb62f642ee5a6ccf00c6d1e11e97bdb6370b64df3389c22f0ff80530de0fcf1df8473b6fc1fc0f9cf000000ffff918f8d94d3160000"
tmp.Length = 5843
RESOURCES = append(RESOURCES, tmp)

}
Expand Down

0 comments on commit f7b7a07

Please sign in to comment.