Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 任何实体的票价计算器_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 任何实体的票价计算器

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

我正在创建一个订票价格计算器

有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)..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
不会出现在您的代码中。