|
|
|
@ -31,7 +31,7 @@ import Random.Extra |
|
|
|
import Random.List |
|
|
|
import Random.List |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sujetTest = |
|
|
|
blocsTest = |
|
|
|
"""a : 2,4 |
|
|
|
"""a : 2,4 |
|
|
|
b : 3,5,8 |
|
|
|
b : 3,5,8 |
|
|
|
c : 6,7,9 |
|
|
|
c : 6,7,9 |
|
|
|
@ -110,12 +110,6 @@ update msg model = |
|
|
|
( { model | structureDuSujet = nouvelleStructure } |
|
|
|
( { model | structureDuSujet = nouvelleStructure } |
|
|
|
, Cmd.none |
|
|
|
, Cmd.none |
|
|
|
) |
|
|
|
) |
|
|
|
{-- |
|
|
|
|
|
|
|
Variables nouvellesVariables -> |
|
|
|
|
|
|
|
( { model | variables = nouvellesVariables } |
|
|
|
|
|
|
|
, Cmd.none |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
--} |
|
|
|
|
|
|
|
SujetGenere nouveauSujetGenere -> |
|
|
|
SujetGenere nouveauSujetGenere -> |
|
|
|
( { model | sujetGenere = nouveauSujetGenere } |
|
|
|
( { model | sujetGenere = nouveauSujetGenere } |
|
|
|
, Cmd.none |
|
|
|
, Cmd.none |
|
|
|
@ -124,7 +118,7 @@ update msg model = |
|
|
|
let |
|
|
|
let |
|
|
|
f strSuj = |
|
|
|
f strSuj = |
|
|
|
case P.run (withIndent -1 sujet) strSuj of |
|
|
|
case P.run (withIndent -1 sujet) strSuj of |
|
|
|
Ok sjt -> Random.map quizScanVoirSujet <| sujetsAleatoires sjt |
|
|
|
Ok sjt -> Random.map quizScanVoirBlocs <| sujetsAleatoires sjt |
|
|
|
Err erreurs -> Random.constant <| deadEndsToStringBis erreurs |
|
|
|
Err erreurs -> Random.constant <| deadEndsToStringBis erreurs |
|
|
|
in |
|
|
|
in |
|
|
|
( model |
|
|
|
( model |
|
|
|
@ -230,12 +224,13 @@ text chaine = |
|
|
|
██ ██ ██ ██ ██ ███████ ███████ ██ ██ ███████ ██████ █████ ███████ ██ |
|
|
|
██ ██ ██ ██ ██ ███████ ███████ ██ ██ ███████ ██████ █████ ███████ ██ |
|
|
|
-} |
|
|
|
-} |
|
|
|
|
|
|
|
|
|
|
|
type alias Sujet = List Probleme |
|
|
|
type alias Blocs = List Bloc |
|
|
|
|
|
|
|
|
|
|
|
type Probleme = |
|
|
|
type Bloc = |
|
|
|
VariableAremplacer Aremplacer Sujet |
|
|
|
Sujet (List Bloc) |
|
|
|
| Entete Macro Sujet |
|
|
|
| VariableAremplacer Aremplacer Blocs |
|
|
|
-- | ProblemeOuvert NombreDeLigne TexteVariable |
|
|
|
| Entete Macro Blocs |
|
|
|
|
|
|
|
-- | ProblèmeOuvert NombreDeLigne TexteVariable |
|
|
|
| QCM Macro Propositions |
|
|
|
| QCM Macro Propositions |
|
|
|
| VraiFaux Propositions |
|
|
|
| VraiFaux Propositions |
|
|
|
|
|
|
|
|
|
|
|
@ -248,15 +243,15 @@ type Proposition = |
|
|
|
type alias NombreDeLigne = Int |
|
|
|
type alias NombreDeLigne = Int |
|
|
|
|
|
|
|
|
|
|
|
{-- |
|
|
|
{-- |
|
|
|
voirSujetParse sujetPotentiel = |
|
|
|
voirBlocsParse blocsPotentiel = |
|
|
|
case P.run (withIndent -1 sujet) sujetPotentiel of |
|
|
|
case P.run (withIndent -1 blocs) blocsPotentiel of |
|
|
|
Ok sjt -> voirSujet sjt |
|
|
|
Ok sjt -> voirBlocs sjt |
|
|
|
Err erreurs -> deadEndsToStringBis erreurs |
|
|
|
Err erreurs -> deadEndsToStringBis erreurs |
|
|
|
--} |
|
|
|
--} |
|
|
|
|
|
|
|
|
|
|
|
voirSujetParseAleatoire sujetPotentiel = |
|
|
|
voirBlocsParseAleatoire blocsPotentiel = |
|
|
|
case P.run (withIndent -1 sujet) sujetPotentiel of |
|
|
|
case P.run (withIndent -1 blocs) blocsPotentiel of |
|
|
|
Ok sjt -> Random.map quizScanVoirSujet <| sujetAleatoire sjt |
|
|
|
Ok sjt -> Random.map quizScanVoirBlocs <| blocsAleatoires sjt |
|
|
|
Err erreurs -> Random.constant <| deadEndsToStringBis erreurs |
|
|
|
Err erreurs -> Random.constant <| deadEndsToStringBis erreurs |
|
|
|
|
|
|
|
|
|
|
|
deadEndsToStringBis errs = |
|
|
|
deadEndsToStringBis errs = |
|
|
|
@ -270,15 +265,15 @@ voirErreur err = |
|
|
|
++ " | Colonne : " ++ String.fromInt err.col |
|
|
|
++ " | Colonne : " ++ String.fromInt err.col |
|
|
|
|
|
|
|
|
|
|
|
{-- |
|
|
|
{-- |
|
|
|
voirSujet = S.join "\n" << L.map voirProbleme |
|
|
|
voirBlocs = S.join "\n" << L.map voirBloc |
|
|
|
|
|
|
|
|
|
|
|
voirProbleme prblm = |
|
|
|
voirBloc prblm = |
|
|
|
-- Debug.log "voirProbleme " <| |
|
|
|
-- Debug.log "voirBloc " <| |
|
|
|
case prblm of |
|
|
|
case prblm of |
|
|
|
Entete mcr sjt -> |
|
|
|
Entete mcr sjt -> |
|
|
|
voirMacro mcr |
|
|
|
voirMacro mcr |
|
|
|
++ "\n" |
|
|
|
++ "\n" |
|
|
|
++ voirSujet sjt |
|
|
|
++ voirBlocs sjt |
|
|
|
VraiFaux prps -> |
|
|
|
VraiFaux prps -> |
|
|
|
let |
|
|
|
let |
|
|
|
f prp = |
|
|
|
f prp = |
|
|
|
@ -287,18 +282,23 @@ voirProbleme prblm = |
|
|
|
Faux mcr -> voirMacro mcr |
|
|
|
Faux mcr -> voirMacro mcr |
|
|
|
in |
|
|
|
in |
|
|
|
S.join "\n" <| L.map f prps |
|
|
|
S.join "\n" <| L.map f prps |
|
|
|
VariableAremplacer ar sjt -> "" ++ voirSujet sjt |
|
|
|
VariableAremplacer ar sjt -> "" ++ voirBlocs sjt |
|
|
|
--} |
|
|
|
--} |
|
|
|
|
|
|
|
|
|
|
|
sujet : Parser Sujet |
|
|
|
sujet : Parser Blocs |
|
|
|
sujet = |
|
|
|
sujet = |
|
|
|
|
|
|
|
succeed (L.singleton << Sujet) |
|
|
|
|
|
|
|
|= blocs |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
blocs : Parser Blocs |
|
|
|
|
|
|
|
blocs = |
|
|
|
let |
|
|
|
let |
|
|
|
problemes prblms = |
|
|
|
problemes prblms = |
|
|
|
let |
|
|
|
let |
|
|
|
boucle = |
|
|
|
boucle = |
|
|
|
-- Debug.log "Boucle sur un probleme (bis) " <| |
|
|
|
-- Debug.log "Boucle sur un bloc (bis) " <| |
|
|
|
succeed ( \prblm -> Loop (prblm :: prblms) ) |
|
|
|
succeed ( \prblm -> Loop (prblm :: prblms) ) |
|
|
|
|= probleme |
|
|
|
|= bloc |
|
|
|
fin = |
|
|
|
fin = |
|
|
|
map (\_ -> Done (List.reverse prblms)) |
|
|
|
map (\_ -> Done (List.reverse prblms)) |
|
|
|
suite col_ind = |
|
|
|
suite col_ind = |
|
|
|
@ -307,7 +307,7 @@ sujet = |
|
|
|
|. end |
|
|
|
|. end |
|
|
|
|> fin |
|
|
|
|> fin |
|
|
|
, if Tuple.first col_ind > Tuple.second col_ind then -- if col > ind |
|
|
|
, if Tuple.first col_ind > Tuple.second col_ind then -- if col > ind |
|
|
|
boucle -- |> Debug.log "Boucle sur un probleme " |
|
|
|
boucle -- |> Debug.log "Boucle sur un bloc " |
|
|
|
else |
|
|
|
else |
|
|
|
succeed () |
|
|
|
succeed () |
|
|
|
|> fin |
|
|
|
|> fin |
|
|
|
@ -322,8 +322,8 @@ sujet = |
|
|
|
in |
|
|
|
in |
|
|
|
loop [] problemes |
|
|
|
loop [] problemes |
|
|
|
|
|
|
|
|
|
|
|
probleme : Parser Probleme |
|
|
|
bloc : Parser Bloc |
|
|
|
probleme = |
|
|
|
bloc = |
|
|
|
let |
|
|
|
let |
|
|
|
suite = |
|
|
|
suite = |
|
|
|
flip withIndent |
|
|
|
flip withIndent |
|
|
|
@ -344,11 +344,11 @@ reserve = Set.fromList |
|
|
|
, "var" |
|
|
|
, "var" |
|
|
|
] |
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
sousSujet = |
|
|
|
sousBlocs = |
|
|
|
let |
|
|
|
let |
|
|
|
suite col_ind = |
|
|
|
suite col_ind = |
|
|
|
if Tuple.first col_ind > Tuple.second col_ind then -- if col > ind |
|
|
|
if Tuple.first col_ind > Tuple.second col_ind then -- if col > ind |
|
|
|
withIndent (Tuple.first col_ind) ( lazy (\_ -> sujet) ) -- Aucune idée de l'effet du lazy, ça marche sans... |
|
|
|
withIndent (Tuple.first col_ind) ( lazy (\_ -> blocs) ) -- Aucune idée de l'effet du lazy, ça marche sans... |
|
|
|
else |
|
|
|
else |
|
|
|
succeed [] |
|
|
|
succeed [] |
|
|
|
in |
|
|
|
in |
|
|
|
@ -358,12 +358,12 @@ sousSujet = |
|
|
|
|= getIndent |
|
|
|
|= getIndent |
|
|
|
|> andThen suite |
|
|
|
|> andThen suite |
|
|
|
|
|
|
|
|
|
|
|
entete : Parser Probleme |
|
|
|
entete : Parser Bloc |
|
|
|
entete = |
|
|
|
entete = |
|
|
|
-- Debug.log "entete " <| |
|
|
|
-- Debug.log "entete " <| |
|
|
|
succeed Entete |
|
|
|
succeed Entete |
|
|
|
|= macro |
|
|
|
|= macro |
|
|
|
|= sujet -- sousSujet |
|
|
|
|= blocs -- sousBlocs |
|
|
|
|
|
|
|
|
|
|
|
vraiFaux = |
|
|
|
vraiFaux = |
|
|
|
-- Debug.log "vraiFaux " <| |
|
|
|
-- Debug.log "vraiFaux " <| |
|
|
|
@ -517,12 +517,12 @@ parserAremplacer variables = |
|
|
|
espaces = |
|
|
|
espaces = |
|
|
|
chompWhile <| (==) ' ' |
|
|
|
chompWhile <| (==) ' ' |
|
|
|
|
|
|
|
|
|
|
|
variableAremplacer : Parser Probleme |
|
|
|
variableAremplacer : Parser Bloc |
|
|
|
variableAremplacer = |
|
|
|
variableAremplacer = |
|
|
|
-- Debug.log "variableAremplacer " <| |
|
|
|
-- Debug.log "variableAremplacer " <| |
|
|
|
succeed VariableAremplacer |
|
|
|
succeed VariableAremplacer |
|
|
|
|= aRemplacer |
|
|
|
|= aRemplacer |
|
|
|
|= sujet -- sousSujet |
|
|
|
|= blocs -- sousBlocs |
|
|
|
|
|
|
|
|
|
|
|
aRemplacer : Parser Aremplacer |
|
|
|
aRemplacer : Parser Aremplacer |
|
|
|
aRemplacer = |
|
|
|
aRemplacer = |
|
|
|
@ -552,36 +552,38 @@ aRemplacer = |
|
|
|
███████ █████ ██ ██ ██ ███████ ███████ ██ ██ ██ ██████ ██ ██ ██ ███████ |
|
|
|
███████ █████ ██ ██ ██ ███████ ███████ ██ ██ ██ ██████ ██ ██ ██ ███████ |
|
|
|
-} |
|
|
|
-} |
|
|
|
|
|
|
|
|
|
|
|
sujetsAleatoires : Sujet -> Random.Generator Sujet |
|
|
|
sujetsAleatoires : Blocs -> Random.Generator Blocs |
|
|
|
sujetsAleatoires sjt = |
|
|
|
sujetsAleatoires sjt = |
|
|
|
sujetAleatoire sjt |
|
|
|
blocsAleatoires sjt |
|
|
|
|> Random.list 89 |
|
|
|
|> Random.list 89 |
|
|
|
|> Random.map L.concat |
|
|
|
|> Random.map L.concat |
|
|
|
|
|
|
|
|
|
|
|
sujetAleatoire : Sujet -> Random.Generator Sujet |
|
|
|
blocsAleatoires : Blocs -> Random.Generator Blocs |
|
|
|
sujetAleatoire sjt = |
|
|
|
blocsAleatoires sjt = |
|
|
|
Random.map L.concat |
|
|
|
Random.map L.concat |
|
|
|
<| Random.Extra.sequence |
|
|
|
<| Random.Extra.sequence |
|
|
|
<| L.map problemeAleatoire sjt |
|
|
|
<| L.map blocAleatoire sjt |
|
|
|
|
|
|
|
|
|
|
|
problemeAleatoire : Probleme -> Random.Generator Sujet |
|
|
|
blocAleatoire : Bloc -> Random.Generator Blocs |
|
|
|
problemeAleatoire prblm = |
|
|
|
blocAleatoire prblm = |
|
|
|
case prblm of |
|
|
|
case prblm of |
|
|
|
|
|
|
|
Sujet blcs -> |
|
|
|
|
|
|
|
Random.map (L.singleton << Sujet) (blocsAleatoires blcs) |
|
|
|
VariableAremplacer ar sjt -> |
|
|
|
VariableAremplacer ar sjt -> |
|
|
|
let |
|
|
|
let |
|
|
|
vrbl = ar.var |
|
|
|
vrbl = ar.var |
|
|
|
vlr = valeurAleatoire "" ar.vals |
|
|
|
vlr = valeurAleatoire "" ar.vals |
|
|
|
f sj vl = remplacerLaVariableDansLeSujetAleatoire vrbl vl sj |
|
|
|
f sj vl = remplacerLaVariableDansLesBlocsAleatoires vrbl vl sj |
|
|
|
in |
|
|
|
in |
|
|
|
{-- |
|
|
|
{-- |
|
|
|
Debug.log |
|
|
|
Debug.log |
|
|
|
( "problemeAleatoire, branche VariableAremplacer, variable : " |
|
|
|
( "blocAleatoire, branche VariableAremplacer, variable : " |
|
|
|
++ vrbl ++ " " |
|
|
|
++ vrbl ++ " " |
|
|
|
) <| |
|
|
|
) <| |
|
|
|
--} |
|
|
|
--} |
|
|
|
Random.andThen (f sjt) vlr |
|
|
|
Random.andThen (f sjt) vlr |
|
|
|
Entete mcr sjt -> |
|
|
|
Entete mcr sjt -> |
|
|
|
Random.map (L.singleton << Entete mcr) (sujetAleatoire sjt) |
|
|
|
Random.map (L.singleton << Entete mcr) (blocsAleatoires sjt) |
|
|
|
VraiFaux prps -> |
|
|
|
VraiFaux prps -> |
|
|
|
Random.map |
|
|
|
Random.map |
|
|
|
(L.singleton << VraiFaux << L.singleton) |
|
|
|
(L.singleton << VraiFaux << L.singleton) |
|
|
|
@ -602,18 +604,20 @@ valeurAleatoire f fs = |
|
|
|
ff :: fss -> |
|
|
|
ff :: fss -> |
|
|
|
Random.uniform ff fss |
|
|
|
Random.uniform ff fss |
|
|
|
|
|
|
|
|
|
|
|
remplacerLaVariableDansLeProblemeAleatoire : |
|
|
|
remplacerLaVariableDansLeBlocAleatoire : |
|
|
|
String -> String -> Probleme -> Random.Generator Sujet |
|
|
|
String -> String -> Bloc -> Random.Generator Blocs |
|
|
|
remplacerLaVariableDansLeProblemeAleatoire vrbl vlr prblm = |
|
|
|
remplacerLaVariableDansLeBlocAleatoire vrbl vlr prblm = |
|
|
|
case prblm of |
|
|
|
case prblm of |
|
|
|
|
|
|
|
Sujet blcs -> |
|
|
|
|
|
|
|
remplacerLaVariableDansLesBlocsAleatoires vrbl vlr blcs |
|
|
|
VariableAremplacer ar sjt -> |
|
|
|
VariableAremplacer ar sjt -> |
|
|
|
problemeAleatoire (VariableAremplacer ar sjt) |
|
|
|
blocAleatoire (VariableAremplacer ar sjt) |
|
|
|
|> Random.andThen (remplacerLaVariableDansLeSujetAleatoire vrbl vlr) |
|
|
|
|> Random.andThen (remplacerLaVariableDansLesBlocsAleatoires vrbl vlr) |
|
|
|
Entete mcr sjt -> |
|
|
|
Entete mcr sjt -> |
|
|
|
Random.map L.singleton |
|
|
|
Random.map L.singleton |
|
|
|
<| Random.map2 Entete |
|
|
|
<| Random.map2 Entete |
|
|
|
( Random.constant <| remplacerLaVariableParLaValeurDansLaMacro vrbl vlr mcr ) |
|
|
|
( Random.constant <| remplacerLaVariableParLaValeurDansLaMacro vrbl vlr mcr ) |
|
|
|
( remplacerLaVariableDansLeSujetAleatoire vrbl vlr sjt ) |
|
|
|
( remplacerLaVariableDansLesBlocsAleatoires vrbl vlr sjt ) |
|
|
|
QCM mcr prps -> |
|
|
|
QCM mcr prps -> |
|
|
|
Random.map L.singleton |
|
|
|
Random.map L.singleton |
|
|
|
<| Random.map2 QCM |
|
|
|
<| Random.map2 QCM |
|
|
|
@ -630,12 +634,12 @@ remplacerLaVariableDansLeProblemeAleatoire vrbl vlr prblm = |
|
|
|
) |
|
|
|
) |
|
|
|
<| valeurAleatoire ( Vrai [ Texte "Le prof de maths est le meilleur." ] ) prps |
|
|
|
<| valeurAleatoire ( Vrai [ Texte "Le prof de maths est le meilleur." ] ) prps |
|
|
|
|
|
|
|
|
|
|
|
remplacerLaVariableDansLeSujetAleatoire : |
|
|
|
remplacerLaVariableDansLesBlocsAleatoires : |
|
|
|
String -> String -> Sujet -> Random.Generator Sujet |
|
|
|
String -> String -> Blocs -> Random.Generator Blocs |
|
|
|
remplacerLaVariableDansLeSujetAleatoire vrbl vlr sjt = |
|
|
|
remplacerLaVariableDansLesBlocsAleatoires vrbl vlr sjt = |
|
|
|
Random.map L.concat |
|
|
|
Random.map L.concat |
|
|
|
<| Random.Extra.sequence |
|
|
|
<| Random.Extra.sequence |
|
|
|
<| L.map (remplacerLaVariableDansLeProblemeAleatoire vrbl vlr) sjt |
|
|
|
<| L.map (remplacerLaVariableDansLeBlocAleatoire vrbl vlr) sjt |
|
|
|
|
|
|
|
|
|
|
|
remplacerLaVariableParLaValeurDansLaProposition vrbl vlr prp = |
|
|
|
remplacerLaVariableParLaValeurDansLaProposition vrbl vlr prp = |
|
|
|
case prp of |
|
|
|
case prp of |
|
|
|
@ -652,18 +656,20 @@ remplacerLaVariableParLaValeurDansLaProposition vrbl vlr prp = |
|
|
|
▀▀ |
|
|
|
▀▀ |
|
|
|
-} |
|
|
|
-} |
|
|
|
|
|
|
|
|
|
|
|
quizScanVoirSujet : Sujet -> String |
|
|
|
quizScanVoirBlocs : Blocs -> String |
|
|
|
quizScanVoirSujet sjt = |
|
|
|
quizScanVoirBlocs blcs = |
|
|
|
"\n\\begin{Sujet}\n" |
|
|
|
S.join "\n" <| L.map quizScanVoirBloc blcs |
|
|
|
++ ( S.join "\n" <| L.map quizScanVoirProbleme sjt ) |
|
|
|
|
|
|
|
++ "\n\\end{Sujet}" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
quizScanVoirProbleme prblm = |
|
|
|
quizScanVoirBloc prblm = |
|
|
|
case prblm of |
|
|
|
case prblm of |
|
|
|
|
|
|
|
Sujet blcs -> |
|
|
|
|
|
|
|
"\n\\begin{Sujet}\n" |
|
|
|
|
|
|
|
++ quizScanVoirBlocs blcs |
|
|
|
|
|
|
|
++ "\n\\end{Sujet}" |
|
|
|
Entete mcr sjt -> |
|
|
|
Entete mcr sjt -> |
|
|
|
voirMacro mcr |
|
|
|
voirMacro mcr |
|
|
|
++ "\n" |
|
|
|
++ "\n" |
|
|
|
++ quizScanVoirSujet sjt |
|
|
|
++ quizScanVoirBlocs sjt |
|
|
|
QCM mcr prps -> |
|
|
|
QCM mcr prps -> |
|
|
|
let |
|
|
|
let |
|
|
|
f prp = |
|
|
|
f prp = |
|
|
|
@ -689,7 +695,11 @@ quizScanVoirProbleme prblm = |
|
|
|
"\n \\begin{VraiFaux}\n \\Faux{" ++ voirMacro mc ++ "}\n \\end{VraiFaux}" |
|
|
|
"\n \\begin{VraiFaux}\n \\Faux{" ++ voirMacro mc ++ "}\n \\end{VraiFaux}" |
|
|
|
in |
|
|
|
in |
|
|
|
S.concat <| L.map f prps |
|
|
|
S.concat <| L.map f prps |
|
|
|
VariableAremplacer ar sjt -> "" ++ quizScanVoirSujet sjt |
|
|
|
VariableAremplacer ar sjt -> |
|
|
|
|
|
|
|
"" ++ quizScanVoirBlocs sjt |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{- |
|
|
|
{- |
|
|
|
███ ███ ██ ██ ██ ███████ ██ ██ ██████ |
|
|
|
███ ███ ██ ██ ██ ███████ ██ ██ ██████ |
|
|
|
████ ████ ██ ██ ██ ██ ██ ██ ██ ██ |
|
|
|
████ ████ ██ ██ ██ ██ ██ ██ ██ ██ |
|
|
|
|