예제 #1
0
 public void AjouterSegment(clsSegmentBase segment)
 {
     if (segment == null)
     {
         throw new ArgumentNullException("segment");
     }
     this.m_lstSegments.Add(segment.sSegment);
     this.m_lstSegments.Add(segment.sSens);
     this.m_lstSegments.Add(segment.sLogotron);
     this.m_lstSegments.Add(segment.sNiveau);
     this.m_lstSegments.Add(segment.sEtym);
     this.m_lstSegments.Add(segment.sUnicite);
     this.m_lstSegments.Add(segment.sOrigine);
     this.m_lstSegments.Add(segment.sFrequence);
 }
예제 #2
0
        public List <clsSegmentBase> ObtenirSegmentBases()
        {
            List <clsSegmentBase> lst = new List <clsSegmentBase>();
            int iNbSegments           = this.iLireNbSegments();

            for (int i = 0; i <= iNbSegments - 1; i++)
            {
                clsSegmentBase segment = null;
                if (this.bLireSegment(i, ref segment))
                {
                    lst.Add(segment);
                }
            }
            return(lst);
        }
예제 #3
0
 public clsInitTirage(clsSegmentBase segment)
 {
     this.lstNumSegmentDejaTires      = new List <int>();
     this.lstSegmentsDejaTires        = new List <string>();
     this.lstSensSegmentDejaTires     = new List <string>();
     this.lstUnicitesSegmentDejaTires = new List <string>();
     if (segment == null)
     {
         throw new ArgumentNullException("segment");
     }
     this.lstNumSegmentDejaTires.Add(segment.iNumSegment);
     this.lstSegmentsDejaTires.Add(segment.sSegment);
     this.lstSensSegmentDejaTires.Add(segment.sSens);
     if (segment.sUnicite.Length > 0)
     {
         this.lstUnicitesSegmentDejaTires.Add(segment.sUnicite);
     }
 }
예제 #4
0
        public int iLireNbSegmentsUniques(
            List <string> lstNiv, List <string> lstFreq,
            bool bGrecoLatin, bool bNeoRigolo)
        {
            //  Retourner la liste de segments uniques selon le sens, avec les niveaux indiqués
            //  (sélection du Logotron)
            if (lstNiv == null)
            {
                throw new ArgumentNullException("lstNiv");
            }
            if (lstFreq == null)
            {
                throw new ArgumentNullException("lstFreq");
            }

            HashSet <string> hsSegments = new HashSet <string>();
            int iNbSegments             = iLireNbSegments();

            for (int i = 0; i <= iNbSegments - 1; i++)
            {
                clsSegmentBase segment = null;
                if (!bLireSegment(i, ref segment))
                {
                    continue;
                }

                if (!lstNiv.Contains(segment.sNiveau))
                {
                    continue;
                }
                if (!lstFreq.Contains(segment.sFrequence))
                {
                    continue;
                }

                if (segment.sLogotron != clsConst.sSelectLogotron)
                {
                    continue;
                }

                if ((bGrecoLatin || !bNeoRigolo) &&
                    segment.sOrigine == enumOrigine.sNeologismeAmusant)
                {
                    //if (LogotronLib.clsConst.bDebug)
                    //    Console.WriteLine("Segment non retenu : " +
                    //        segment.sSegment + " : " + segment.sOrigine);
                    continue;
                }

                if (bGrecoLatin &&
                    !(segment.sOrigine == enumOrigine.sGrec ||
                      segment.sOrigine == enumOrigine.sLatin ||
                      segment.sOrigine == enumOrigine.sGrecoLatin))
                {
                    //if (LogotronLib.clsConst.bDebug)
                    //    Console.WriteLine("Segment non gréco-latin : " +
                    //        segment.sSegment + " : " + segment.sOrigine);
                    continue;
                }

                string sSensSansArticle = clsBase.sSupprimerArticle(segment.sSens);
                string sCleUniciteSens  = sSensSansArticle;
                if ((segment.sUnicite.Length > 0))
                {
                    sCleUniciteSens = segment.sUnicite;
                }
                if (!hsSegments.Contains(sCleUniciteSens))
                {
                    hsSegments.Add(sCleUniciteSens);
                }
            }
            return(hsSegments.Count);
        }
예제 #5
0
        public bool bLireSegment(int iNumSegmentL, ref clsSegmentBase segment)
        {
            segment = null;
            if (this.m_iNbColonnes <= 0)
            {
                if (clsConst.bDebug)
                {
                    Debugger.Break();
                }
                return(false);
            }

            if (iNumSegmentL == clsConst.iTirageImpossible)
            {
                return(false);
            }

            segment             = new clsSegmentBase();
            segment.iNumSegment = iNumSegmentL;
            int iNumSegment = iNumSegmentL * this.m_iNbColonnes;

            segment.sSegment = this.m_lstSegments[iNumSegment + iColSegment];
            if (clsConst.bDebug && segment.sSegment == null)
            {
                Debugger.Break();
            }
            //if (segment.sSegment.StartsWith("algo")) Debug.WriteLine("!");

            if (this.m_iNbColonnes <= iColSens)
            {
                return(true);
            }
            segment.sSens = this.m_lstSegments[iNumSegment + iColSens];
            if (clsConst.bDebug && segment.sSens == null)
            {
                Debugger.Break();
            }

            if (this.m_iNbColonnes <= iColLogotron)
            {
                return(true);
            }
            segment.sLogotron = this.m_lstSegments[iNumSegment + iColLogotron];
            if (clsConst.bDebug && segment.sLogotron == null)
            {
                Debugger.Break();
            }

            if (this.m_iNbColonnes <= iColNiveau)
            {
                return(true);
            }
            segment.sNiveau = this.m_lstSegments[iNumSegment + iColNiveau];
            if (clsConst.bDebug && segment.sNiveau == null)
            {
                Debugger.Break();
            }

            segment.iNiveau = int.Parse(segment.sNiveau);
            if (this.m_iNbColonnes <= iColEtym)
            {
                return(true);
            }
            segment.sEtym = this.m_lstSegments[iNumSegment + iColEtym];
            if (clsConst.bDebug && segment.sEtym == null)
            {
                Debugger.Break();
            }

            if (this.m_iNbColonnes <= iColUnicite)
            {
                return(true);
            }
            segment.sUnicite = this.m_lstSegments[iNumSegment + iColUnicite];
            if (clsConst.bDebug && segment.sUnicite == null)
            {
                Debugger.Break();
            }

            if (this.m_iNbColonnes <= iColOrigine)
            {
                return(true);
            }
            segment.sOrigine = this.m_lstSegments[iNumSegment + iColOrigine];
            if (clsConst.bDebug && segment.sOrigine == null)
            {
                Debugger.Break();
            }

            if (this.m_iNbColonnes <= iColFrequence)
            {
                return(true);
            }
            segment.sFrequence = this.m_lstSegments[iNumSegment + iColFrequence];
            if (clsConst.bDebug && segment.sFrequence == null)
            {
                Debugger.Break();
            }

            string sSensSansArticle = clsBase.sSupprimerArticle(segment.sSens);
            string sUniciteFinale   = sSensSansArticle;

            segment.sUniciteSynth = sUniciteFinale;
            if (segment.sUnicite.Length > 0)
            {
                segment.sUniciteSynth = segment.sUnicite;
            }

            if (this.m_iNbColonnes <= clsConst.iNbColonnes)
            {
                return(true);
            }
            return(true);
        }
예제 #6
0
        public static int iTirageMotExistant(
            List <string> lstNiv, List <string> lstFreq,
            ref clsSegmentBase prefixe, ref clsSegmentBase suffixe)
        {
            // Tirer au hasard un mot du niveau demandé

            // 01/05/2019 Test élision : mot0.Value.bElisionPrefixe &&

            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)
                        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);
            var mot = enreg.ElementAtOrDefault(iNumMotExistantTire).Value;

            if (mot == null)
            {
                if (clsConst.bDebug)
                {
                    Debugger.Break();
                }
                m_msgDelegue.AfficherMsg(
                    "Aucun mot ne correspond à la sélection : Tirage impossible !");
                return(clsConst.iTirageImpossible);
            }

            // Indice du mot dans la liste complète
            int iNumMotExistant = mot.iNumMotExistant;

            if (iNumMotExistant == 0)
            {
                if (clsConst.bDebug)
                {
                    Debugger.Break();
                }
                m_msgDelegue.AfficherMsg(
                    "Aucun mot ne correspond à la sélection : Tirage impossible !");
                return(clsConst.iTirageImpossible);
            }

            prefixe = new clsSegmentBase();
            suffixe = new clsSegmentBase();

            prefixe.sSegment      = mot.sPrefixe;
            prefixe.sLogotron     = clsConst.sSelectDictionnaire;
            prefixe.sNiveau       = mot.sNivPrefixe;
            prefixe.sSens         = mot.sDefPrefixe;
            prefixe.sEtym         = "";
            prefixe.sUnicite      = mot.sUnicitePrefixe;
            prefixe.sUniciteSynth = mot.sUnicitePrefixeSynth;
            prefixe.sFrequence    = mot.sFreqPrefixe;

            // 01/05/2019
            prefixe.bElision        = mot.bElisionPrefixe;
            prefixe.sSegmentElision = prefixe.sSegment;
            if (prefixe.bElision)
            {
                prefixe.sSegmentElision =
                    prefixe.sSegment.Substring(0, prefixe.sSegment.Length - 1);
            }

            suffixe.sSegment      = mot.sSuffixe;
            suffixe.sLogotron     = clsConst.sSelectDictionnaire;
            suffixe.sNiveau       = mot.sNivSuffixe;
            suffixe.sSens         = mot.sDefSuffixe;
            suffixe.sEtym         = "";
            suffixe.sUnicite      = mot.sUniciteSuffixe;
            suffixe.sUniciteSynth = mot.sUniciteSuffixeSynth;
            suffixe.sFrequence    = mot.sFreqSuffixe;

            return(iNumMotExistant);
        }
예제 #7
0
        public static bool bTirage(bool bComplet, string sNbPrefixesSuccessifs,
                                   List <string> lstNiv, List <string> lstFreq,
                                   ref string sMot, ref string sExplication,
                                   ref string sDetail, ref List <string> lstEtymFin,
                                   bool bGrecoLatin, bool bNeoRigolo, clsMsgDelegue msgDelegue)
        {
            List <string> lstEtym            = new List <string>();
            int           iNbTiragesPrefixes = 0;

            if (sNbPrefixesSuccessifs == clsConst.sHasard)
            {
                iNbTiragesPrefixes = clsUtil.iRandomiser(1, 5);
                float rProba = 1f;
                switch (iNbTiragesPrefixes)
                {
                case 1:
                    rProba = 1f;     // Toujours accepté
                    break;

                case 2:
                    rProba = 1 / 2f;   // Une fois sur 2
                    //rProba = 0.1f; // Une fois sur 10
                    break;

                case 3:
                    rProba = 1 / 4f;   // Une fois sur 4
                    //rProba = 1/3f; // Une fois sur 3
                    //rProba = 0.05f;
                    break;

                case 4:
                    rProba = 1 / 8f;   // Une fois sur 8
                    //rProba = 1/4f; // Une fois sur 4
                    //rProba = 0.03f;
                    break;

                case 5:
                    rProba = 1 / 16f;   // Une fois sur 16
                    //rProba = 1/5f; // Une fois sur 5
                    //rProba = 0.01f;
                    break;
                }
                if (rProba < 1f)
                {
                    float rTirage = clsUtil.rRandomiser();
                    if (rTirage > rProba)
                    {
                        iNbTiragesPrefixes = 1;
                    }
                }
            }
            else
            {
                iNbTiragesPrefixes = int.Parse(sNbPrefixesSuccessifs);
            }

            string        sPrefixesMaj       = "";
            string        sSensPrefixesMaj   = "";
            string        sDetailPrefixesMaj = "";
            clsInitTirage itPref             = new clsInitTirage();

            clsGestBase.m_prefixes.MsgDelegue = msgDelegue;
            clsGestBase.m_suffixes.MsgDelegue = msgDelegue;
            for (int i = 0; i <= iNbTiragesPrefixes - 1; i++)
            {
                //if (LogotronLib.clsConst.bDebug)
                //    Console.WriteLine("Tirage préfixe n°" + (i + 1));
                int iNumPrefixe = clsGestBase.m_prefixes.iTirageSegment(bComplet,
                                                                        lstNiv, lstFreq, itPref, bGrecoLatin, bNeoRigolo);
                clsSegmentBase prefixe = null;
                if (!clsGestBase.m_prefixes.bLireSegment(iNumPrefixe, ref prefixe))
                {
                    return(false);
                }
                string sNiveauP         = prefixe.sNiveau;
                string sPrefixe         = prefixe.sSegment;
                string sPrefixeMaj      = sPrefixe.ToUpper();
                string sSensPrefixeMaj2 = prefixe.sSens.ToUpper();
                sSensPrefixeMaj2   = clsBase.sCompleterPrefixe(sSensPrefixeMaj2);
                sPrefixesMaj      += sPrefixeMaj;
                sSensPrefixesMaj   = sSensPrefixesMaj + " " + sSensPrefixeMaj2;
                sDetailPrefixesMaj = sDetailPrefixesMaj + sPrefixeMaj + "(" + sNiveauP + ") - ";
                string sEtymPrefixe = prefixe.sEtym;
                if (sEtymPrefixe.Length > 0)
                {
                    lstEtym.Add(sPrefixe + "- : " + sEtymPrefixe);
                }
            }
            //if (LogotronLib.clsConst.bDebug) Console.WriteLine("Tirage suffixe");
            int iNumSuffixe = clsGestBase.m_suffixes.iTirageSegment(bComplet,
                                                                    lstNiv, lstFreq, new clsInitTirage(), bGrecoLatin, bNeoRigolo);
            clsSegmentBase suffixe = null;

            if (!clsGestBase.m_suffixes.bLireSegment(iNumSuffixe, ref suffixe))
            {
                return(false);
            }
            string sNiveauS          = suffixe.sNiveau;
            string sSuffixe          = suffixe.sSegment;
            string sSuffixeMaj       = sSuffixe.ToUpper();
            string sDetailSuffixeMaj = sSuffixeMaj + "(" + sNiveauS + ")";
            string sSensSuffixeMaj   = suffixe.sSens.ToUpper();

            sMot         = sPrefixesMaj + sSuffixeMaj;
            sExplication = sSensSuffixeMaj + sSensPrefixesMaj;
            sDetail      = sDetailPrefixesMaj + sDetailSuffixeMaj;
            string sEtymSuffixe = suffixe.sEtym;

            if (sEtymSuffixe.Length > 0)
            {
                lstEtym.Add("-" + sSuffixe + " : " + sEtymSuffixe);
            }
            lstEtymFin = lstEtym;

            //msgDelegue.AfficherMsg("Test MsgBox");

            return(true);
        }