Tag: algorithm

如何创build连接文件的源映射

我想连接一个单一types的一堆不同的文件到一个大文件。 例如,很多javascript文件放到一个大文件中,很多css文件放在一个文件中等等。我想创build一个文件pre-concatenation的sourcemap,但是我不知道从哪里开始。 我在Node工作,但我也开放在其他环境中的解决scheme。 我知道有些工具可以做到这一点,但是他们似乎是按照语言(uglifyjs,cssmin或者其他所谓的语言)的语言,但是我想要一个不是特定于语言的工具。 另外,我想定义文件是如何绑定的。 例如,在JavaScript中,我想给每个文件自己封闭一个IIFE。 如: (function () { // File }()); 我也可以想到其他包装我想实现不同的文件。 这是我现在看到的选项。 但是,我不知道哪一个是最好的,或者如何开始其中的任何一个。 find一个这样做的模块(我在Node.js环境中工作) 用Mozilla的源图模块创build一个algorithm。 为此,我也看到一些选项。 只将每一行映射到新的行位置 将每个字符映射到新位置 将每个单词映射到新的位置(这个选项似乎超出了范围) 不要担心源地图 你们对这些select有什么看法? 我已经尝试了选项2.1和2.2,但对于级联algorithm来说,解决scheme似乎太复杂了,并且在Google Chrome浏览器工具中没有完美实现。

在sorting时stream式传输大数据

我有大量的数据,因此我不能把它全部放在内存中,而且总是出现内存不足的错误。 显然其中一个解决scheme将使用Node.JS中的stream; 但是stream式传输是不可能的(就我所知),sorting是我应用于数据的function之一。 是否有任何algorithm可能分而治之algorithm,我可以使用stream和sorting的组合(这是我的function之一,我的数据?)

生成20位数字的唯一可逆ID

我想从一个代表数字的string中产生一个新的唯一的20位数的string 例如 : var uid = key.pseudoHash("00000000000000000000"), // "45021-78054-45021-16875" uid = key.pseudoHash("00000000000000000001"), // "15751-40213-97315-65348" .. uid = key.pseudoHash("99999999999999999999"); // "01197-95791-58880-58368" 我怎样才能有这个伪造的function,使不碰撞,可以颠倒?

Javascript – string匹配错误的输出

我使用node.js编码了Boyer-Moore horspoolstring匹配algorithm。 该程序工作,但总是输出-1,这是它应该输出,如果模式string不在指定的文本。 我无法弄清楚什么是不正常的工作,对于我需要解决的问题,我会非常感激。 我的代码 var horsPool = function(sText,sPattern) { var m = sPattern.length; var n = sText.length; var i = m – 1; while(i<=n-1) { var k = 0; while ((k <= m) && (sPattern[m – 1 – k]) == sText[i – k]) { k++; } if(k==m) { return (i – m + 1); […]

查找下一个繁忙时间的免费小时

使用Google Calendar API时,需要: start (epoch时间) end (epoch时间) timeZone (即America/Los_Angeles ) 响应是一个名为busy的数组,其中包含{ start <Date>, end<Date>} 我的目标:findstart和end之间的下一个空闲时间。 有以下限制: 必须在工作日(星期一至星期五) 必须在工作时间(上午9时至下午5时) 这是我试过的: 从上午9点到下午5点,每天手动创build更多busy对象 手动为周六和周日创build更多busy对象 合并所有busy街区,所以不会有交集 现在采取相反的时间,这是free时间。 第一个空闲时间对象( {start <Date>,end <Date>} ),其start – end > = 1 hour 是下一个空闲时间。 如果没有free对象大于1小时,则在start和end之间不存在空闲时间 这个问题听起来太多了,我想听听build议 这是我的代码到目前为止(工作): const moment=require('moment-timezone'); const chrono = require('chrono-node'); const ms = require('ms'); /** * given start and end dates […]

JavaScript代码不按照想要的顺序运行(Node.js,MongoDB)

我知道Node.js的非阻塞I / O和什么是asynchronous函数,但是我很难指出为什么这个代码像运行一样运行。 我连接到一个MongoDB集合,search重复,把第一个值重复自己的数组对象(dupIndex)。 当数组打印时( console.log(dupIndex); ),我看到2个值,但是当我稍后使用.length属性( console.log(dupIndex.length); )时为0。 我想用dupIndex中的数据继续操作集合(就像使用deleteMany方法), 但是如果它显示0,我不能,至less不会这样。 有人可以解释这一点,并帮助我呢? 谢谢! //connect us to a running MongoDB server const {MongoClient, ObjectID} = require('mongodb'); var dataBase = "TodoApp"; //connecting to a database //connects to the database /TodoApp, if no such db exists it auto creates it MongoClient.connect(`mongodb://localhost:27017/${dataBase}`, (err, db)=>{ if(err){ //return or 'else' – […]

在javascript中使用较大的数字查找LCM时出错

目前试图find一个课程使用JS的LCM。 这似乎工作没有问题,但是当我提交它,我得到一个失败的结果input226553150 1023473145 ,并返回46374212988031340当它应该返回46374212988031350感谢您的任何事情,你可以做! var readline = require('readline'); process.stdin.setEncoding('utf8'); var rl = readline.createInterface({ input: process.stdin, terminal: false }); function lcm(a,b) { return((a*b)/gcd(a,b)) } function gcd(a,b) { if(b == 0){ return a; } return gcd(b,(a%b)); } rl.on('line', (line) => { var a = parseInt(line.toString().split(' ')[0]); var b = parseInt(line.toString().split(' ')[1]); console.log(lcm(a,b)); rl.close(); })

如何优化search

给定多个选项,我需要select其中的n个,以使得总评价最大化,但总成本不超过预算。 var options = [ { rating: 8, cost: 6, }, { rating: 5, cost: 4, }, //…100 of these in total ]; function select(n, budget) { //TODO: Replace this code with some real implementation return options.slice(0, 5); } //Sudocode: var result = select(5, 25); Assert(result.length == 5); Assert(sum(result.cost) <= 25); Assert(sum(result.rating) is maximized); 我已经尝试了几个不同的选项,循环内循环的所有变化。 […]

使用node.js进行缓冲audio播放的algorithm/技术

我正在使用node.js从networking播放audiostream,如广播电台或mp3stream。 数据stream如下所示: 广播电台(mp3audio) – >我的node.js脚本 – > lame mp3解码器(node-lame) – > PCM输出到soundcard(节点声音)。 问题是,由于networking延迟,播放有时会中断。 所以我所做的就是将所有数据块缓冲到一个variables中。 一旦variables大小达到(1Mb),我开始从variables而不是直接播放声音。 解决了打破的播放。 我的问题是 – 我可能不需要等到缓冲区大小达到1Mb。 我确定有一个algorithm或一些计算来检测平均networking速度或延迟,并确定不间断播放的最佳缓冲区大小 。 当然,我可以想出一些草率的解决scheme,但我想知道是否有任何algorithm或技术,我想完成什么? 我search了一些关于DSP的帧大小的白皮书,但是来自社区的build议会很棒。

我如何强制node.js做更深的recursion?

我有一个memoizedrecursionalgorithmf(n) 当我运行f(1000)一切正常,它需要不到一分钟的时间运行。 当我运行f(10000)我得到一个范围错误/最大调用堆栈大小超过。 我不相信这个错误与我的algorithm(这是归因于多项式)的效率有什么关系,似乎更像是一个configuration。 我试着做node app.js –stack-size=32000 ,并没有使错误消失。 我以为10X目前的堆栈大小就足够了。 这个堆栈大小是否可能太小,或者是否有办法在节点中强制/设置一个configuration来处理n = 10000情况? 此外, – 堆栈大小选项似乎没有做任何事情…我减less到“1”,我的程序运行速度一样快。