DojoDeveloppement/Lundi11Janvier2010Thème possible :
Rétrospective de la dernière session
Jeu de la bataille en haskell en randori
require 'test/unit'
require 'lags'
class LagsTest < Test::Unit::TestCase
def test_aucune_demande_alors_chiffre_affaire_est_nul
assert_equal(0, chiffre_affaire([]))
end
def test_une_demande_alors_chiffre_egale_prix_demande
demande = Demande.new(0,5,10)
assert_equal(10, chiffre_affaire([demande]))
demande = Demande.new(0,5,1)
assert_equal(1, chiffre_affaire([demande]))
end
def test_deux_demandes_incompatibles_on_retient_la_meilleure
demande1 = Demande.new(0, 5, 5)
demande2 = Demande.new(0, 5, 6)
assert_equal(6, chiffre_affaire([demande1, demande2]))
end
def test_trois_demandes_incompatibles_on_retient_la_meilleure
demande1 = Demande.new(0, 5, 5)
demande2 = Demande.new(0, 5, 10)
demande3 = Demande.new(0, 6, 4)
assert_equal(10, chiffre_affaire([demande1, demande2, demande3]))
end
def test_deux_demandes_compatibles
demande1 = Demande.new 0, 5, 2
demande2 = Demande.new 6, 8, 3
assert_equal 5, chiffre_affaire([demande1, demande2])
assert_equal 6, chiffre_affaire([demande1, Demande.new(6, 7, 4)])
end
end
def chiffre_affaire demandes
return 0 if demandes.empty?
tous_les_prix = (combinaisons_compatibles demandes).map {|d| d.prix}
tous_les_prix.max
end
def compatibles d1,d2
d2.debut > d1.end
end
def combinaisons_compatibles demandes
if compatibles demandes.first, demandes.last
[[demandes.first, demandes.last]]
else
demandes
end
end
class Array
def prix
return inject(0) {|acc, val| acc+val.prix}
end
end
class Demande
attr_reader :prix, :debut, :end
def initialize(debut, duree, prix)
@prix = prix
@debut = debut
@end = debut + duree
end
end