The reason I've refreshed my experiences with JS scripts executing was Hacker Cup organized by Facebook - there are no language restrictions in there, your scripts just has to know how to analyze given input and write the answers on the standard output. It is quite unpopular way of using & writing Javascript, so I will show few tips of command line in here.
Engines
There is such a JavaScript engine called Rhino. It is completely written in Java, open source, and very easy to use. It is managed by Mozilla, so you can find a lot of docs and tutorials on Mozilla's page.
Rhino has few additional functions eg for working with files (readFile()) or serializing objects (serialize()), which makes it useful in solving algorithmic problems in competitions like FBHC. Full list of all shell function can be found on Mozilla's page.
Each time you run Javascript scripts from command line, all the arguments you provide will be stored in global variable called 'arguments'. Enriched with this knowledge we can begin with some examples. This is my implementation of binarySearch algorithm:
Array.prototype.binSearch = function(element) {
var element = parseInt(element, 10),
left = 0,
right = this.length-1,
middle = ~~((left+right)/2),
lastMiddle;
while (parseInt(this[middle], 10) !== element) {
if (lastMiddle === middle) {
return null; //nothing found, break
}
if (parseInt(this[middle], 10) < element)
left = middle++;
else
right = middle--;
lastMiddle = middle;
middle = Math.round((left+right)/2);
}
return middle; //index of found element
}
var MainFunction = function(args) {
var a = readFile(args).split("\n"),
arrayElement = a[0].split(" "),
result;
print("Array: "+arrayElement);
for (var i=1, j=a.length;i < j;i++) {
result = arrayElement.binSearch(a[i]);
if (result)
print("Element "+parseInt(a[i], 10)+" in on position nr "+result);
else
print("Element "+parseInt(a[i], 10)+" cannot be found in the array");
}
}(arguments)
As an input it takes filename with the elements of an array in first row and elements to find in that array in next rows, like this:4 10 12 19 25 34 41 50 52 61 66 68 76 81 82 85 94 97 105 112 115 124 128 138 139 230 321 432 456 540 61 82 94 2 10 4 24 432Assuming that script file is called binSearch.js, data.txt is the file with input data, and both are in the same directory as Rhino, to run the script simply type
java -jar js.jar binSearch.js data.txt