[Home]DojoDeveloppement/Lundi25Janvier2010

AgileFrance | DojoDeveloppement | DernieresNouvelles | Preferences | AideEnLigne

Participants :

Thèmes proposés

Rétrospective de la dernière session

Le code produit ce soir

LagsTests.rb

require 'test/unit'
require 'Lags'

class TestLags<Test::Unit::TestCase

  def _test_recette
    demandes = [Demande.new(0, 5, 10),
                Demande.new(3, 7, 14),
                Demande.new(5, 9, 7),
                Demande.new(6, 9, 8)]
    assert_equal(18, revenu_max(demandes))
  end

  def verifie_premiere_valeur(attendu, demandes)
    mets_a_jour_valeurs!(demandes)
    assert_equal(attendu, demandes.first.valeur)
  end

  def test_une_demande_de_prix_10_a_pour_valeur_10
    verifie_premiere_valeur(10, [Demande.new(0, 5, 10)])
  end

  def test_une_demande_a_pour_valeur_son_prix
    verifie_premiere_valeur(14, [Demande.new(0, 5, 14)])
  end

  def test_deux_demandes_compatibles
    verifie_premiere_valeur(17, [Demande.new(0, 5, 10),
                                 Demande.new(5, 6, 7)])
  end

  def test_deux_demandes_incompatibles
    verifie_premiere_valeur(10, [Demande.new(0, 5, 10),
                                 Demande.new(3, 7, 8)])
  end

  def test_revenu_max_pour_deux_demandes_incompatibles
    assert_equal(10, revenu_max([Demande.new(0, 5, 10),
                                 Demande.new(3, 7, 8)]))
    assert_equal(14, revenu_max([Demande.new(0, 5, 10),
                                 Demande.new(3, 7, 14)]))
  end

  def test_revenu_max_pour_deux_demandes_compatibles
    assert_equal(17, revenu_max([Demande.new(0, 5, 10),
                                 Demande.new(5, 6, 7)]))
  end

  def test_revenu_max_pour_trois_demandes_compatibles
    assert_equal(23, revenu_max([Demande.new(0, 5, 10),
                                 Demande.new(5, 6, 7),
                                 Demande.new(12, 5, 6)]))
  end

  def test_revenu_max_pour_d1_puis_d2_ou_exclusif_d3
    assert_equal(18.101, revenu_max([Demande.new(0, 5, 10.001),
                                     Demande.new(5, 6, 7.010),
                                     Demande.new(5, 6, 8.100)]))
  end
end

Lags.rb

def revenu_max(demandes)
  mets_a_jour_valeurs!(demandes)
  valeurs = demandes.map { |demande| demande.valeur }
  valeurs.max
end

def mets_a_jour_valeurs!(demandes)
  nouvelles_valeurs = demandes.clone
  (demandes.size-1).downto(1) do |i|
    if demandes[i-1].termine_avant(demandes[i])
      demandes[i-1].valeur += demandes[i].valeur 
    end
  end
end

class Demande
  attr_reader :debut
  attr_accessor :valeur
  def initialize(debut, duree, prix)
    @valeur = prix
    @debut = debut
    @duree = duree
  end

  def termine_avant(autre)
    @debut + @duree <= autre.debut
  end
end



AgileFrance | DojoDeveloppement | DernieresNouvelles | Preferences | AideEnLigne
Edit this page | View other revisions
Last edited January 26, 2010 5:40 pm (diff)
Search: