Skip to content

Instantly share code, notes, and snippets.

@gregersrygg
Created October 20, 2011 13:40
Show Gist options
  • Save gregersrygg/1301170 to your computer and use it in GitHub Desktop.
Save gregersrygg/1301170 to your computer and use it in GitHub Desktop.
Unfinished nasty code for extreme startup
// My nasty code for extreme startup
// https://github.com/magnars/norsk-extreme-startup
var http = require('http');
var ip = "192.168.42.56";
var products = {
"epler": {
price: 5
},
"bananer": {
price: 3
}
};
var answers = [
answer(/%20hva%20heter%20laget%20deres/, function() {
return "Gregers (node)";
}),
answer(/%20hva%20er%20(\d+)%20pluss%20(\d+)/, function(s1, s2) {
console.log("hva er x + y", s1 ,s2);
return parseInt(s1, 10) + parseInt(s2, 10);
}),
answer(/%20hvilket%20av%20disse%20tallene%20er%20storst:%20(\d+),%20(\d+)/, function(s1, s2) {
console.log("hva er størst", s1, s2);
return Math.max(parseInt(s1, 10), parseInt(s2, 10));
}),
answer(/%20mitt%20navn%20er%20(\w+).%20hva%20heter%20jeg/, function(name) {
console.log("Hva heter jeg", name);
return name;
}),
answer(/hvilken%20myntenhet%20brukte%20Italia%20tidligere/, function() {
return "lire";
}),
answer(/hva%20er%20det%20(\d+).%20nummeret%20i%20Fibonaccirekken/, function(n) {
return (function fib(i, n1, n2) {
if(i==0) return n1;
return fib(i-1, n2, n1+n2);
})(n, 0, 1);
}),
answer(/hvilke%20produkter%20har%20du%20til%20salgs%20\(kommaseparert\)/, function() {
var ret = [];
for(var key in products) {
if(!products.hasOwnProperty(key)) continue;
ret.push(key);
}
/*products.forEach(function(p) {
ret.push(p.name);
});*/
return ret.join(",");
}),
/*answer(/hvor%20mange%20kroner%20koster/, function() {
var match = this.url.match(/(koster%20(.*)%20stykk%20(\w+))/);
var antall = textToNum(match[2]),
prodname = match[3];
// %20ett%20stykk%20epler
return ret;
}),*/
answer(/hva%20er%20(\d+)%20ganget%20med%20(\d+)/, function(s1, s2) {
return parseInt(s1, 10) * parseInt(s2, 10);
}),
answer(/hvilke%20av%20disse%20tallene%20er%20primtall:%20/, function() {
var nums = getNubers(this.url);
var ret = [];
for(var i=0, l=nums.length; i<l; i++) {
if(isPrime(nums[i])) ret.push(nums[i]);
}
}),
answer(/hva%20er%20(\d+)%20delt%20med%20(\d+)/, function(s1, s2) {
return parseInt(s1, 10) / parseInt(s2, 10);
}),
answer(/hva%20er%20(\d+)%20minus%20(\d+)/, function(s1, s2) {
return parseInt(s1, 10) - parseInt(s2, 10);
}),
answer(/hva%20er%20(\d+)%20ganget%20med%20(\d+)%20pluss%20(\d+)/, function(s1, s2, s3) {
console.log(this.url);
return parseInt(s1, 10) * parseInt(s2, 10) + parseInt(s3, 10);
}),
answer(/hvilke%20av%20disse%20tallene%20har%20heltalls%20kvadratrot%20og%20kubikkrot:%20(\d+),%20(\d+)/, function(s1, s2) {
var n1 = parseInt(s1, 10), n2 = parseInt(s2, 10);
}),
answer(/%20hva%20heter%20jeg/, function() {
return "Magnar";
})
];
http.createServer(function (req, res) {
for(var key in req) {
printKey(key, req[key]);
}
var answer = question(req, res);
if(answer) {
res.writeHead(200, {'Content-Type': 'text/plain'});
console.log("Answer: " + answer);
res.end(answer.toString());
} else {
res.writeHead(404, {'Content-Type': 'text/plain'});
res.end("Not found");
console.log("UNKNOWN QUESTION: " + req.url);
}
}).listen(1337, ip);
function printKey(key, obj) {
var type = typeof obj,
value;
if(key != "url") return;
if(type == "function") {
value = obj.toString().replace("\n", "").slice(0,20)+"...";
} else if(type == "object") {
value = "[object]";
} else {
value = obj;
}
console.log(key + ": " + value);
}
function question(req, res) {
var url = req.url, match;
var a;
for(var i=0,l=answers.length; i<l; i++) {
a = answers[i];
if(a.testQ(url)) {
return a.answer(url);
}
}
return null;
}
function answer(reg, f) {
return {
regex: reg,
testQ: function(str) {
return reg.test(str);
},
answer: function(str) {
var match = str.match(reg);
var url = match.shift();
this.url = url;
return f.apply(this, match);
}
};
}
function product(name) {
return {
name: name
}
}
function textToNum(str) {
if(!isNaN(parseInt(str, 10))) {
return parseInt(str, 10);
} else if(str == "ett") {
return 1;
}
console.log("UNKNOWN TEXT NUMBER: " + str);
return 0;
}
function getNubers(str) {
var parts = str.split(":");
var last = parts[parts.length - 1];
return last.replace("%20", "").split(",");
}
function isPrime(num) {
if(typeof num == "string") num = parseInt(num, 10);
for(var i = num; i>1; i--) {
if(num % i == 0) return false;
}
return true;
}
console.log('Server running at http://'+ip+':1337/');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment