Created
October 20, 2011 13:40
-
-
Save gregersrygg/1301170 to your computer and use it in GitHub Desktop.
Unfinished nasty code for extreme startup
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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