Премини към съдържанието

a.bozhilov

Потребител
  • Публикации

    135
  • Регистрация

  • Последно онлайн

2 Последователи

Последни посетители

Информацията с последните посетители на профила ви е изключена и не се показва на другите потребители.

Постижения на a.bozhilov

Сътрудник

Сътрудник (5/21)

  • Първа публикация
  • Сътрудник Рядка
  • Първа седмица
  • Месец по-късно
  • Една година във форума

Нови значки

54

Репутация

  1. Мисля си за това, че в момента не си мисля за нищо конкретно.... The art of trolling...
  2. За да не излезеш от определеното време, прилагаш следната тактика. Например зададен ти е лимит от 1000; Намираш първо простите числа в този интервал. За да не правиш O(N^3) сложност тук ще имаш един масив който ще държи простите числа. Като трябва да проверяваш дали едно число е просто. Минавваш през този масив и ако не е кратно с нито едно число, значи е просто и го слагаш в края на масива. Това е решето на Ератостен. След като си генерирал простите числа започваш да итерираш от 2, като на всяка стъпка проверяваш дали текущия индекс повдигнат на 2, сиреч на квадрат дали е по-малко от 1000; Ако е по-малко, минаваш през простите числа и проверяваш дали е сума от две съседни числа. Ако е сума приключваш иначе продължаваш до края на масива с простите числа. Така сложноста на алгоритъма ще стане: O(N^2 + N). От тук за N <= 1000 програмата ти определено ще приключва за по-малко от секунда. Ако се затрудняваш с реализацията пиши и ще го напиша. EDIT: Виж поста под този. Прав е колегата.
  3. Извинявам се, че не е точно по темата, но:
  4. Само коментара да не е: //When I wrote this, only God and I understood what I was doing //Now, God only knows По принцип аз съм привърженик на "self documented" код, но определено има случаи в които трябва да се коментира. Особено в динамичните езици като JS, Python е хубаво да има документиращи коментари с които най-малкото указвам какъв е препоръчителния тип на аргументите на даден метод. Или каква грешка може да възникне по време на изпълнението на кода и съответно от какъв тип е върнатата стойност. Също така не е хубаво да се правят безмислени коментари като: // This is a loop which iterate over each item of Array instance arr // i - Counter of the loop // len -The number of items in arr for (var i = 0, len = arr.length; i < len; i++) { //... } Този коментар по никакъв начин не ми помага. Напротив, слага излишен текст в кода, който само може да обърка читателя. Същото важи за именуването на променливи. Аз лично съм почитател на кратки и ясни имена, ако са много дълги имената, позволяват лесно допускане на "typo" което като цяло ми забавя процеса на работа. Също ако две променливи се отнасят за две подобни неща не ползва еднакъв префикс. Например: var posX = 10, posY = 20; Това ме затруднява най-вече при четене. Много по-лесно ми е: var xPos = 10, yPos = 20; Само като видя префикса на променливата и вече знам за какво става дума. За всички тези неща си има написана книга от Brian W. Kernighan и P. J. Plauger: "The elements of programming style" <URL:http://www.amazon.com/Elements-Programming-Style-Brian-Kernighan/dp/0070342075> Препоръчвам я на всеки, въпреки че примерите са писани на FORTRAN или PL/I определено има какво да се научи от тази книга. Някой ако я иска, я имам на диска.
  5. Здравейте, преди време ми трябваше пълен JSON парсер. Най-малкото ми трябваше за по лесен дебъг на JSON стрингове. Та реших да го споделя с вас: /** * @name JSONParser * @version 0.0.3 * @author Asen Bozhilov * @date 2011-02-09 * * @license MIT * * @description * Javascript parser of JSON (JavaScript Object Notation) according ECMAScript 5 JSON grammar * * @contributors * * @usage * var jsValue = new JSONParser(JSONStr).parse(); */ var JSONParser = (function () { var LEFT_CURLY = '{', RIGHT_CURLY = '}', COLON = ':', LEFT_BRACE = '[', RIGHT_BRACE = ']', COMMA = ','; var punctuator = /^[{}:,\[\]]/, string = /^"(?:[^"\\\u0000-\u001F\u0080-\u009F\u007F]|\\["\\\/bfnrt]|\\u[0-9A-F]{4})*"/, number = /^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/, bool = /^(?:true|false)/, nullLiteral = /^null/, whiteSpace = /^[\t ]+/, lineTerminator = /^\r?\n/; function JSONLexer(JSONStr) { this.line = 1; this.col = 1; this._tokLen = 0; this._str = JSONStr; } JSONLexer.prototype = { getNextToken : function () { var str = this._str, token, type; this.col += this._tokLen; if (!str.length) { return 'END'; } if ((token = whiteSpace.exec(str))) { this._tokLen = token[0].length; this._str = str.slice(this._tokLen); return this.getNextToken(); } else if ((token = lineTerminator.exec(str))) { this._tokLen = 0; this._str = str.slice(token[0].length); this.line++; this.col = 1; return this.getNextToken(); } else if ((token = punctuator.exec(str))) { type = 'PUNCTUATOR'; } else if ((token = string.exec(str))) { type = 'STRING'; } else if ((token = number.exec(str))) { type = 'NUMBER'; } else if ((token = bool.exec(str))) { type = 'BOOLEAN'; } else if ((token = nullLiteral.exec(str))) { type = 'NULL'; } else { this.error('Invalid token'); } this._tokLen = token[0].length; this._str = str.slice(this._tokLen); return { type : type, value : token[0] }; }, error : function (message) { var err = new SyntaxError(message); err.line = this.line; err.col = this.col; throw err; } } function JSONParser(JSONStr) { this.lex = new JSONLexer(JSONStr); } JSONParser.prototype = { parse : function () { var lex = this.lex, value = this.getValue(); if (lex.getNextToken() !== 'END') { lex.error('Illegal token'); } return value; }, getObject : function () { var jsObj = {}, lex = this.lex, token, tval, type, prop, pairs = false; while (true) { token = lex.getNextToken(); tval = token.value; type = token.type; if (tval == RIGHT_CURLY) { return jsObj; } if (pairs) { if (tval == COMMA) { token = lex.getNextToken(); tval = token.value; type = token.type; if (tval == RIGHT_CURLY) { lex.error('Invalid trailing comma'); } } else { lex.error('Illegal token where expect comma'); } } if (type != 'STRING') { lex.error('Invalid property name'); } prop = String(tval).slice(1, -1); token = lex.getNextToken(); tval = token.value; if (tval != COLON) { lex.error('Invalid token where expect colon'); } jsObj[prop] = this.getValue(); pairs = true; } }, getArray : function () { var jsArr = [], lex = this.lex, token, tval, type, prop, values = false; while (true) { token = lex.getNextToken(); tval = token.value; type = token.type; if (tval == RIGHT_BRACE) { return jsArr; } if (values) { if (tval == COMMA) { token = lex.getNextToken(); tval = token.value; type = token.type; if (tval == RIGHT_BRACE) { lex.error('Invalid trailing comma'); } } else { lex.error('Illegal token where expect comma'); } } jsArr.push(this.getValue(token)); values = true; } }, getValue : function(tokenValue) { var lex = this.lex, token = tokenValue || lex.getNextToken(), tval = token.value; switch (token.type) { case 'PUNCTUATOR': if (tval == LEFT_CURLY) { return this.getObject(); } else if (tval == LEFT_BRACE) { return this.getArray(); } else { lex.error('Illegal punctoator'); } case 'STRING': return String(tval).slice(1, -1); case 'NUMBER': return Number(tval); case 'BOOLEAN': return Boolean(tval); case 'NULL': return null; default: lex.error('Invalid value'); } } }; return JSONParser; })(); Мнения, забележки и допълнения са добре дошли. Това е текущата версия, някой ако иска да следи за обновявания може да си направи копие на репозиторито в github. https://github.com/abozhilov/json/blob/master/src/json.js
  6. Как ако Mozilla не ми платят 3000$ за бъга, който им оставих ще спра да използвам Firefox.
  7. Ако си направя мониторинг на DOM дървото на кого ли ще му е полезно освен на мен?
  8. Крайно време е Федерер да обърне Джокович... Ако не го направи, скоро ще се откажа да гледам тенис. Само хамали останаха...
  9. А твоя в полза на Jameson Само да не пишем след около час - два. "Ти мене уважаваш ли ме?"
  10. Е хайде налей си... В уважение на твоята постъпка и аз ще си налея. Cheers!
  11. Едно време имаше Don Cafe, което го предпочитах. Не знам защо подобно кафе не съм срещал от много много време. Да не говорим че в повечето кафенета не са и чували за Daugh Egberts. Явно им се вижда не толкова престижно А е толкова хубаво кафе...
  • Разглеждащи това в момента   0 потребители

    • Няма регистрирани потребители разглеждащи тази страница.
×
×
  • Добави ново...

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите Условия за ползване