Ppb2011 1
var http = require('http');
var url = require('url');
var alphabet='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
 
var server = http.createServer( 
  function(req, res){
    // Извлекаем строку запроса
    pathname = decodeURIComponent(url.parse(req.url).pathname).split('/')[1];
    console.log(pathname);
 
    //Если запрос состоит из строки 'kill', завершаем работу сервиса
    if (pathname === 'kill') {
      res.writeHead(200,{"Content-Type": "application/json; charset=UTF-8"});
      res.end(JSON.stringify({server:'Основание системы счисления', pathname:pathname, result:'Server кирдык'}));
      server.close('');
      req.connection.destroy('');
      console.log("кирдык");
      process.exit('');
      return;
    }
 
    // Парсинг строки запроса
    n1=pathname.split('+')[0];        // Первое слагаемое
    n2=(pathname.split('+')[1]).split('=')[0]    // Второе слагаемое
    sum=(pathname.split('+')[1]).split('=')[1]    // Сумма
 
    console.log(n1);
    console.log(n2);
    console.log(sum);
 
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Поиск системы счисления
 
    // Если проверка введенных данных прошла успешно, выполняем поиск системы счисления
    if ((checkBound(n1,36)==true)&&(checkBound(n2,36)==true)&&(checkBound(sum,36)==true))
    {
        // Поиск системы счисл.
        result=-1;
        for(var i=2;i<=36;i=i+1)
        {
            if(checkSystem(n1,n2,sum,i)==true)
            {
                result=i;
                break;
            }
        }
    }
    else
    {
        result='Неверный ввод';
    }
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
    // Возвращаем результат в формате json
    res.writeHead(200,{"Content-Type": "application/json; charset=UTF-8"});
    res.end(JSON.stringify({server:'Основание системы счисления', pathname:pathname, result:result}));
    console.log(result);
    });
 
server.listen(8000)
console.log('Сервер стартовал на порту 8000')
 
// Функция проверки заданного равенства в системе счисления с основанием i
function checkSystem(n1, n2, sum, i)
{
    if((checkBound(n1,i)==true)&&(checkBound(n2,i)==true)&&(checkBound(sum,i)==true))
    {
        if(convert(n1,i)+convert(n2,i)==convert(sum,i))
            return true;
        else
            return false;
    }
    else
        return false;
}
 
// Функция преобразования заданного числа в указанную систему счисления
function convert(str, sys)
{
    var value=0;
    for(var b=0; b<str.length; b=b+1)
    {
        for(var aa=0;aa<alphabet.length;aa=aa+1)
        {
            if(alphabet[aa]==str[b]) 
            {
                value=value*sys+aa;
                break;
            }
        }
    }
    return value;
};
 
// Функция, проверяющая, не превышает ли какой-либо разряд заданного числа
// основание системы счисления syst, а также проверка на непустое значение
function checkBound(str, syst)
{
    if((str==null)||(str=='')) return false;
    for(var r=0;r<str.length;r=r+1)
    {
        var c=0;
        for(var a=0;a<syst;a=a+1)
        {
            if(alphabet[a]==str[r]) c=1;
        }
        if(c==0) {return false;}
    }
    return true;
}