private static bool bLireMot(List <string> lstMots, int iNumMot, ref clsMotExistant mot) { mot = new clsMotExistant(); mot.iNumMotExistant = iNumMot; int iNumSegment = (iNumMot * clsMotExistant.iNbColonnes); mot.sMot = lstMots[iNumSegment + clsMotExistant.iColMot]; mot.sDef = lstMots[iNumSegment + clsMotExistant.iColDef]; mot.sPrefixe = lstMots[iNumSegment + clsMotExistant.iColPrefixe]; mot.sSuffixe = lstMots[iNumSegment + clsMotExistant.iColSuffixe]; mot.sNivPrefixe = lstMots[iNumSegment + clsMotExistant.iColNivPrefixe]; mot.iNivPrefixe = int.Parse(mot.sNivPrefixe); mot.sNivSuffixe = lstMots[iNumSegment + clsMotExistant.iColNivSuffixe]; mot.iNivSuffixe = int.Parse(mot.sNivSuffixe); mot.sUnicitePrefixe = lstMots[iNumSegment + clsMotExistant.iColUnicitePrefixe]; mot.sUniciteSuffixe = lstMots[iNumSegment + clsMotExistant.iColUniciteSuffixe]; mot.sFreqPrefixe = lstMots[iNumSegment + clsMotExistant.iColFreqPrefixe]; mot.sFreqSuffixe = lstMots[iNumSegment + clsMotExistant.iColFreqSuffixe]; // 01/05/2019 mot.bElisionPrefixe = false; if (clsConst.bElision && mot.sPrefixe.EndsWith(clsConst.sCarElisionO)) { mot.bElisionPrefixe = true; mot.sPrefixe = mot.sPrefixe.Replace(clsConst.sCarElisionO, clsConst.sCarO); } mot.ParserDefinition(); mot.Synthese(); return(true); }
public static void InitMots(List <string> lstMots, Dictionary <string, clsMotExistant> dicoMotsExistants) { int iNbItems = lstMots.Count; int iNbMots = iNbItems / clsMotExistant.iNbColonnes; for (int i = 0; i <= iNbMots - 1; i++) { clsMotExistant mot = null; if (!bLireMot(lstMots, i, ref mot)) { if (clsConst.bDebug) { Debugger.Break(); } continue; } if (dicoMotsExistants.ContainsKey(mot.sMot)) { if (clsConst.bDebug) { Debugger.Break(); } continue; } dicoMotsExistants.Add(mot.sMot, mot); } }
public static int iTirageMotExistantAutre( List <string> lstNiv, List <string> lstFreq, int iNumMotExistant, clsInitTirage itPrefixe, clsInitTirage itSuffixe, List <int> lstNumMotExistant, ref clsMotExistant motAutre) { // Tirer au hasard un autre mot du niveau demandé var enreg = from mot0 in m_dicoMotsExistants.ToList() where lstNiv.Contains(mot0.Value.sNivPrefixe) && lstNiv.Contains(mot0.Value.sNivSuffixe) && lstFreq.Contains(mot0.Value.sFreqPrefixe) && lstFreq.Contains(mot0.Value.sFreqSuffixe) && !lstNumMotExistant.Contains(iNumMotExistant) && !itPrefixe.lstSegmentsDejaTires.Contains(mot0.Value.sPrefixe) && !itSuffixe.lstSegmentsDejaTires.Contains(mot0.Value.sSuffixe) && !itPrefixe.lstSensSegmentDejaTires.Contains(mot0.Value.sDefPrefixe) && !itSuffixe.lstSensSegmentDejaTires.Contains(mot0.Value.sDefSuffixe) && !itPrefixe.lstUnicitesSegmentDejaTires.Contains(mot0.Value.sUnicitePrefixeSynth) && !itSuffixe.lstUnicitesSegmentDejaTires.Contains(mot0.Value.sUniciteSuffixeSynth) select mot0; int iNbEnreg = enreg.Count(); if (iNbEnreg == 0) { //if (clsConst.bDebug) Debugger.Break(); m_msgDelegue.AfficherMsg( "Aucun mot ne correspond à la sélection : Tirage impossible !"); return(clsConst.iTirageImpossible); } int iNbMotsExistantsFiltres = iNbEnreg; // On tire un nombre compris entre 0 et iNbSegmentsFilres - 1 (liste filtrée) int iNumMotExistantTire = clsUtil.iRandomiser(0, iNbMotsExistantsFiltres - 1); motAutre = enreg.ElementAtOrDefault(iNumMotExistantTire).Value; // Indice du mot dans la liste complète int iNumMotExistantAutre = motAutre.iNumMotExistant; lstNumMotExistant.Add(iNumMotExistantAutre); itPrefixe.lstSegmentsDejaTires.Add(motAutre.sPrefixe); itSuffixe.lstSegmentsDejaTires.Add(motAutre.sSuffixe); itPrefixe.lstSensSegmentDejaTires.Add(motAutre.sDefPrefixe); itSuffixe.lstSensSegmentDejaTires.Add(motAutre.sDefSuffixe); itPrefixe.lstUnicitesSegmentDejaTires.Add(motAutre.sUnicitePrefixeSynth); itSuffixe.lstUnicitesSegmentDejaTires.Add(motAutre.sUniciteSuffixeSynth); if (clsConst.bDebug && string.IsNullOrEmpty(motAutre.sUnicitePrefixeSynth)) { Debugger.Break(); } if (clsConst.bDebug && string.IsNullOrEmpty(motAutre.sUniciteSuffixeSynth)) { Debugger.Break(); } return(iNumMotExistant); }