Example #1
0
    /// <summary>
    /// Construct a new language excerpt
    /// </summary>
    /// <param name="word"></param>
    /// <param name="sourceLanguage">The source language to draw from</param>
    /// <param name="displayedSyllables">The number of displayed syllables</param>
    /// <param name="random">The random number generator to use</param>
    public LanguageExcerpt(TransmissionWord word, ACryptoLanguage sourceLanguage, int displayedSyllables, System.Random random)
    {
        SourceLanguage      = sourceLanguage;
        usedSyllableIndices = new byte[displayedSyllables];
        for (int i = 0; i < displayedSyllables; i++)
        {
            usedSyllableIndices[i] = 255;
        }

        List <byte> indexList = new List <byte>(SourceLanguage.syllableCount - word.syllableIndices.Length);

        for (byte i = 0; i < SourceLanguage.syllableCount; i++)
        {
            if (!word.syllableIndices.Contains(i))
            {
                indexList.Add(i);
            }
        }

        var syllableIndex = 0;

        for (int i = 0; i < word.syllableIndices.Length; i++)
        {
            if (!usedSyllableIndices.Contains(word.syllableIndices[i]))
            {
                usedSyllableIndices[syllableIndex] = word.syllableIndices[i];
                syllableIndex++;
            }
        }

        for (int i = syllableIndex; i < displayedSyllables; i++)
        {
            var index = random.Next(indexList.Count);
            usedSyllableIndices[i] = indexList[index];
            indexList.RemoveAt(index);
        }

        for (int i = 0; i < word.syllableIndices.Length; i++)
        {
            for (byte j = 0; j < usedSyllableIndices.Length; j++)
            {
                if (word.syllableIndices[i] == usedSyllableIndices[j])
                {
                    word.syllableIndices[i] = j;
                    break;
                }
            }
        }
    }
Example #2
0
    /// <summary>
    /// Construct a new language excerpt
    /// </summary>
    /// <param name="sourceLanguage">The source language to draw from</param>
    /// <param name="displayedSyllables">The number of displayed syllables</param>
    /// <param name="random">The random number generator to use</param>
    public LanguageExcerpt(ACryptoLanguage sourceLanguage, int displayedSyllables, System.Random random)
    {
        SourceLanguage      = sourceLanguage;
        usedSyllableIndices = new byte[displayedSyllables];

        List <byte> indexList = new List <byte>(SourceLanguage.syllableCount);

        for (byte i = 0; i < SourceLanguage.syllableCount; i++)
        {
            indexList.Add(i);
        }

        for (int i = 0; i < displayedSyllables; i++)
        {
            var index = random.Next(indexList.Count);
            usedSyllableIndices[i] = indexList[index];
            indexList.RemoveAt(index);
        }
    }
Example #3
0
    /// <summary>
    /// Initialises the transmission chain
    /// </summary>
    /// <param name="seed">The random seed</param>
    /// <param name="transmissionCount">The number of transmissions</param>
    /// <param name="wordLength">The number of syllables the current word has</param>
    /// <param name="displayedSyllables">The number of syllables to display as possibilities</param>
    /// <returns>The transmission setup</returns>
    public static TransmissionSetup BuildTransmissionSetup(int seed, byte transmissionCount, int wordLength, int displayedSyllables)
    {
        var random   = new System.Random(seed);
        var endpoint = WordManager.Instance.CreateEndpoint(wordLength, displayedSyllables, random);

        var transmissions = new Transmission[transmissionCount];

        List <ACryptoLanguage> buffer = new List <ACryptoLanguage>(LanguageSet);

        var usedLanguages = new ACryptoLanguage[transmissionCount];
        var excerpts      = new LanguageExcerpt[transmissionCount];

        for (int i = 0; i < transmissionCount; i++)
        {
            var index = random.Next(buffer.Count);
            usedLanguages[i] = buffer[index];
            excerpts[i]      = new LanguageExcerpt(usedLanguages[i], displayedSyllables, random);
            buffer.RemoveAt(index);
            if (i > 0)
            {
                transmissions[i - 1] = new Transmission(
                    excerpts[i - 1],
                    excerpts[i],
                    random,
                    displayedSyllables);
            }
        }

        transmissions[transmissionCount - 1] = new Transmission(
            excerpts[transmissionCount - 1],
            endpoint.HumanLanguage,
            random,
            displayedSyllables);

        var startWord = endpoint.RealWord;

        for (int i = transmissionCount - 1; i > -1; i--)
        {
            startWord = transmissions[i].Encrypt(startWord);
        }
        Setup = new TransmissionSetup(startWord, endpoint, transmissions);
        return(Setup);
    }