Ruby on rails 任何实体的票价计算器
我正在创建一个订票价格计算器 有28个公交车站 基本价格为Ruby on rails 任何实体的票价计算器,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在创建一个订票价格计算器 有28个公交车站 基本价格为100至5公交车站 以后每5个公共汽车站加收50 从1到28的单程行程为300 这是我的解决方案 BASE = 100 stops = (start - end).abs case stops when 1..5 BASE when 5..10 BASE + 5 when 10..15 BASE + 10 when 15..16 BASE + 15 when (station_array.length - 1)..sta
100
至5
公交车站
以后每5个公共汽车站加收50
从1到28的单程行程为300
这是我的解决方案
BASE = 100
stops = (start - end).abs
case stops
when 1..5
BASE
when 5..10
BASE + 5
when 10..15
BASE + 10
when 15..16
BASE + 15
when (station_array.length - 1)..station_array.length
200
end
我正在寻找一个良好的优化和可扩展的解决方案。
假设我们添加了新的车站,票价逻辑应该需要最小的变化。在我看来,我们可以在这种情况下使用哈希
BASE = 100
stops = (start - end).abs
price_for = {(1..5) => BASE,(6..10) => BASE+5,(11..15) => BASE+10 ..... }
eg: price_for[(1..5)] o/p => 100
像上面的场景一样,我们可以轻松地添加新票价,并将其作为对象发送。您应该能够通过基本的数学计算来完成这一点,这可以作为一个示例供您构建
以后每5个公交车站加收50英镑
这有点不清楚,额外的票价是在5个额外车站后计算的,还是已经在第一个额外车站计算的
e、 是吗
A: 6 stations = BASE_FARE + EXTRA_FARE
# or...
B: 6 stations = BASE_FARE only
如果您只想计算5个车站后的额外票价,您可以删除ceil
方法,我在这里的做法是额外车站1-4已经添加了额外票价
至于往返行程,您只需添加一个额外的检查,查看站点是否=总站点
TOTAL_STATIONS=500
往返票价=300#或其他
基准价格=100
基站=5
额外价格=50
附加站=5
def calc_价格(站点)
如果车站=总车站,则返回往返票价
总价=基准价
#减去5个基站
基站-=基站
#每5个站点增加50个
#to_f用于浮点数除法
#ceil用于取整,例如3/5=>1
总价格+=(站点/额外站点。至f)。ceil*额外价格
总价
结束
请注意,这没有经过彻底的测试,这是发布给您的,供您构建。2000个电台的规则是什么?是否每5个站点总是+5?您提到了“以后50额外”,但不清楚何时/何地适用,因为50
不会出现在您的代码中。