diff --git a/elm-stuff/0.19.1/Main.elmi b/elm-stuff/0.19.1/Main.elmi new file mode 100644 index 0000000..1af9b16 Binary files /dev/null and b/elm-stuff/0.19.1/Main.elmi differ diff --git a/elm-stuff/0.19.1/Main.elmo b/elm-stuff/0.19.1/Main.elmo new file mode 100644 index 0000000..1fc7943 Binary files /dev/null and b/elm-stuff/0.19.1/Main.elmo differ diff --git a/elm-stuff/0.19.1/QCM.elmi b/elm-stuff/0.19.1/QCM.elmi new file mode 100644 index 0000000..cfc1781 Binary files /dev/null and b/elm-stuff/0.19.1/QCM.elmi differ diff --git a/elm-stuff/0.19.1/QCM.elmo b/elm-stuff/0.19.1/QCM.elmo new file mode 100644 index 0000000..027b78e Binary files /dev/null and b/elm-stuff/0.19.1/QCM.elmo differ diff --git a/elm-stuff/0.19.1/QCMbis.elmi b/elm-stuff/0.19.1/QCMbis.elmi new file mode 100644 index 0000000..41e2aea Binary files /dev/null and b/elm-stuff/0.19.1/QCMbis.elmi differ diff --git a/elm-stuff/0.19.1/QCMbis.elmo b/elm-stuff/0.19.1/QCMbis.elmo new file mode 100644 index 0000000..e046c0a Binary files /dev/null and b/elm-stuff/0.19.1/QCMbis.elmo differ diff --git a/elm-stuff/0.19.1/d.dat b/elm-stuff/0.19.1/d.dat new file mode 100644 index 0000000..29f9b58 Binary files /dev/null and b/elm-stuff/0.19.1/d.dat differ diff --git a/elm-stuff/0.19.1/i.dat b/elm-stuff/0.19.1/i.dat new file mode 100644 index 0000000..f94a490 Binary files /dev/null and b/elm-stuff/0.19.1/i.dat differ diff --git a/elm-stuff/0.19.1/lock b/elm-stuff/0.19.1/lock new file mode 100644 index 0000000..e69de29 diff --git a/elm-stuff/0.19.1/o.dat b/elm-stuff/0.19.1/o.dat new file mode 100644 index 0000000..5e931e4 Binary files /dev/null and b/elm-stuff/0.19.1/o.dat differ diff --git a/elm.json b/elm.json new file mode 100644 index 0000000..70e6ec9 --- /dev/null +++ b/elm.json @@ -0,0 +1,25 @@ +{ + "type": "application", + "source-directories": [ + "src" + ], + "elm-version": "0.19.1", + "dependencies": { + "direct": { + "elm/browser": "1.0.2", + "elm/core": "1.0.5", + "elm/html": "1.0.0", + "elm/parser": "1.1.0" + }, + "indirect": { + "elm/json": "1.1.3", + "elm/time": "1.0.0", + "elm/url": "1.0.0", + "elm/virtual-dom": "1.0.2" + } + }, + "test-dependencies": { + "direct": {}, + "indirect": {} + } +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..ba8a4dc --- /dev/null +++ b/index.html @@ -0,0 +1,5265 @@ + + + + + Main + + + + + +

+
+
+
+
+
\ No newline at end of file
diff --git a/src/Main.elm b/src/Main.elm
new file mode 100644
index 0000000..90045ac
--- /dev/null
+++ b/src/Main.elm
@@ -0,0 +1,64 @@
+module Main exposing (..)
+
+-- Press buttons to increment and decrement a counter.
+--
+-- Read how it works:
+--   https://guide.elm-lang.org/architecture/buttons.html
+--
+
+
+import Browser
+import Html exposing (Html, button, div, text)
+import Html.Events exposing (onClick)
+
+
+
+-- MAIN
+
+
+main =
+  Browser.sandbox { init = init, update = update, view = view }
+
+
+
+-- MODEL
+
+
+type alias Model = Int
+
+
+init : Model
+init =
+  0
+
+
+
+-- UPDATE
+
+
+type Msg
+  = Increment
+  | Decrement
+
+
+update : Msg -> Model -> Model
+update msg model =
+  case msg of
+    Increment ->
+      model + 1
+
+    Decrement ->
+      model - 1
+
+
+
+-- VIEW
+
+
+view : Model -> Html Msg
+view model =
+  div []
+    [ button [ onClick Decrement ] [ text "-" ]
+    , div [] [ text (String.fromInt model) ]
+    , button [ onClick Increment ] [ text "+" ]
+    ]
\ No newline at end of file
diff --git a/src/QCM.elm b/src/QCM.elm
new file mode 100644
index 0000000..185fab2
--- /dev/null
+++ b/src/QCM.elm
@@ -0,0 +1,702 @@
+module QCM exposing (..)
+
+import Browser
+import Parser as P exposing (Parser, (|.), (|=), succeed, symbol, float, spaces)
+import List as L
+import String as S
+import Html exposing (Html, Attribute, button, div, input, text, p)
+import Html.Attributes exposing (..)
+import Html.Events exposing (onInput, onClick)
+
+{-
+        ███    ███  █████  ██ ███    ██ 
+        ████  ████ ██   ██ ██ ████   ██ 
+        ██ ████ ██ ███████ ██ ██ ██  ██ 
+        ██  ██  ██ ██   ██ ██ ██  ██ ██ 
+        ██      ██ ██   ██ ██ ██   ████ 
+-}
+
+main =
+  Browser.sandbox { init = init, update = update, view = view }
+
+
+{-
+        ███    ███  ██████  ██████  ███████ ██      
+        ████  ████ ██    ██ ██   ██ ██      ██      
+        ██ ████ ██ ██    ██ ██   ██ █████   ██      
+        ██  ██  ██ ██    ██ ██   ██ ██      ██      
+        ██      ██  ██████  ██████  ███████ ███████ 
+-}
+
+type alias Model =
+  { question : String
+  , questions : List String
+  }
+
+
+init : Model
+init =
+  { question = ""
+  , questions = [ "" ]
+  }
+
+
+{-
+        ██    ██ ██████  ██████   █████  ████████ ███████ 
+        ██    ██ ██   ██ ██   ██ ██   ██    ██    ██      
+        ██    ██ ██████  ██   ██ ███████    ██    █████   
+        ██    ██ ██      ██   ██ ██   ██    ██    ██      
+         ██████  ██      ██████  ██   ██    ██    ███████ 
+-}
+
+type Msg
+  = Question String
+  | GenererQuestion
+
+update : Msg -> Model -> Model
+update msg model =
+  case msg of
+    Question nouvelleQuestion ->
+      { model | question = nouvelleQuestion }
+    GenererQuestion ->
+      { model | questions = [
+        case P.run questions model.question of
+          Ok macro -> voirMacro macro
+          Err _ -> "Y a un truc qui cloche !"
+      ] }
+
+
+{-
+
+        ██    ██ ██ ███████ ██     ██ 
+        ██    ██ ██ ██      ██     ██ 
+        ██    ██ ██ █████   ██  █  ██ 
+         ██  ██  ██ ██      ██ ███ ██ 
+          ████   ██ ███████  ███ ███  
+-}
+
+view : Model -> Html Msg
+view model =
+  div []
+    <| input [ placeholder "Format de la question", value model.question, onInput Question ] []
+    :: button [ onClick GenererQuestion ] [ text "Générer les questions" ]
+    :: ( p [] <| L.map text model.questions )
+
+    {-
+    , [ dl05 [0, 4, 2] 5 ]
+    , [ text ( poly [0, 0, 7, -3, 0 , 2, 1 , -1 , 3 , 1, 1, 1, 5] ) ]
+    , [ primitLn01 [-5,-6] ]
+    , [ primitPoly01 [2,-5,1,7] ] -- J'ai oublié de les générer !!!!!!!
+    , [ equaDiff01 -5 ]
+    , [ equaDiff02 [4, -5] ]
+    , [ equaDiff03 [4, -5] ]
+    , [ derivPoly01 [4, -5, 3, 5, 13] ]
+    , [ derivPoly02 [-3, -4, 2, 7, -13] ]
+    , [ dl01 [-5, -2, 2, -1] ]
+    , [ dl02 [-5, 0, -2, -1] ]
+    , [ dl03 [0, -8, 0, 7] ]
+    , [ dl04 [-1, 2, 0, -3] ]
+    , List.map equaDiff01 <| List.range -99 -2 -- 98 possibilités OK
+    , List.map equaDiff02 ( mix [ [3,5,9,11,13,17,27,15,25,27], [-2,-4,-7,-8,-14,-16,-19,-23,-28,-29] ] )  -- 100 possibilités OK
+    , List.map equaDiff03 ( mix [ [3,5,9,11,13,17,27,15,25,27], [-2,-4,-7,-8,-14,-16,-19,-23,-28,-29] ] )  -- 100 possibilités OK
+      -- Pourries par un List.range -2 1 ++ List.range 1 2 qui passe à 900 et 768 possibilités dans evalbox, dont répétitions
+    , List.map derivPoly01 ( mix [ [2,4,6], List.range -6 -2, List.range 2 6, List.range -2 -1 ++ List.range 1 2, List.range 11 12 ] )  -- 600 possibilités
+    , List.map derivPoly02 ( mix [ [-9,-7,-5,-3], [-8,-6,-4,-2], [2,4,6,8], List.range -2 -1 ++ List.range 1 2, List.range -12 -11 ] )  -- 512 possibilités
+    , List.map primitLn01 ( mix [ List.range -9 -2 ++ List.range 2 9, List.range -9 -2 ++ List.range 2 9 ] )  -- 256 possibilités OK
+    , List.map dl01 ( mix [ [-5,-3,-1,1,3,5], [-6,-4,-2,2,4,6], [1,2,3], [-3,-2,-1,1,2,3] ] )  -- 648 possibilités OK
+    , List.map dl02 ( mix [ [-5,-4,-3,-2,-1,1,2,3,4,5], [0], [-1,-2,-3,-4,-5], [-3,-2,-1,1,2,3] ] )  -- 300 possibilités (toutes les questions en double because import pourri)
+    , List.map dl03 ( mix [ [0], [-9,-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8,9], [0], [1,2,3,4,5,6,7,8,9] ] )  -- 162 possibilités OK
+    , List.map dl04 ( mix [ [-5,-3,-1,1,3,5], [-6,-4,-2,2,4,6], [0], [-9,-8,-7,-6,-5,-4,-3,-2,-1] ] )  --324 possibilités Ok
+    , List.concat <| List.map ( mapTwist [3,5,9] ) ( List.map dl05 ( mix [ [0], [2,4,7,8,11,13,16,17], [2,4,7,8,11,13,16,17] ] ) )  -- 192 possibilités OK
+    , d3 -- 512 possibilités OK
+    -}
+    :: ( List.map primitPoly01 <| mix [ List.range -3 -2 ++ List.range 2 3, List.range -3 -2 ++ List.range 2 3, List.range -3 -2 ++ List.range 2 3, List.range -3 -2 ++ List.range 2 3 ] ) -- 256 possibilités OK
+
+
+{-
+        ██████   █████  ██████  ███████ ███████ ██████  
+        ██   ██ ██   ██ ██   ██ ██      ██      ██   ██ 
+        ██████  ███████ ██████  ███████ █████   ██████  
+        ██      ██   ██ ██   ██      ██ ██      ██   ██ 
+        ██      ██   ██ ██   ██ ███████ ███████ ██   ██ 
+-}
+
+type TexteVariable
+  = Texte String
+  | Variable String
+
+type alias Macro
+  = List TexteVariable
+
+voirMacro macro
+  = S.concat <| L.map voirTexteVariable macro
+
+voirTexteVariable txtvar
+  = case txtvar of
+    Texte txt -> txt
+    Variable var -> var
+
+questionOld : Parser Macro
+questionOld =
+    succeed (\x -> x :: [])
+    |= P.oneOf [ expressionVariable , texteSansVariables ]
+    {--
+    |= succeed Texte
+      |= (
+        P.getChompedString
+        <| succeed ()
+        |. P.chompUntilEndOr "\n"
+      )
+    --}
+
+texteSansVariables : Parser TexteVariable
+texteSansVariables
+  = succeed Texte
+  |= P.getChompedString (
+    succeed ()
+    |. P.chompIf ( (/=) '#' )
+    |. P.chompWhile ( (/=) '#' )
+  )
+
+expressionVariable : Parser TexteVariable
+expressionVariable
+  = succeed Variable
+  |. symbol "#("
+  |= (P.getChompedString <|
+    succeed ()
+    |. P.chompUntil "#")
+
+{--
+testDeChomp
+  = succeed ( (::) )
+    (
+      P.getChompedString
+      <| succeed ()
+      |. P.chompUntil "truc"
+    )
+    |= P.int
+--}
+
+parserBis : Parser Macro
+parserBis
+  = succeed (\x y-> Texte x :: y :: [])
+  |= P.getChompedString ( P.chompWhile ( (/=) '#' ) )
+  |= P.oneOf [ expressionVariable , texteSansVariables ]
+  --|= question
+
+questions : Parser Macro
+questions =
+  P.loop [] questionsBis
+
+questionsBis : Macro -> Parser (P.Step Macro Macro)
+questionsBis ls =
+  P.oneOf
+    [ succeed (\l -> P.Loop (l :: ls))
+        |= P.oneOf [ expressionVariable , texteSansVariables ]
+    , succeed ()
+        |> P.map (\_ -> P.Done (List.reverse ls))
+    ]
+
+
+
+
+
+
+
+
+
+
+type Expr num
+  = Const num
+  | Var String
+  | Poly ( List num )
+  | Exp ( Expr num )
+  | Ln ( Expr num )
+  | Sin ( Expr num )
+  | Cos ( Expr num )
+  | Prod ( Expr num ) ( Expr num )
+  | Quot ( Expr num ) ( Expr num )
+  | Sum ( Expr num ) ( Expr num )
+  | Diff ( Expr num ) ( Expr num )
+  | Power ( Expr num ) num
+
+
+mathTeX a = "$" ++ a ++ "$"
+
+fonction a = "x\\mapsto " ++ a
+
+affineExp a b c
+  = if (a,b) == (0,0) then "0"
+    else if (a,c) == (0,1) then String.fromInt b ++ "e^x"
+    else if a == 0 then String.fromInt b ++ "e^{" ++ (String.fromInt c) ++ "x}"
+    else if (a,b,c) == (1,0,1) then "xe^x"
+    else if (b,c) == (0,1) then (String.fromInt a) ++ "x" ++ "e^x"
+    else if b == 0 then (String.fromInt a) ++ "x" ++ "e^{" ++ (String.fromInt c) ++ "x}"
+    else if c == 1 then "\\left(" ++ (String.fromInt a) ++ "x+" ++ (String.fromInt b) ++ "\\right)e^x"
+    else "\\left(" ++ (String.fromInt a) ++ "x+" ++ (String.fromInt b) ++ "\\right)e^{" ++ (String.fromInt c) ++ "x}"
+
+derivExp01 a b c =
+  let
+    f aa bb cc = mathTeX ( fonction ( affineExp aa bb cc ) )
+    vr aa bb cc = p [] [ text ( "+" ++ ( f aa bb cc) ) ]
+    fx aa bb cc = p [] [ text ( "-" ++ ( f aa bb cc) ) ]
+  in
+  div []
+    [ p [] [ text ("Donner la dérivée de la fonction " ++ f a b c) ]
+    , vr (a*c) (a+b*c) c
+    , fx (a+b) a c
+    , fx (a+b) a c
+    , fx (a+b*c) (a*c) c
+    , fx (a-b*c) (a*c) c
+    , fx (a-b*c) (a*c) c
+    , fx a 0 c
+    , fx (a*c) 0 c
+    , fx a 0 1
+    , fx (a*c) 0 1
+    {--
+    , p [] [ text ("----") ]
+    , p [] [ text ("Avant toute chose, il faut bien voir que $\\left(" ++ (String.fromInt a) ++ "x+" ++ (String.fromInt b) ++ "\\right)e^{" ++ (String.fromInt c) ++ "x}$ est de la forme $uv$ avec $u=ax+b$ et $v=e^{cx}$.") ],
+    , p [] [ text ("Ensuite, il faut savoir que la dérivée de $uv$ est donnée par $u'v+uv'$, et que la dérivée de $e^{u}$ est donnée par $e^{u}\\cdot u'$, ce qui dans notre cas nous donne que la dérivée de $e^{" ++ (String.fromInt c) ++ "x}$ est donnée par $" ++ (String.fromInt c) ++ "e^{" ++ (String.fromInt c) ++ "x}$.") ]
+    , p [] [ text ("Nous avons donc que la dérivée de la fonction est :") ]
+    , p [] [ text ("$\\begin{array}{rl} x\\mapsto & " ++ (String.fromInt (a)) ++ "e^{" ++ (String.fromInt c) ++ "x}+\\left(" ++ (String.fromInt (a)) ++ "x+" ++ (String.fromInt (b)) ++ "\\right)ce^{" ++ (String.fromInt (c)) ++ "x}\\\\& =" ++ (String.fromInt (a)) ++ "e^{" ++ (String.fromInt (c)) ++ "x}+\\left(" ++ (String.fromInt (a*c)) ++ "x+" ++ (String.fromInt (b*c)) ++ "\\right)e^{" ++ (String.fromInt (c)) ++ "x}\\\\ & =\\left(" ++ (String.fromInt (a)) ++ "+" ++ (String.fromInt (a*c)) ++ "x+" ++ (String.fromInt (b*c)) ++ "\\right)e^{" ++ (String.fromInt (c)) ++ "x}\\\\ & =\\left(" ++ (String.fromInt (a+b*c)) ++ "+" ++ (String.fromInt (a*c)) ++ "x\\right)e^{" ++ (String.fromInt (c)) ++ "x} \\end{array}$") ]
+    --}
+    , p [] [ text ("==== Dérivées, Exponentielle, derivExp01") ]
+    ]
+
+
+
+-- Des DL
+
+monome a n =
+  if a == 0 then ""
+  else if n == 0 then ( String.fromInt a )
+  else if (n,a) == (1,1) then "x"
+  else if (n,a) == (1,-1) then "-x"
+  else if n == 1 then ( String.fromInt a ) ++ "x"
+  else if a == 1 then "x^{" ++ ( String.fromInt n ) ++ "}"
+  else if a == -1 then "-x^{" ++ ( String.fromInt n ) ++ "}"
+  else ( String.fromInt a ) ++ "x^{" ++ ( String.fromInt n ) ++ "}"
+
+poly a_ks =
+  if a_ks == [] then "0"
+  else polyBis a_ks ( List.length a_ks - 1 )
+
+polyBis a_ks n =
+  case a_ks of
+    [] -> ""
+    a_n :: a_kss ->
+      if a_n == 0 then polyBis a_kss ( n - 1 )
+      else ( monome a_n n ) ++ ( polyGen a_kss ( n - 1 ) )
+
+polyGen a_ks n =
+  case a_ks of
+    [] -> ""
+    a_i :: a_is ->
+      if a_i <= 0 then ( monome a_i n ) ++ ( polyGen a_is ( n - 1 ) )
+      else "+" ++ ( monome a_i n ) ++ ( polyGen a_is ( n - 1 ) )
+
+dl a_ks =
+  if a_ks == [] then "0"
+  else dlBis a_ks 0
+
+dlBis a_ks n =
+  case a_ks of
+    [] -> ""
+    premierCoef :: suite ->
+      if premierCoef == 0 then dlBis suite ( n + 1 )
+      else ( monome premierCoef n ) ++ ( dlGen suite ( n + 1 ) )
+
+dlGen a_ks n =
+  case a_ks of
+    [] -> ""
+    a_i :: a_is ->
+      if a_i <= 0 then ( monome a_i n ) ++ ( dlGen a_is ( n + 1 ) )
+      else "+" ++ ( monome a_i n ) ++ ( dlGen a_is ( n + 1 ) )
+
+dl01 a_k =
+  let
+    vr texte = p [] [ text ( "+" ++ texte ) ]
+    fx texte = p [] [ text ( "-" ++ texte ) ]
+  in
+  div []
+    [ p [] [ text ( "On considère une fonction $f$ dont le développement limité à l'ordre 3 au voisinage de $0$ est " ++ mathTeX ( dl a_k ) ++ "." ) ]
+    , p [] [ text ( "On note $C$ la courbe représentative de $f$ et $T_0$ sa tangente en son point d'abscisse $0$." ) ]
+    , p [] [ text ( "Cocher la ou les réponses correctes." ) ]
+    , vr <| "L'équation de $T_0$ est $y=" ++ poly ( List.reverse <| List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $y=" ++ poly ( List.take 2 a_k ) ++"$" -- ATTENTION à éviter les cas où a_0 = a_1
+    , fx <| "L'équation de $T_0$ est $" ++ poly ( List.reverse <| List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $f\\left(x\\right)\\approx" ++ poly ( List.reverse <| List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $f\\left(x\\right)\\approx" ++ poly ( List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $" ++ poly ( List.take 2 a_k ) ++"$"
+    , vr "$C$ est au-dessus de $T_0$."
+    , fx "$C$ est au-dessous de $T_0$."
+    , fx "$C$ est au-dessous puis au-dessus de $T_0$."
+    , fx "$C$ est au-dessus puis au-dessous de $T_0$."
+    {--
+    , p [] [ text ("----") ]
+    --}
+    , p [] [ text ("==== Développements limités, Tangentes, dl01") ]
+    ]
+
+
+dl02 a_k =
+  let
+    vr texte = p [] [ text ( "+" ++ texte ) ]
+    fx texte = p [] [ text ( "-" ++ texte ) ]
+  in
+  div []
+    [ p [] [ text ( "On considère une fonction $f$ dont le développement limité à l'ordre 3 au voisinage de $0$ est " ++ mathTeX ( dl a_k ) ++ "." ) ]
+    , p [] [ text ( "On note $C$ la courbe représentative de $f$ et $T_0$ sa tangente en son point d'abscisse $0$." ) ]
+    , p [] [ text ( "Cocher la ou les réponses correctes." ) ]
+    , vr <| "L'équation de $T_0$ est $y=" ++ poly ( List.reverse <| List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $y=" ++ poly ( List.reverse <| List.take 3 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $y=" ++ poly ( List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $" ++ poly ( List.reverse <| List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $f\\left(x\\right)\\approx" ++ poly ( List.reverse <| List.take 3 a_k ) ++"x$"
+    , fx <| "L'équation de $T_0$ est $f\\left(x\\right)\\approx" ++ poly ( List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $" ++ poly ( List.take 2 a_k ) ++"$"
+    , fx "$C$ est au-dessus de $T_0$."
+    , vr "$C$ est au-dessous de $T_0$."
+    , fx "$C$ est au-dessous puis au-dessus de $T_0$."
+    , fx "$C$ est au-dessus puis au-dessous de $T_0$."
+    {--
+    , p [] [ text ("----") ]
+    --}
+    , p [] [ text ("==== Développements limités, Tangentes, dl02") ]
+    ]
+
+
+dl03 a_k =
+  let
+    vr texte = p [] [ text ( "+" ++ texte ) ]
+    fx texte = p [] [ text ( "-" ++ texte ) ]
+  in
+  div []
+    [ p [] [ text ( "On considère une fonction $f$ dont le développement limité à l'ordre 3 au voisinage de $0$ est " ++ mathTeX ( dl a_k ) ++ "." ) ]
+    , p [] [ text ( "On note $C$ la courbe représentative de $f$ et $T_0$ sa tangente en son point d'abscisse $0$." ) ]
+    , p [] [ text ( "Cocher la ou les réponses correctes." ) ]
+    , vr <| "L'équation de $T_0$ est $y=" ++ poly ( List.reverse <| List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $y=" ++ poly ( List.take 2 a_k ) ++"$" -- ATTENTION à éviter les cas où a_0 = a_1
+    , fx <| "L'équation de $T_0$ est $" ++ poly ( List.reverse <| List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $f\\left(x\\right)\\approx" ++ poly ( List.reverse <| List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $f\\left(x\\right)\\approx" ++ poly ( List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $" ++ poly ( List.take 2 a_k ) ++"$"
+    , fx "$C$ est au-dessus de $T_0$."
+    , fx "$C$ est au-dessous de $T_0$."
+    , vr "$C$ est au-dessous puis au-dessus de $T_0$."
+    , fx "$C$ est au-dessus puis au-dessous de $T_0$."
+    {--
+    , p [] [ text ("----") ]
+    --}
+    , p [] [ text ("==== Développements limités, Tangentes, dl03") ]
+    ]
+
+
+dl04 a_k =
+  let
+    vr texte = p [] [ text ( "+" ++ texte ) ]
+    fx texte = p [] [ text ( "-" ++ texte ) ]
+  in
+  div []
+    [ p [] [ text ( "On considère une fonction $f$ dont le développement limité à l'ordre 3 au voisinage de $0$ est " ++ mathTeX ( dl a_k ) ++ "." ) ]
+    , p [] [ text ( "On note $C$ la courbe représentative de $f$ et $T_0$ sa tangente en son point d'abscisse $0$." ) ]
+    , p [] [ text ( "Cocher la ou les réponses correctes." ) ]
+    , vr <| "L'équation de $T_0$ est $y=" ++ poly ( List.reverse <| List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $y=" ++ poly ( List.take 2 a_k ) ++"$" -- ATTENTION à éviter les cas où a_0 = a_1
+    , fx <| "L'équation de $T_0$ est $" ++ poly ( List.reverse <| List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $f\\left(x\\right)\\approx" ++ poly ( List.reverse <| List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $f\\left(x\\right)\\approx" ++ poly ( List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $" ++ poly ( List.take 2 a_k ) ++"$"
+    , fx "$C$ est au-dessus de $T_0$."
+    , fx "$C$ est au-dessous de $T_0$."
+    , fx "$C$ est au-dessous puis au-dessus de $T_0$."
+    , vr "$C$ est au-dessus puis au-dessous de $T_0$."
+    {--
+    , p [] [ text ("----") ]
+    --}
+    , p [] [ text ("==== Développements limités, Tangentes, dl04") ]
+    ]
+
+
+dl05 a_k k = -- À n'utiliser qu'avec a_0 = 0 !!!
+  let
+    coefLin =
+      case a_k of
+        [] -> 0
+        a_0 :: [] -> 0
+        a_0 :: a_1 :: a_ks -> a_1
+    coefQuad =
+      case a_k of
+        [] -> 0
+        a_0 :: [] -> 0
+        a_0 :: a_1 :: [] -> 0
+        a_0 :: a_1 :: a_2 :: a_ks -> a_2
+    vr a b = p [] [ text <| "+$\\frac{" ++ String.fromInt a ++ "}{" ++ String.fromInt b ++ "}$" ]
+    ffx a b = p [] [ text <| "-$\\frac{" ++ String.fromInt a ++ "}{" ++ String.fromInt b ++ "}$" ]
+    fx a = p [] [ text <| "-$" ++ String.fromInt a ++ "$" ]
+  in
+  div []
+    [ p [] [ text ( "On considère une fonction $f$ dont le développement limité à l'ordre 2 au voisinage de $0$ est " ++ mathTeX ( dl a_k ) ++ "." ) ]
+    , p [] [ text <| "Que vaut $\\lim\\limits_{x\\to0}\\frac{f\\left(x\\right)}{" ++ (String.fromInt k) ++ "x}$" ]
+    , vr coefLin k
+    , ffx 1 coefLin
+    , ffx 1 coefQuad
+    , ffx 1 k
+    , ffx coefQuad k
+    , ffx k coefQuad
+    , fx coefLin
+    , fx coefQuad
+    , fx k
+    , fx 1
+    {--
+    , p [] [ text ("----") ]
+    --}
+    , p [] [ text ("==== Développements limités, Tangentes, dl05") ]
+    ]
+
+
+mapTwist a b = List.map b a
+
+entiers = List.range 2 9
+
+d1 = List.map derivExp01 entiers
+
+d2 = List.concat ( List.map (mapTwist entiers) d1 )
+
+d3 = List.concat ( List.map (mapTwist entiers) d2 )
+
+mix lls =
+  case lls of
+    [] -> []
+    [] :: llss -> []
+    l :: [] -> List.map List.singleton l
+    (a :: ls) :: llss -> ( List.map ( (::) a ) ( mix llss ) ) ++ mix ( ls :: llss )
+
+derivPoly01 param = -- on donne a pair et positif, les deux racines x_1 < x_2, d, et m > x_2
+  case param of
+    [] -> div [] []
+    a :: [] -> div [] []
+    a :: b :: [] -> div [] []
+    a :: b :: c :: [] -> div [] []
+    a :: b :: c :: d :: [] -> div [] []
+    a :: b :: c :: d :: e :: a_ks -> derivPoly01Bis a b c d e
+
+derivPoly01Bis a x_1 x_2 d m =
+  let
+    b = 0 - 3*a*(x_1 + x_2)//2
+    c = 3*a*x_1*x_2
+    a_k = [a,b,c,d]
+    vr texte = p [] [ text ( "+" ++ texte ) ]
+    fx texte = p [] [ text ( "-" ++ texte ) ]
+  in
+  div []
+    [ p [] [ text ( "On considère la fonction $f:x\\mapsto " ++ ( poly a_k ) ++ "$." ) ]
+    , p [] [ text ( "Cocher la ou les réponses correctes." ) ]
+    , vr <| "La dérivée de $f$ est la fonction $f\\prime:x\\mapsto " ++ ( poly <| polyD a_k ) ++ "$."
+    , fx <| "La dérivée de $f$ est la fonction $f\\prime:x\\mapsto " ++ ( poly [3*a, 2*b, c + d] ) ++ "$."
+    , fx <| "la fonction $f$ est croissante sur l'intervalle $\\left[" ++ String.fromInt x_1 ++ ";" ++ String.fromInt x_2 ++ "\\right]$"
+    , vr <| "la fonction $f$ est décroissante sur l'intervalle $\\left[" ++ String.fromInt x_1 ++ ";" ++ String.fromInt x_2 ++ "\\right]$"
+    , fx <| "la fonction $f$ est décroissante sur l'intervalle $\\left[" ++ String.fromInt m ++ ";+\\infty\\right[$"
+    , vr <| "la fonction $f$ est croissante sur l'intervalle $\\left[" ++ String.fromInt m ++ ";+\\infty\\right[$"
+    , fx <| "la fonction $f$ est croissante sur l'intervalle $\\left[" ++ String.fromInt x_1 ++ ";+\\infty\\right[$"
+    , fx <| "la fonction $f$ est décroissante sur l'intervalle $\\left[" ++ String.fromInt x_1 ++ ";+\\infty\\right[$"
+    {--
+    , p [] [ text ("----") ]
+    --}
+    , p [] [ text ("==== Dérivée, Polynômes, derivPoly01") ]
+    ]
+
+derivPoly02 param = -- on donne a impair et négatif, les deux racines x_1 < x_2 pairs distincs, d, et m < x_1
+  case param of
+    [] -> div [] []
+    a :: [] -> div [] []
+    a :: b :: [] -> div [] []
+    a :: b :: c :: [] -> div [] []
+    a :: b :: c :: d :: [] -> div [] []
+    a :: b :: c :: d :: e :: a_ks -> derivPoly02Bis a b c d e
+
+derivPoly02Bis a x_1 x_2 d m =
+  let
+    b = 0 - 3*a*(x_1 + x_2)//2
+    c = 3*a*x_1*x_2
+    a_k = [a,b,c,d]
+    vr texte = p [] [ text ( "+" ++ texte ) ]
+    fx texte = p [] [ text ( "-" ++ texte ) ]
+  in
+  div []
+    [ p [] [ text ( "On considère la fonction $f:x\\mapsto " ++ ( poly a_k ) ++ "$." ) ]
+    , p [] [ text ( "Cocher la ou les réponses correctes." ) ]
+    , vr <| "La dérivée de $f$ est la fonction $f\\prime:x\\mapsto " ++ ( poly <| polyD a_k ) ++ "$."
+    , fx <| "La dérivée de $f$ est la fonction $f\\prime:x\\mapsto " ++ ( poly [3*a, 2*b, c + d] ) ++ "$."
+    , vr <| "la fonction $f$ est croissante sur l'intervalle $\\left[" ++ String.fromInt x_1 ++ ";" ++ String.fromInt x_2 ++ "\\right]$"
+    , fx <| "la fonction $f$ est décroissante sur l'intervalle $\\left[" ++ String.fromInt x_1 ++ ";" ++ String.fromInt x_2 ++ "\\right]$"
+    , vr <| "la fonction $f$ est décroissante sur l'intervalle $\\left]-\\infty;" ++ String.fromInt m ++ "\\right]$"
+    , fx <| "la fonction $f$ est croissante sur l'intervalle $\\left]-\\infty;" ++ String.fromInt m ++ "\\right[$"
+    , fx <| "la fonction $f$ est croissante sur l'intervalle $\\left[" ++ String.fromInt x_1 ++ ";+\\infty\\right[$"
+    , fx <| "la fonction $f$ est décroissante sur l'intervalle $\\left[" ++ String.fromInt x_1 ++ ";+\\infty\\right[$"
+    {--
+    , p [] [ text ("----") ]
+    --}
+    , p [] [ text ("==== Dérivée, Polynômes, derivPoly02") ]
+    ]
+
+polyD a_ks = polyDbis a_ks ( List.length a_ks - 1 )
+
+polyDbis a_ks n =
+  case a_ks of
+    [] -> []
+    a_0 :: [] -> []
+    a_k :: a_kss -> ( n*a_k ) :: polyDbis a_kss ( n - 1 ) 
+
+equaDiff01 a = -- a négatif
+  let
+    f aa = mathTeX ( fonction ( aa ) )
+    vr aa = p [] [ text ( "+" ++ ( f aa ) ) ]
+    fx aa = p [] [ text ( "-" ++ ( f aa ) ) ]
+  in
+  div []
+    [ p [] [ text <| "Parmi les fonctions ci-dessous, lesquelles sont des solutions de l'équation différentielle $y'=" ++ String.fromInt a ++ "y$ ?" ]
+    , vr <| String.fromInt ( a - 1 ) ++ "e^{" ++ String.fromInt a ++ "x}"
+    , vr <| String.fromInt ( a + 4 ) ++ "e^{" ++ String.fromInt a ++ "x}"
+    , vr <| String.fromInt a ++ "e^{" ++ String.fromInt a ++ "x}"
+    , fx <| String.fromInt a ++ "e^{" ++ String.fromInt (a-1) ++ "x}"
+    , fx <| String.fromInt ( a - 3 ) ++ "e^x"
+    , fx <| String.fromInt ( a + 7 ) ++ "e^x" ++ String.fromInt a
+    , fx <| String.fromInt a ++ "e^x"
+    , fx <| String.fromInt a ++ "e^x+" ++ String.fromInt ( a + 100)
+    , fx <| String.fromInt ( a - 1 ) ++ "e^x+" ++ String.fromInt ( a + 100)
+    , fx <| String.fromInt ( a - 8 ) ++ "e^{" ++ String.fromInt (a-1) ++ "x}" ++ String.fromInt a
+    {--
+    , p [] [ text ("----") ]
+    --}
+    , p [] [ text ("==== Équations différentielles, equaDiff01") ]
+    ]
+
+equaDiff02 param =
+  case param of
+    [] -> div [] []
+    a :: [] -> div [] []
+    a :: b :: c -> equaDiff02Bis a b
+
+equaDiff02Bis a b = -- a positif, b négatif, pas de simplification
+  let
+    f aa = mathTeX ( fonction ( aa ) )
+    vr aa = p [] [ text ( "+" ++ ( f aa ) ) ]
+    fx aa = p [] [ text ( "-" ++ ( f aa ) ) ]
+  in
+  div []
+    [ p [] [ text <| "Parmi les fonctions ci-dessous, lesquelles sont des solutions de l'équation différentielle $" ++ String.fromInt a ++"y'=" ++ String.fromInt b ++ "y$ ?" ]
+    , vr <| String.fromInt ( a - 17 ) ++ "e^{-\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}x}"
+    , vr <| String.fromInt ( a + 23 ) ++ "e^{-\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}x}"
+    , fx <| String.fromInt ( a + 3 ) ++ "e^{\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}x}"
+    , fx <| String.fromInt ( a - 17 ) ++ "e^{\\frac{" ++ String.fromInt a ++ "}{" ++ String.fromInt (0 - b) ++ "}x}"
+    , fx <| String.fromInt ( a + 23 ) ++ "e^{-\\frac{" ++ String.fromInt a ++ "}{" ++ String.fromInt (0 - b) ++ "}x}"
+    , fx <| String.fromInt a ++ "e^{" ++ String.fromInt b ++ "x}-\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}"
+    , fx <| String.fromInt a ++ "e^{" ++ String.fromInt b ++ "x}+\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}"
+    , fx <| String.fromInt b ++ "e^{" ++ String.fromInt b ++ "x}-\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}"
+    , fx <| String.fromInt b ++ "e^{" ++ String.fromInt b ++ "x}+\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}"
+    , fx <| "e^x+\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}"
+    {--
+    , p [] [ text ("----") ]
+    --}
+    , p [] [ text ("==== Équations différentielles, equaDiff02") ]
+    ]
+
+equaDiff03 param =
+  case param of
+    [] -> div [] []
+    a :: [] -> div [] []
+    a :: b :: c -> equaDiff03Bis a b
+
+equaDiff03Bis a b = -- a positif, b négatif, pas de simplification
+  let
+    f aa = mathTeX ( fonction ( aa ) )
+    vr aa = p [] [ text ( "+" ++ ( f aa ) ) ]
+    fx aa = p [] [ text ( "-" ++ ( f aa ) ) ]
+  in
+  div []
+    [ p [] [ text <| "Parmi les fonctions ci-dessous, lesquelles sont des solutions de l'équation différentielle $y'=" ++ String.fromInt a ++ "y" ++ String.fromInt b ++"$ ?" ]
+    , fx <| String.fromInt ( a - 17 ) ++ "e^{-\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}x}"
+    , fx <| String.fromInt ( a + 23 ) ++ "e^{-\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}x}"
+    , fx <| String.fromInt ( a + 3 ) ++ "e^{\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}x}"
+    , fx <| String.fromInt ( a - 17 ) ++ "e^{\\frac{" ++ String.fromInt a ++ "}{" ++ String.fromInt (0 - b) ++ "}x}"
+    , fx <| String.fromInt ( a + 23 ) ++ "e^{-\\frac{" ++ String.fromInt a ++ "}{" ++ String.fromInt (0 - b) ++ "}x}"
+    , fx <| String.fromInt a ++ "e^{" ++ String.fromInt a ++ "x}-\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}"
+    , vr <| String.fromInt a ++ "e^{" ++ String.fromInt a ++ "x}+\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}"
+    , fx <| String.fromInt b ++ "e^{" ++ String.fromInt a ++ "x}-\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}"
+    , vr <| String.fromInt b ++ "e^{" ++ String.fromInt a ++ "x}+\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}"
+    , fx <| "e^x+\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}"
+    {--
+    , p [] [ text ("----") ]
+    --}
+    , p [] [ text ("==== Équations différentielles, equaDiff03") ]
+    ]
+
+primitLn01 a_k =
+  case a_k of
+    [] -> div [] []
+    a :: [] -> div [] []
+    a :: b :: c -> primitLn01Bis a b
+
+primitLn01Bis a b =
+  let
+    f aa = mathTeX ( fonction ( aa ) )
+    vr aa = p [] [ text ( "+" ++ ( f aa ) ) ]
+    fx aa = p [] [ text ( "-" ++ ( f aa ) ) ]
+    axpb = poly [a,b]
+  in
+  div []
+    [ p [] [ text <| "Parmi les fonctions ci-dessous, lesquelles sont des primitives de la fonction " ++ ( f <| "\\frac{" ++ String.fromInt a ++ "}{" ++ axpb ++ "}" ) ++ " ?" ]
+    , vr <| "\\ln\\left(" ++ axpb ++ "\\right)"
+    , vr <| "\\ln\\left(" ++ axpb ++ "\\right)+" ++ String.fromInt ( b + 30 )
+    , vr <| "\\ln\\left(" ++ axpb ++ "\\right)" ++ String.fromInt ( a - 20)
+    , fx <| "\\frac{" ++ String.fromInt (a*a) ++ "}{\\left(" ++ axpb ++ "\\right)^2}"
+    , fx <| "\\frac{" ++ String.fromInt (a*a) ++ "}{" ++ axpb ++ "}" ++ String.fromInt ( b + 30 )
+    , fx <| "\\frac{" ++ String.fromInt (0 - a*a) ++ "}{\\left(" ++ axpb ++ "\\right)^2}"
+    , fx <| "\\frac{" ++ String.fromInt (0 - a*a) ++ "}{" ++ axpb ++ "}+" ++ String.fromInt ( b + 30 )
+    , fx <| "\\frac{" ++ String.fromInt (0 - a*a) ++ "}{" ++ axpb ++ "}" ++ String.fromInt ( a - 20)
+    , fx <| "\\frac{" ++ poly [a*a, a*b+a*a] ++ "}{\\left(" ++ axpb ++ "\\right)^2}"
+    , fx <| "\\frac{" ++ poly [a*a, a*b-a*a] ++ "}{\\left(" ++ axpb ++ "\\right)^2}"
+    {--
+    , p [] [ text ("----") ]
+    --}
+    , p [] [ text ("==== Primitives, Logarithme, primitLn01") ]
+    ]
+
+primitPoly01 a_k =
+  case a_k of
+    [] -> div [] []
+    a :: [] -> div [] []
+    a :: b :: [] -> div [] []
+    a :: b :: c :: [] -> div [] []
+    a :: b :: c :: d :: e -> primitPoly01Bis a b c d
+
+primitPoly01Bis a b c d =
+  let
+    pol = [a,b,c,d,0]
+    polD = polyD pol
+    polDD = polyD polD
+    f a_k = mathTeX ( fonction ( poly a_k ) )
+    vr a_k = p [] [ text ( "+" ++ ( f a_k ) ) ]
+    fx a_k = p [] [ text ( "-" ++ ( f a_k ) ) ]
+  in
+  div []
+    [ p [] [ text <| "Parmi les fonctions ci-dessous, lesquelles sont des primitives de la fonction " ++ ( f polD ) ++ " ?" ]
+    , vr <| List.map2 (+) pol [0,0,0,0,5]
+    , vr <| List.map2 (+) pol [0,0,0,0,-8]
+    , vr <| List.map2 (+) pol [0,0,0,0,8]
+    , fx <| List.map2 (+) polD [0,0,0,8]
+    , fx <| List.map2 (+) polD [0,0,0,-5]
+    , fx <| List.map2 (+) polD [0,0,0,-8]
+    , fx <| List.map2 (+) polDD [0,0,8]
+    , fx <| List.map2 (+) polDD [0,0,-5]
+    , fx <| List.map2 (+) polDD [0,0,-8]
+    {--
+    , p [] [ text ("----") ]
+    --}
+    , p [] [ text ("==== Primitives, Polynômes, primitPoly01") ]
+    ]
+
+
+
+
diff --git a/src/QCMbis.elm b/src/QCMbis.elm
new file mode 100644
index 0000000..a806beb
--- /dev/null
+++ b/src/QCMbis.elm
@@ -0,0 +1,583 @@
+module QCMbis exposing (..)
+
+-- Press buttons to increment and decrement a counter.
+--
+-- Read how it works:
+--   https://guide.elm-lang.org/architecture/buttons.html
+--
+
+
+import Browser
+import Html exposing (Html, button, div, text, p)
+import Html.Events exposing (onClick)
+
+
+
+-- MAIN
+
+
+main =
+  Browser.sandbox { init = init, update = update, view = view }
+
+
+
+-- MODEL
+
+
+type alias Model = Int
+
+
+init : Model
+init =
+  0
+
+
+
+-- UPDATE
+
+
+type Msg
+  = Increment
+  | Decrement
+
+
+update : Msg -> Model -> Model
+update msg model =
+  case msg of
+    Increment ->
+      model + 1
+
+    Decrement ->
+      model - 1
+
+
+
+-- VIEW
+
+
+view : Model -> Html Msg
+view model =
+  div [] ( List.concat
+    [
+    {--
+    , [ dl10 [0, 4, 2] 5 ]
+    , [ text ( poly [0, 0, 7, -3, 0 , 2, 1 , -1 , 3 , 1, 1, 1, 5] ) ]
+    , [ primitPoly02 [2,-5,1,7] ]
+    , [ primitLn02 [-5,-6] ]
+    , [ equaDiff04 -5 ]
+    , [ equaDiff05 [4, -5] ]
+    , [ equaDiff06 [4, -5] ]
+    , [ derivPoly03 [4, -5, 3, 5, 13] ]
+    , [ derivPoly04 [-3, -4, 2, 7, -13] ]
+    , [ dl06 [-5, -2, 2, -1] ]
+    , [ dl07 [-5, 0, -2, -1] ]
+    , [ dl08 [0, -8, 0, 7] ]
+    , [ dl09 [-1, 2, 0, -3] ]
+    --}
+      List.map equaDiff04 <| List.range -9 -2 -- 98 possibilités
+    , List.map equaDiff05 ( mix [ [3,5,7], [-2,-4,-7,-8] ] )  -- 99 possibilités
+    , List.map equaDiff06 ( mix [ [3,5,7], [-2,-4,-7,-8] ] )  -- 99 possibilités
+    , List.map derivPoly03 ( mix [ [4,6], List.range -7 -6, List.range 2 3, List.range 11 12 ] )  -- 576 possibilités
+    , List.map derivPoly04 ( mix [ [-5,-3], [-4,-2], [2,6], List.range -14 -13 ] )  -- 256 possibilités
+    , List.map primitLn02 ( mix [ List.range -3 -2 ++ List.range 2 3, List.range -5 -4 ++ List.range 5 6 ] )  -- 256 possibilités
+    , List.map primitPoly02 ( mix [ List.range -3 -2 , List.range 2 3, List.range -5 -4 , List.range 6 7 ] )  -- 256 possibilités
+    , List.map dl06 ( mix [ [-3,5], [-2,6], [2,3], [-2,3] ] )  -- 648 possibilités
+    , List.map dl07 ( mix [ [-5,-2,2], [0], [-3,-4], [-2,3] ] )  -- 300 possibilités
+    , List.map dl08 ( mix [ [0], [-3,-2,2,3], [0], [2,3,4,5] ] )  -- 162 possibilités
+    , List.map dl09 ( mix [ [-5,3,5], [-6,4], [0], [-5,-3] ] )  --324 possibilités
+    , List.concat <| List.map ( mapTwist [3,5,9] ) ( List.map dl10 ( mix [ [0], [2,4], [7,8] ] ) )  -- 192 possibilités
+    , d3 -- 729 possibilités
+    ] 
+  )
+
+{--
+type Fonction num
+  = Const num
+  | X
+  | Poly List num
+  | Exp Fonction
+  | Ln Fonction
+  | Sin Fonction
+  | Cos Fonction
+--}
+
+
+mathTeX a = "$" ++ a ++ "$"
+
+fonction a = "x\\mapsto " ++ a
+
+affineExp a b c
+  = if (a,b) == (0,0) then "0"
+    else if (a,c) == (0,1) then String.fromInt b ++ "e^x"
+    else if a == 0 then String.fromInt b ++ "e^{" ++ (String.fromInt c) ++ "x}"
+    else if (a,b,c) == (1,0,1) then "xe^x"
+    else if (b,c) == (0,1) then (String.fromInt a) ++ "x" ++ "e^x"
+    else if b == 0 then (String.fromInt a) ++ "x" ++ "e^{" ++ (String.fromInt c) ++ "x}"
+    else if c == 1 then "\\left(" ++ (String.fromInt a) ++ "x+" ++ (String.fromInt b) ++ "\\right)e^x"
+    else "\\left(" ++ (String.fromInt a) ++ "x+" ++ (String.fromInt b) ++ "\\right)e^{" ++ (String.fromInt c) ++ "x}"
+
+derivExp02 a b c =
+  let
+    f aa bb cc = mathTeX ( fonction ( affineExp aa bb cc ) )
+    vr aa bb cc = p [] [ text ( "+" ++ ( f aa bb cc) ) ]
+    fx aa bb cc = p [] [ text ( "-" ++ ( f aa bb cc) ) ]
+  in
+  div []
+    [ p [] [ text ("Donner la dérivée de la fonction " ++ f a b c) ]
+    , vr (a*c) (a+b*c) c
+    , fx (a+b) a c
+    , fx (a+b) a c
+    , fx (a+b*c) (a*c) c
+    , fx (a-b*c) (a*c) c
+    , fx (a-b*c) (a*c) c
+    , fx a 0 c
+    , fx (a*c) 0 c
+    , fx a 0 1
+    , fx (a*c) 0 1
+    {--
+    , p [] [ text ("----") ]
+    , p [] [ text ("Avant toute chose, il faut bien voir que $\\left(" ++ (String.fromInt a) ++ "x+" ++ (String.fromInt b) ++ "\\right)e^{" ++ (String.fromInt c) ++ "x}$ est de la forme $uv$ avec $u=ax+b$ et $v=e^{cx}$.") ],
+    , p [] [ text ("Ensuite, il faut savoir que la dérivée de $uv$ est donnée par $u'v+uv'$, et que la dérivée de $e^{u}$ est donnée par $e^{u}\\cdot u'$, ce qui dans notre cas nous donne que la dérivée de $e^{" ++ (String.fromInt c) ++ "x}$ est donnée par $" ++ (String.fromInt c) ++ "e^{" ++ (String.fromInt c) ++ "x}$.") ]
+    , p [] [ text ("Nous avons donc que la dérivée de la fonction est :") ]
+    , p [] [ text ("$\\begin{array}{rl} x\\mapsto & " ++ (String.fromInt (a)) ++ "e^{" ++ (String.fromInt c) ++ "x}+\\left(" ++ (String.fromInt (a)) ++ "x+" ++ (String.fromInt (b)) ++ "\\right)ce^{" ++ (String.fromInt (c)) ++ "x}\\\\& =" ++ (String.fromInt (a)) ++ "e^{" ++ (String.fromInt (c)) ++ "x}+\\left(" ++ (String.fromInt (a*c)) ++ "x+" ++ (String.fromInt (b*c)) ++ "\\right)e^{" ++ (String.fromInt (c)) ++ "x}\\\\ & =\\left(" ++ (String.fromInt (a)) ++ "+" ++ (String.fromInt (a*c)) ++ "x+" ++ (String.fromInt (b*c)) ++ "\\right)e^{" ++ (String.fromInt (c)) ++ "x}\\\\ & =\\left(" ++ (String.fromInt (a+b*c)) ++ "+" ++ (String.fromInt (a*c)) ++ "x\\right)e^{" ++ (String.fromInt (c)) ++ "x} \\end{array}$") ]
+    --}
+    , p [] [ text ("==== Dérivées, Exponentielle, derivExp02") ]
+    ]
+
+
+
+-- Des DL
+
+monome a n =
+  if a == 0 then ""
+  else if n == 0 then ( String.fromInt a )
+  else if (n,a) == (1,1) then "x"
+  else if (n,a) == (1,-1) then "-x"
+  else if n == 1 then ( String.fromInt a ) ++ "x"
+  else if a == 1 then "x^{" ++ ( String.fromInt n ) ++ "}"
+  else if a == -1 then "-x^{" ++ ( String.fromInt n ) ++ "}"
+  else ( String.fromInt a ) ++ "x^{" ++ ( String.fromInt n ) ++ "}"
+
+poly a_ks =
+  if a_ks == [] then "0"
+  else polyBis a_ks ( List.length a_ks - 1 )
+
+polyBis a_ks n =
+  case a_ks of
+    [] -> ""
+    a_n :: a_kss ->
+      if a_n == 0 then polyBis a_kss ( n - 1 )
+      else ( monome a_n n ) ++ ( polyGen a_kss ( n - 1 ) )
+
+polyGen a_ks n =
+  case a_ks of
+    [] -> ""
+    a_i :: a_is ->
+      if a_i <= 0 then ( monome a_i n ) ++ ( polyGen a_is ( n - 1 ) )
+      else "+" ++ ( monome a_i n ) ++ ( polyGen a_is ( n - 1 ) )
+
+dl a_ks =
+  if a_ks == [] then "0"
+  else dlBis a_ks 0
+
+dlBis a_ks n =
+  case a_ks of
+    [] -> ""
+    premierCoef :: suite ->
+      if premierCoef == 0 then dlBis suite ( n + 1 )
+      else ( monome premierCoef n ) ++ ( dlGen suite ( n + 1 ) )
+
+dlGen a_ks n =
+  case a_ks of
+    [] -> ""
+    a_i :: a_is ->
+      if a_i <= 0 then ( monome a_i n ) ++ ( dlGen a_is ( n + 1 ) )
+      else "+" ++ ( monome a_i n ) ++ ( dlGen a_is ( n + 1 ) )
+
+dl06 a_k =
+  let
+    vr texte = p [] [ text ( "+" ++ texte ) ]
+    fx texte = p [] [ text ( "-" ++ texte ) ]
+  in
+  div []
+    [ p [] [ text ( "On considère une fonction $f$ dont le développement limité à l'ordre 3 au voisinage de $0$ est " ++ mathTeX ( dl a_k ) ++ "." ) ]
+    , p [] [ text ( "On note $C$ la courbe représentative de $f$ et $T_0$ sa tangente en son point d'abscisse $0$." ) ]
+    , p [] [ text ( "Cocher la ou les réponses correctes." ) ]
+    , vr <| "L'équation de $T_0$ est $y=" ++ poly ( List.reverse <| List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $y=" ++ poly ( List.take 2 a_k ) ++"$" -- ATTENTION à éviter les cas où a_0 = a_1
+    , fx <| "L'équation de $T_0$ est $" ++ poly ( List.reverse <| List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $f\\left(x\\right)\\approx" ++ poly ( List.reverse <| List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $f\\left(x\\right)\\approx" ++ poly ( List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $" ++ poly ( List.take 2 a_k ) ++"$"
+    , vr "$C$ est au-dessus de $T_0$."
+    , fx "$C$ est au-dessous de $T_0$."
+    , fx "$C$ est au-dessous puis au-dessus de $T_0$."
+    , fx "$C$ est au-dessus puis au-dessous de $T_0$."
+    {--
+    , p [] [ text ("----") ]
+    --}
+    , p [] [ text ("==== Développements limités, Tangentes, dl06") ]
+    ]
+
+
+dl07 a_k =
+  let
+    vr texte = p [] [ text ( "+" ++ texte ) ]
+    fx texte = p [] [ text ( "-" ++ texte ) ]
+  in
+  div []
+    [ p [] [ text ( "On considère une fonction $f$ dont le développement limité à l'ordre 3 au voisinage de $0$ est " ++ mathTeX ( dl a_k ) ++ "." ) ]
+    , p [] [ text ( "On note $C$ la courbe représentative de $f$ et $T_0$ sa tangente en son point d'abscisse $0$." ) ]
+    , p [] [ text ( "Cocher la ou les réponses correctes." ) ]
+    , vr <| "L'équation de $T_0$ est $y=" ++ poly ( List.reverse <| List.take 2 a_k ) ++"$"
+    , vr <| "L'équation de $T_0$ est $y=" ++ poly ( List.reverse <| List.take 3 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $y=" ++ poly ( List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $" ++ poly ( List.reverse <| List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $f\\left(x\\right)\\approx" ++ poly ( List.reverse <| List.take 3 a_k ) ++"x$"
+    , fx <| "L'équation de $T_0$ est $f\\left(x\\right)\\approx" ++ poly ( List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $" ++ poly ( List.take 2 a_k ) ++"$"
+    , fx "$C$ est au-dessus de $T_0$."
+    , vr "$C$ est au-dessous de $T_0$."
+    , fx "$C$ est au-dessous puis au-dessus de $T_0$."
+    , fx "$C$ est au-dessus puis au-dessous de $T_0$."
+    {--
+    , p [] [ text ("----") ]
+    --}
+    , p [] [ text ("==== Développements limités, Tangentes, dl07") ]
+    ]
+
+
+dl08 a_k =
+  let
+    vr texte = p [] [ text ( "+" ++ texte ) ]
+    fx texte = p [] [ text ( "-" ++ texte ) ]
+  in
+  div []
+    [ p [] [ text ( "On considère une fonction $f$ dont le développement limité à l'ordre 3 au voisinage de $0$ est " ++ mathTeX ( dl a_k ) ++ "." ) ]
+    , p [] [ text ( "On note $C$ la courbe représentative de $f$ et $T_0$ sa tangente en son point d'abscisse $0$." ) ]
+    , p [] [ text ( "Cocher la ou les réponses correctes." ) ]
+    , vr <| "L'équation de $T_0$ est $y=" ++ poly ( List.reverse <| List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $y=" ++ poly ( List.take 2 a_k ) ++"$" -- ATTENTION à éviter les cas où a_0 = a_1
+    , fx <| "L'équation de $T_0$ est $" ++ poly ( List.reverse <| List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $f\\left(x\\right)\\approx" ++ poly ( List.reverse <| List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $f\\left(x\\right)\\approx" ++ poly ( List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $" ++ poly ( List.take 2 a_k ) ++"$"
+    , fx "$C$ est au-dessus de $T_0$."
+    , fx "$C$ est au-dessous de $T_0$."
+    , vr "$C$ est au-dessous puis au-dessus de $T_0$."
+    , fx "$C$ est au-dessus puis au-dessous de $T_0$."
+    {--
+    , p [] [ text ("----") ]
+    --}
+    , p [] [ text ("==== Développements limités, Tangentes, dl08") ]
+    ]
+
+
+dl09 a_k =
+  let
+    vr texte = p [] [ text ( "+" ++ texte ) ]
+    fx texte = p [] [ text ( "-" ++ texte ) ]
+  in
+  div []
+    [ p [] [ text ( "On considère une fonction $f$ dont le développement limité à l'ordre 3 au voisinage de $0$ est " ++ mathTeX ( dl a_k ) ++ "." ) ]
+    , p [] [ text ( "On note $C$ la courbe représentative de $f$ et $T_0$ sa tangente en son point d'abscisse $0$." ) ]
+    , p [] [ text ( "Cocher la ou les réponses correctes." ) ]
+    , vr <| "L'équation de $T_0$ est $y=" ++ poly ( List.reverse <| List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $y=" ++ poly ( List.take 2 a_k ) ++"$" -- ATTENTION à éviter les cas où a_0 = a_1
+    , fx <| "L'équation de $T_0$ est $" ++ poly ( List.reverse <| List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $f\\left(x\\right)\\approx" ++ poly ( List.reverse <| List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $f\\left(x\\right)\\approx" ++ poly ( List.take 2 a_k ) ++"$"
+    , fx <| "L'équation de $T_0$ est $" ++ poly ( List.take 2 a_k ) ++"$"
+    , fx "$C$ est au-dessus de $T_0$."
+    , fx "$C$ est au-dessous de $T_0$."
+    , fx "$C$ est au-dessous puis au-dessus de $T_0$."
+    , vr "$C$ est au-dessus puis au-dessous de $T_0$."
+    {--
+    , p [] [ text ("----") ]
+    --}
+    , p [] [ text ("==== Développements limités, Tangentes, dl09") ]
+    ]
+
+
+dl10 a_k k = -- À n'utiliser qu'avec a_0 = 0 !!!
+  let
+    coefLin =
+      case a_k of
+        [] -> 0
+        a_0 :: [] -> 0
+        a_0 :: a_1 :: a_ks -> a_1
+    coefQuad =
+      case a_k of
+        [] -> 0
+        a_0 :: [] -> 0
+        a_0 :: a_1 :: [] -> 0
+        a_0 :: a_1 :: a_2 :: a_ks -> a_2
+    vr a b = p [] [ text <| "+$\\frac{" ++ String.fromInt a ++ "}{" ++ String.fromInt b ++ "}$" ]
+    ffx a b = p [] [ text <| "-$\\frac{" ++ String.fromInt a ++ "}{" ++ String.fromInt b ++ "}$" ]
+    fx a = p [] [ text <| "-$" ++ String.fromInt a ++ "$" ]
+  in
+  div []
+    [ p [] [ text ( "On considère une fonction $f$ dont le développement limité à l'ordre 2 au voisinage de $0$ est " ++ mathTeX ( dl a_k ) ++ "." ) ]
+    , p [] [ text <| "Que vaut $\\lim\\limits_{x\\to0}\\frac{f\\left(x\\right)}{" ++ (String.fromInt k) ++ "x}$" ]
+    , vr coefLin k
+    , ffx 1 coefLin
+    , ffx 1 coefQuad
+    , ffx 1 k
+    , ffx coefQuad k
+    , ffx k coefQuad
+    , fx coefLin
+    , fx coefQuad
+    , fx k
+    , fx 1
+    {--
+    , p [] [ text ("----") ]
+    --}
+    , p [] [ text ("==== Développements limités, Tangentes, dl10") ]
+    ]
+
+
+mapTwist a b = List.map b a
+
+entiers = List.range 2 4
+
+d1 = List.map derivExp02 entiers
+
+d2 = List.concat ( List.map (mapTwist entiers) d1 )
+
+d3 = List.concat ( List.map (mapTwist entiers) d2 )
+
+mix lls =
+  case lls of
+    [] -> []
+    [] :: llss -> []
+    l :: [] -> List.map List.singleton l
+    (a :: ls) :: llss -> ( List.map ( (::) a ) ( mix llss ) ) ++ mix ( ls :: llss )
+
+derivPoly03 param = -- on donne a pair et positif, les deux racines x_1 < x_2, d, et m > x_2
+  case param of
+    [] -> div [] []
+    a :: [] -> div [] []
+    a :: b :: [] -> div [] []
+    a :: b :: c :: [] -> div [] []
+    a :: b :: c :: d :: [] -> div [] []
+    a :: b :: c :: d :: e :: a_ks -> derivPoly03Bis a b c d e
+
+derivPoly03Bis a x_1 x_2 d m =
+  let
+    b = 0 - 3*a*(x_1 + x_2)//2
+    c = 3*a*x_1*x_2
+    a_k = [a,b,c,d]
+    vr texte = p [] [ text ( "+" ++ texte ) ]
+    fx texte = p [] [ text ( "-" ++ texte ) ]
+  in
+  div []
+    [ p [] [ text ( "On considère la fonction $f:x\\mapsto " ++ ( poly a_k ) ++ "$." ) ]
+    , p [] [ text ( "Cocher la ou les réponses correctes." ) ]
+    , vr <| "La dérivée de $f$ est la fonction $f\\prime:x\\mapsto " ++ ( poly <| polyD a_k ) ++ "$."
+    , fx <| "La dérivée de $f$ est la fonction $f\\prime:x\\mapsto " ++ ( poly [3*a, 2*b, c + d] ) ++ "$."
+    , fx <| "la fonction $f$ est croissante sur l'intervalle $\\left[" ++ String.fromInt x_1 ++ ";" ++ String.fromInt x_2 ++ "\\right]$"
+    , vr <| "la fonction $f$ est décroissante sur l'intervalle $\\left[" ++ String.fromInt x_1 ++ ";" ++ String.fromInt x_2 ++ "\\right]$"
+    , fx <| "la fonction $f$ est décroissante sur l'intervalle $\\left[" ++ String.fromInt m ++ ";+\\infty\\right[$"
+    , vr <| "la fonction $f$ est croissante sur l'intervalle $\\left[" ++ String.fromInt m ++ ";+\\infty\\right[$"
+    , fx <| "la fonction $f$ est croissante sur l'intervalle $\\left[" ++ String.fromInt x_1 ++ ";+\\infty\\right[$"
+    , fx <| "la fonction $f$ est décroissante sur l'intervalle $\\left[" ++ String.fromInt x_1 ++ ";+\\infty\\right[$"
+    {--
+    , p [] [ text ("----") ]
+    --}
+    , p [] [ text ("==== Dérivée, Polynômes, derivPoly03") ]
+    ]
+
+derivPoly04 param = -- on donne a impair et négatif, les deux racines x_1 < x_2 pairs distincs, d, et m < x_1
+  case param of
+    [] -> div [] []
+    a :: [] -> div [] []
+    a :: b :: [] -> div [] []
+    a :: b :: c :: [] -> div [] []
+    a :: b :: c :: d :: [] -> div [] []
+    a :: b :: c :: d :: e :: a_ks -> derivPoly04Bis a b c d e
+
+derivPoly04Bis a x_1 x_2 d m =
+  let
+    b = 0 - 3*a*(x_1 + x_2)//2
+    c = 3*a*x_1*x_2
+    a_k = [a,b,c,d]
+    vr texte = p [] [ text ( "+" ++ texte ) ]
+    fx texte = p [] [ text ( "-" ++ texte ) ]
+  in
+  div []
+    [ p [] [ text ( "On considère la fonction $f:x\\mapsto " ++ ( poly a_k ) ++ "$." ) ]
+    , p [] [ text ( "Cocher la ou les réponses correctes." ) ]
+    , vr <| "La dérivée de $f$ est la fonction $f\\prime:x\\mapsto " ++ ( poly <| polyD a_k ) ++ "$."
+    , fx <| "La dérivée de $f$ est la fonction $f\\prime:x\\mapsto " ++ ( poly [3*a, 2*b, c + d] ) ++ "$."
+    , vr <| "la fonction $f$ est croissante sur l'intervalle $\\left[" ++ String.fromInt x_1 ++ ";" ++ String.fromInt x_2 ++ "\\right]$"
+    , fx <| "la fonction $f$ est décroissante sur l'intervalle $\\left[" ++ String.fromInt x_1 ++ ";" ++ String.fromInt x_2 ++ "\\right]$"
+    , vr <| "la fonction $f$ est décroissante sur l'intervalle $\\left]-\\infty;" ++ String.fromInt m ++ "\\right]$"
+    , fx <| "la fonction $f$ est croissante sur l'intervalle $\\left]-\\infty;" ++ String.fromInt m ++ "\\right[$"
+    , fx <| "la fonction $f$ est croissante sur l'intervalle $\\left[" ++ String.fromInt x_1 ++ ";+\\infty\\right[$"
+    , fx <| "la fonction $f$ est décroissante sur l'intervalle $\\left[" ++ String.fromInt x_1 ++ ";+\\infty\\right[$"
+    {--
+    , p [] [ text ("----") ]
+    --}
+    , p [] [ text ("==== Dérivée, Polynômes, derivPoly04") ]
+    ]
+
+polyD a_ks = polyDbis a_ks ( List.length a_ks - 1 )
+
+polyDbis a_ks n =
+  case a_ks of
+    [] -> []
+    a_0 :: [] -> []
+    a_k :: a_kss -> ( n*a_k ) :: polyDbis a_kss ( n - 1 ) 
+
+equaDiff04 a = -- a négatif
+  let
+    f aa = mathTeX ( fonction ( aa ) )
+    vr aa = p [] [ text ( "+" ++ ( f aa ) ) ]
+    fx aa = p [] [ text ( "-" ++ ( f aa ) ) ]
+  in
+  div []
+    [ p [] [ text <| "Parmi les fonctions ci-dessous, lesquelles sont des solutions de l'équation différentielle $y'=" ++ String.fromInt a ++ "y$ ?" ]
+    , vr <| String.fromInt ( a - 1 ) ++ "e^{" ++ String.fromInt a ++ "x}"
+    , vr <| String.fromInt ( a + 4 ) ++ "e^{" ++ String.fromInt a ++ "x}"
+    , vr <| String.fromInt a ++ "e^{" ++ String.fromInt a ++ "x}"
+    , fx <| String.fromInt a ++ "e^{" ++ String.fromInt (a-1) ++ "x}"
+    , fx <| String.fromInt ( a - 3 ) ++ "e^x"
+    , fx <| String.fromInt ( a + 7 ) ++ "e^x" ++ String.fromInt a
+    , fx <| String.fromInt a ++ "e^x"
+    , fx <| String.fromInt a ++ "e^x+" ++ String.fromInt ( a + 100)
+    , fx <| String.fromInt ( a - 1 ) ++ "e^x+" ++ String.fromInt ( a + 100)
+    , fx <| String.fromInt ( a - 8 ) ++ "e^{" ++ String.fromInt (a-1) ++ "x}" ++ String.fromInt a
+    {--
+    , p [] [ text ("----") ]
+    --}
+    , p [] [ text ("==== Équations différentielles, equaDiff04") ]
+    ]
+
+equaDiff05 param =
+  case param of
+    [] -> div [] []
+    a :: [] -> div [] []
+    a :: b :: c -> equaDiff05Bis a b
+
+equaDiff05Bis a b = -- a positif, b négatif, pas de simplification
+  let
+    f aa = mathTeX ( fonction ( aa ) )
+    vr aa = p [] [ text ( "+" ++ ( f aa ) ) ]
+    fx aa = p [] [ text ( "-" ++ ( f aa ) ) ]
+  in
+  div []
+    [ p [] [ text <| "Parmi les fonctions ci-dessous, lesquelles sont des solutions de l'équation différentielle $" ++ String.fromInt a ++"y'=" ++ String.fromInt b ++ "y$ ?" ]
+    , vr <| String.fromInt ( a - 17 ) ++ "e^{-\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}x}"
+    , vr <| String.fromInt ( a + 23 ) ++ "e^{-\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}x}"
+    , fx <| String.fromInt ( a + 3 ) ++ "e^{\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}x}"
+    , fx <| String.fromInt ( a - 17 ) ++ "e^{\\frac{" ++ String.fromInt a ++ "}{" ++ String.fromInt (0 - b) ++ "}x}"
+    , fx <| String.fromInt ( a + 23 ) ++ "e^{-\\frac{" ++ String.fromInt a ++ "}{" ++ String.fromInt (0 - b) ++ "}x}"
+    , fx <| String.fromInt a ++ "e^{" ++ String.fromInt b ++ "x}-\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}"
+    , fx <| String.fromInt a ++ "e^{" ++ String.fromInt b ++ "x}+\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}"
+    , fx <| String.fromInt b ++ "e^{" ++ String.fromInt b ++ "x}-\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}"
+    , fx <| String.fromInt b ++ "e^{" ++ String.fromInt b ++ "x}+\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}"
+    , fx <| "e^x+\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}"
+    {--
+    , p [] [ text ("----") ]
+    --}
+    , p [] [ text ("==== Équations différentielles, equaDiff05") ]
+    ]
+
+equaDiff06 param =
+  case param of
+    [] -> div [] []
+    a :: [] -> div [] []
+    a :: b :: c -> equaDiff06Bis a b
+
+equaDiff06Bis a b = -- a positif, b négatif, pas de simplification
+  let
+    f aa = mathTeX ( fonction ( aa ) )
+    vr aa = p [] [ text ( "+" ++ ( f aa ) ) ]
+    fx aa = p [] [ text ( "-" ++ ( f aa ) ) ]
+  in
+  div []
+    [ p [] [ text <| "Parmi les fonctions ci-dessous, lesquelles sont des solutions de l'équation différentielle $y'=" ++ String.fromInt a ++ "y" ++ String.fromInt b ++"$ ?" ]
+    , fx <| String.fromInt ( a - 17 ) ++ "e^{-\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}x}"
+    , fx <| String.fromInt ( a + 23 ) ++ "e^{-\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}x}"
+    , fx <| String.fromInt ( a + 3 ) ++ "e^{\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}x}"
+    , fx <| String.fromInt ( a - 17 ) ++ "e^{\\frac{" ++ String.fromInt a ++ "}{" ++ String.fromInt (0 - b) ++ "}x}"
+    , fx <| String.fromInt ( a + 23 ) ++ "e^{-\\frac{" ++ String.fromInt a ++ "}{" ++ String.fromInt (0 - b) ++ "}x}"
+    , fx <| String.fromInt a ++ "e^{" ++ String.fromInt a ++ "x}-\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}"
+    , vr <| String.fromInt a ++ "e^{" ++ String.fromInt a ++ "x}+\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}"
+    , fx <| String.fromInt b ++ "e^{" ++ String.fromInt a ++ "x}-\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}"
+    , vr <| String.fromInt b ++ "e^{" ++ String.fromInt a ++ "x}+\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}"
+    , fx <| "e^x+\\frac{" ++ String.fromInt (0 - b) ++ "}{" ++ String.fromInt a ++ "}"
+    {--
+    , p [] [ text ("----") ]
+    --}
+    , p [] [ text ("==== Équations différentielles, equaDiff06") ]
+    ]
+
+primitLn02 a_k =
+  case a_k of
+    [] -> div [] []
+    a :: [] -> div [] []
+    a :: b :: c -> primitLn02Bis a b
+
+primitLn02Bis a b =
+  let
+    f aa = mathTeX ( fonction ( aa ) )
+    vr aa = p [] [ text ( "+" ++ ( f aa ) ) ]
+    fx aa = p [] [ text ( "-" ++ ( f aa ) ) ]
+    axpb = poly [a,b]
+  in
+  div []
+    [ p [] [ text <| "Parmi les fonctions ci-dessous, lesquelles sont des primitives de la fonction " ++ ( f <| "\\frac{" ++ String.fromInt a ++ "}{" ++ axpb ++ "}" ) ++ " ?" ]
+    , vr <| "\\ln\\left(" ++ axpb ++ "\\right)"
+    , vr <| "\\ln\\left(" ++ axpb ++ "\\right)+" ++ String.fromInt ( b + 30 )
+    , vr <| "\\ln\\left(" ++ axpb ++ "\\right)" ++ String.fromInt ( a - 20)
+    , fx <| "\\frac{" ++ String.fromInt (a*a) ++ "}{\\left(" ++ axpb ++ "\\right)^2}"
+    , fx <| "\\frac{" ++ String.fromInt (a*a) ++ "}{" ++ axpb ++ "}" ++ String.fromInt ( b + 30 )
+    , fx <| "\\frac{" ++ String.fromInt (0 - a*a) ++ "}{\\left(" ++ axpb ++ "\\right)^2}"
+    , fx <| "\\frac{" ++ String.fromInt (0 - a*a) ++ "}{" ++ axpb ++ "}" ++ String.fromInt ( b + 30 )
+    , fx <| "\\frac{" ++ String.fromInt (0 - a*a) ++ "}{" ++ axpb ++ "}" ++ String.fromInt ( a - 20)
+    , fx <| "\\frac{" ++ poly [a*a, a*b+a*a] ++ "}{\\left(" ++ axpb ++ "\\right)^2}"
+    , fx <| "\\frac{" ++ poly [a*a, a*b-a*a] ++ "}{\\left(" ++ axpb ++ "\\right)^2}"
+    {--
+    , p [] [ text ("----") ]
+    --}
+    , p [] [ text ("==== Primitives, Logarithme, primitLn02") ]
+    ]
+
+primitPoly02 a_k =
+  case a_k of
+    [] -> div [] []
+    a :: [] -> div [] []
+    a :: b :: [] -> div [] []
+    a :: b :: c :: [] -> div [] []
+    a :: b :: c :: d :: e -> primitPoly02Bis a b c d
+
+primitPoly02Bis a b c d =
+  let
+    pol = [a,b,c,d,0]
+    polD = polyD pol
+    polDD = polyD polD
+    f a_k = mathTeX ( fonction ( poly a_k ) )
+    vr a_k = p [] [ text ( "+" ++ ( f a_k ) ) ]
+    fx a_k = p [] [ text ( "-" ++ ( f a_k ) ) ]
+  in
+  div []
+    [ p [] [ text <| "Parmi les fonctions ci-dessous, lesquelles sont des primitives de la fonction " ++ ( f polD ) ++ " ?" ]
+    , vr <| List.map2 (+) pol [0,0,0,0,5]
+    , vr <| List.map2 (+) pol [0,0,0,0,-8]
+    , vr <| List.map2 (+) pol [0,0,0,0,8]
+    , fx <| List.map2 (+) polD [0,0,0,8]
+    , fx <| List.map2 (+) polD [0,0,0,-5]
+    , fx <| List.map2 (+) polD [0,0,0,-8]
+    , fx <| List.map2 (+) polDD [0,0,8]
+    , fx <| List.map2 (+) polDD [0,0,-5]
+    , fx <| List.map2 (+) polDD [0,0,-8]
+    {--
+    , p [] [ text ("----") ]
+    --}
+    , p [] [ text ("==== Primitives, Polynômes, primitPoly02") ]
+    ]
+
+
+
+