support for -f (finds prime factors)
parent
0a95670fa1
commit
de360db68d
|
|
@ -38,7 +38,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <ARES/a>
|
#include <ARES/a>
|
||||||
#define CLIENT_VERSION "1.2.0"
|
#define CLIENT_VERSION "1.3.0"
|
||||||
#define CLIENT_VERSION_TAGS "release"
|
#define CLIENT_VERSION_TAGS "release"
|
||||||
|
|
||||||
#define PUSH(_list, _item) _list += (list)(_item)
|
#define PUSH(_list, _item) _list += (list)(_item)
|
||||||
|
|
@ -56,8 +56,9 @@ main(integer src, integer n, string m, key outs, key ins, key user) {
|
||||||
integer argc = count(argv);
|
integer argc = count(argv);
|
||||||
string msg;
|
string msg;
|
||||||
if(argc == 1) {
|
if(argc == 1) {
|
||||||
msg = "Usage: " + PROGRAM_NAME + " [-x|-d|-e] <calculation>\n -x: Return result in hexadecimal\n (input hex values as 0xff)\n -d: Decode from ARES base64\n -e: Encode to ARES base64\n -r [[<min>] <max>]: generate a random integer between <min> (or 0) and (<max> - 1); if no bounds are specified, generates a random float between 0.0 and 1.0\n\nSupported symbols: " + concat(SYMBOLS, ", ");
|
msg = "Usage: " + PROGRAM_NAME + " [-x|-d|-e|-f] <calculation>\n -x: Return result in hexadecimal\n (input hex values as 0xff)\n -d: Decode from ARES base64\n -e: Encode to ARES base64\n -f: Finds prime factors of the result\n -r [[<min>] <max>]: generate a random integer between <min> (or 0) and (<max> - 1); if no bounds are specified, generates a random float between 0.0 and 1.0\n\nSupported symbols: " + concat(SYMBOLS, ", ");
|
||||||
} else {
|
} else {
|
||||||
|
integer factor_result;
|
||||||
integer hex_output;
|
integer hex_output;
|
||||||
integer ARES_decode;
|
integer ARES_decode;
|
||||||
integer ARES_encode;
|
integer ARES_encode;
|
||||||
|
|
@ -77,6 +78,12 @@ main(integer src, integer n, string m, key outs, key ins, key user) {
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
echo("hexadecimal output enabled if result is integer");
|
echo("hexadecimal output enabled if result is integer");
|
||||||
#endif
|
#endif
|
||||||
|
} else if(first == "-f") {
|
||||||
|
factor_result = 1;
|
||||||
|
argv = delitem(argv, 1);
|
||||||
|
#ifdef DEBUG
|
||||||
|
echo("result will be converted to integer and factored");
|
||||||
|
#endif
|
||||||
} else if(first == "-d") {
|
} else if(first == "-d") {
|
||||||
ARES_decode = 1;
|
ARES_decode = 1;
|
||||||
string t0 = gets(argv, 2);
|
string t0 = gets(argv, 2);
|
||||||
|
|
@ -437,10 +444,42 @@ main(integer src, integer n, string m, key outs, key ins, key user) {
|
||||||
/* #ifdef DEBUG
|
/* #ifdef DEBUG
|
||||||
echo("hex output? " + (string)hex_output + "; final class = " + (string)final_class);
|
echo("hex output? " + (string)hex_output + "; final class = " + (string)final_class);
|
||||||
#endif*/
|
#endif*/
|
||||||
if(substr(final_text, 0, 1) == "0x")
|
if(substr(final_text, 0, 1) == "0x") {
|
||||||
final_text = (string)((integer)final_text);
|
final_text = (string)((integer)final_text);
|
||||||
|
final_class = C_INTEGER;
|
||||||
|
}
|
||||||
|
|
||||||
if(hex_output && final_class == C_INTEGER) {
|
if(factor_result) {
|
||||||
|
integer heap = (integer)final_text;
|
||||||
|
list results;
|
||||||
|
if(heap < 0) {
|
||||||
|
results = [-1];
|
||||||
|
heap = llAbs(heap);
|
||||||
|
}
|
||||||
|
integer root_limit = llCeil(llSqrt((float)heap));
|
||||||
|
integer i = 2;
|
||||||
|
while(i < root_limit) {
|
||||||
|
if(heap % i == 0) {
|
||||||
|
results += i;
|
||||||
|
heap = heap / i;
|
||||||
|
if(heap < root_limit)
|
||||||
|
root_limit = heap;
|
||||||
|
i = 1;
|
||||||
|
}
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
|
results += heap;
|
||||||
|
|
||||||
|
results = llListSort(results, 1, TRUE);
|
||||||
|
/*
|
||||||
|
if(hex_output) {
|
||||||
|
i = count(results);
|
||||||
|
while(i--)
|
||||||
|
results = alter(results, ["0x" + hex(geti(results, i))], i, i);
|
||||||
|
} */
|
||||||
|
msg = concat(results, " ");
|
||||||
|
} else if(hex_output && final_class == C_INTEGER) {
|
||||||
msg = "0x" + hex((integer)final_text);
|
msg = "0x" + hex((integer)final_text);
|
||||||
} else if(ARES_encode && final_class == C_INTEGER) {
|
} else if(ARES_encode && final_class == C_INTEGER) {
|
||||||
integer v = (integer)final_text;
|
integer v = (integer)final_text;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue