-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathschedacarburante.rb
48 lines (40 loc) · 1.41 KB
/
schedacarburante.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
require 'sinatra'
get '/' do
erb :home
end
get '/scheda' do
scheda = Scheda.new(params[:scheda])
scheda.calculate
erb :scheda, :locals => { :scheda => scheda }
end
class Scheda
attr_accessor :km_iniziali, :km_percorsi, :numero_rifornimenti, :rifornimenti, :media_km, :tolleranza, :totale
def initialize(params = {})
@prezzo_benzina = 160
@tolleranza = 0.1
@consumo = params[:consumo].to_f
@km_iniziali = params[:km_iniziali].to_f
@km_attuali = params[:km_attuali].to_f
@km_percorsi = @km_attuali - @km_iniziali
@numero_rifornimenti = params[:numero_rifornimenti].to_i
@media_km = (@km_percorsi/@numero_rifornimenti).to_f
@rifornimenti = []
@totale = 0
end
def calculate
km_totali = @km_iniziali
@numero_rifornimenti.times do
@rifornimenti << genera_rifornimento(km_totali)
km_totali+= @rifornimenti.last[:km]
@totale += @rifornimenti.last[:prezzo]
end
end
def genera_rifornimento(km_totali)
prezzo_benzina = ((@prezzo_benzina)..(@prezzo_benzina+(@prezzo_benzina*@tolleranza))).to_a.sample/100.0
rifornimento = {}
rifornimento[:km] = (((@media_km - @media_km*@tolleranza).to_i..(@media_km + @media_km*@tolleranza).to_i).to_a.sample)
rifornimento[:km_totali] = (km_totali+rifornimento[:km]).to_i
rifornimento[:prezzo] = ((rifornimento[:km]/@consumo) * prezzo_benzina + 0.5).to_i
return rifornimento
end
end