[Home]DojoDeveloppement/Lundi11Janvier2010

AgileFrance | DojoDeveloppement | DernieresNouvelles | Preferences | AideEnLigne

Participants :

Thème possible :

Rétrospective de la dernière session

Jeu de la bataille en haskell en randori


Le code produit ce soir
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


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