Tag: 算法

给定日期,我如何有效地计算给定序列中的下一个日期(每周,每月,每年)?

在我的应用程序中,我有各种日期序列,例如每周,每月和每年。 鉴于过去的任意日期,我需要计算序列中的下一个未来日期。 目前我正在使用次优循环。 这是一个简化的例子(在Ruby / Rails中): def calculate_next_date(from_date) next_date = from_date while next_date < Date.today next_date += 1.week # (or 1.month) end next_date end 而不是执行循环(虽然简单,但效率低,特别是在远处过去的日期)我想通过计算两个日期之间的周数(或月,年)来进行日期算术,计算余数并使用这些值生成下一个日期。 这是正确的方法,还是我错过了一种特别聪明的“Ruby”解决方法? 或者我应该坚持我的循环以简化这一切?

是否有算法从数组中提取二重唱中的值并对其进行操作?

我有一个像: [1,2,3,4,5,6,7,8,9] 我希望得到像这样的二重奏中的物品: 1,2 做一些操作…… 2,3 做一些操作…… 3,4 做一些操作…… 4,5 做一些操作…… 5,6 做一些操作…… 6,7 做一些操作…… 7,8 做一些操作…… 8,9 做一些操作…… 请使用Ruby建议一种优雅的方法来实现这一目标。

在arrays中找到2个缺失数字的最快方法

这个问题的存在只是因为纯粹的好奇心。 不是作业。 找到在数组1..n中找到两个缺失数字的最快方法 所以,在一篇相关的文章中: 在一组数字中找到缺失数字的最快方法我发现你可以通过总结和减去总数来快速完成这项工作。 但是2个数字怎么样? 所以,我们的选择是: 顺序搜索 总结项目,从1..n中的所有项目中减去总数,然后搜索所有可能的案例。 还要别的吗? 可能有O(n)解决方案吗? 我在其中一个网站的ruby部分找到了这个,但是考虑了任何语言(除非语言有一些特定的东西)

查找涉及STI和父子关系的“重复”记录的解决方案

我有一个名为Buyable的基于STI的模型,有两个模型Basket和Item。 这里可购买的关注属性是: shop_week_id LOCATION_ID PARENT_ID 篮子和物品之间有亲子关系。 对于篮子,parent_id总是为零,但是通过引用唯一的篮子ID,项目可以属于篮子。 因此,篮子有很多物品,而物品属于一个篮子。 我需要一个篮子模型的方法: 如果表中有任何其他具有相同数量和类型的项目的篮子,则返回true。 当项目共享相同的shop_week_id和location_id时,它们被认为是相同的类型。 例如: 给出一个篮子(uid = 7)有2个项目: 项目#1 id = 3 shop_week_id = 13 location_id = 103 parent_id = 7 项目#2 id = 4 shop_week_id = 13 location_id = 204 parent_id = 7 如果表中有任何其他篮子包含正好2个项目,则返回true,其中一个项目具有shop_week_id = 13且location_id = 103,另一个项目具有shop_week_id = 13和location_id = 204.否则返回false。 你会怎么解决这个问题? 这是不言而喻的,但我正在寻找一个非常有效的解决方案。

随机项目的重量

例如,我有这些数据: headings = { :heading1 => { :weight => 60, :show_count => 0} :heading2 => { :weight => 10, :show_count => 0} :heading3 => { :weight => 20, :show_count => 0} :heading4 => { :weight => 10, :show_count => 0} } total_views = 0 现在我想根据他们的体重为每个标题服务。 例如,对于前10个请求/迭代, heading1 , heading3 , heading2和heading4将按顺序(按重量)分别提供heading4和1次。 对于每次迭代,服务标题的show_count将递增1,total_views也将全局递增。 你能建议一个算法或一些ruby代码来处理这个问题。

根据规则计算价格(Ruby Rule Engine)

有几个规则引擎,如Treetop或Wongi :: Engine,但似乎没有一个适合我的个人资料。 我想建立一个灵活的系统,可以计算价格。 例如: 底座价格为100欧元 产品规则: Rule_#0雪橇的费用为100欧元 时间规则: Rule_#1你在23:00之后买了雪橇H =>你得到10€的折扣 日期规则: Rule_#2你在圣诞节买了雪橇=>你得到10%的折扣(10€) 用户规则: Rule_#3你的名字是圣诞老人=>你得到2欧元的折扣 规则也可以组合(排除/包括): =>最终价格是100-10-10-2 = 78

找到m和n之间的所有整数,其平方除数之和本身就是一个平方

问题问题 42的除数是:1,2,3,6,7,14,21,42。这些除数的平方是:1,4,9,36,49,196,441,1764。平方除数的总和是2500这是50 * 50,一个正方形! 给定两个整数m,n(1 <= m <= n)我们想要找到m和n之间的所有整数,其平方除数之和本身就是一个平方。 42是这样的数字。 结果将是一个数组数组,每个子数组有两个元素,首先是平方除数为正方形的数字,然后是平方除数的总和。 代码如下 如何让这个特定的程序运行得更快? 我的当前代码在n> 9999之后超时。 #returns the divisors of each number in an array of arrays r = (m..n).to_a.map { |z| (1..z).select { |x| z % x == 0} } #this finds all integers between m and n whose sum of squared divisors is itself […]

ruby如何生成树形结构表单数组?

我有一个数组,其中包含这样的项目列表 arr = [ {:id=>1, :title=>”A”, :parent_id=>nil}, {:id=>2, :title=>”B”, :parent_id=>nil}, {:id=>3, :title=>”A1″, :parent_id=>1}, {:id=>4, :title=>”A2″, :parent_id=>1}, {:id=>5, :title=>”A11″, :parent_id=>3}, {:id=>6, :title=>”12″, :parent_id=>3}, {:id=>7, :title=>”A2=121″, :parent_id=>6}, {:id=>8, :title=>”A21″, :parent_id=>4}, {:id=>9, :title=>”B11″, :parent_id=>2}, {:id=>10, :title=>”B12″, :parent_id=>2}, … ] 如果parent_id为nil那么它应该是父节点,如果parent_id不是nil则它应该在特定父节点下。 基于id和parent_id ,我想提供这样的响应: -A -A1 -A11 -A12 -A123 -A2 -A21 -B -B1 -B11 -B12 我怎么能产生上面提到的回应? 谢谢

使用Ruby on Rails进行时间可用性比较

我希望有一个多个对象的可用性表,并进行比较。 例如,承租人将搜索租赁单位,该单位在星期一下午1-3点开始提供。 为了做到这一点,我想我会把这周分成30分钟的时间段并给每个时段一个ID。 然后日期范围将搜索相应的时隙ID。 然而,那时我需要5040条记录来跟踪每个时间段,而且我对于手动维护它并不太兴奋(在Ruby中我不知道如何去做)。 是否有一个更优雅的方法,通过使用日期时间,或一些Rails插件,将执行类似于我想要的东西,但更容易? 关键要求是它必须比较多个分开的时间块。 编辑:如果可以有一种比较多个时间块来查看最佳匹配的方法,那将是一个奖励。 例如,如果我想在星期一,星期三和星期五租用摄像机,并且一天有一台摄像机可用,而另一台摄像机只有两天可用,我希望能够对摄像机进行比较和排序。最佳匹配的基础。

以文本/ ASCIIforms渲染水平二进制树的算法

这是一个非常普通的二叉树,除了其中一个节点可能是空的。 我想找到一种以水平方式输出它的方法(也就是说,根节点在左边并向右扩展)。 我有一些垂直扩展树木的经验(根节点在顶部,向下扩展),但在这种情况下,我不知道从哪里开始。 最好是遵循以下几条规则: 如果一个节点只有一个子节点,则可以将其作为冗余跳过(始终显示“终端节点”,没有子节点) 相同深度的所有节点必须垂直对齐; 所有节点必须位于所有较低深度节点的右侧,并且位于所有较深节点的左侧。 节点具有包含其深度的字符串表示。 每个“端节点”都有自己独特的线路; 也就是说,行数是树中终端节点的数量,当终端节点在一条线上时,在该终端节点之后该行上可能没有其他内容。 作为最后一条规则的结果,根节点在左上角或左下角可能会更好; 左上角是首选。 例如,这是一个有效的树,有六个端节点(节点由一个名称及其深度表示): 编辑:请参阅问题的底部以获得替代,更容易渲染 [A0] ———– [B3] —— [C5] —— [D8] \ —- \ ——- [e9] —- [f5] \ – [G1] ——– [H4] —— [I6] \ ——————– [j10] \ – [K3] 它代表垂直的显式二叉树: 0 a / \ 1克* / \ \ 2 * * * / […]