Как найти шаблоны в Pi в C#

Март 14 известен как день Pi, потому что его числовое представление 3/14 включает в себя первые три цифры Pi: 3.14. (По крайней мере, в Соединенных Штатах. В Европе, где они обычно пишут даты месяца, Pi Day - 22 июля, потому что 22/7 также является хорошим приближением Pi.)

Поскольку вы можете найти 3/14 в цифрах Pi, вы можете задаться вопросом, можете ли вы найти другие шаблоны цифр в Pi. Эта программа выполняет поиск первых 100 тысяч цифр Pi, чтобы найти даты или другие шаблоны, которые вы вводите.

В программу входит файл Pi.txt. (Я получил этот файл с веб-сайта Цифры Пи , где вы можете скачать 10, 50, 100, 1 тысяча, 10 тысяч, 100 тысяч, или 1 миллион цифр Пи.)

Во время разработки я открыл Solution Explorer, щелкнул правой кнопкой мыши проект, открыл пункт меню «Добавить», выбрал «Существующий элемент» и добавил файл в проект. Затем я устанавливаю свойство «Скопировать в выходной каталог» файла «Копировать, если он более новый». Теперь, когда программа запускается, файл копируется в исполняемый каталог, если он еще не существует.

Когда программа запускается, для загрузки файла используется следующий код.

// Цифры pi.
private string Pi;

// Загружаем цифры pi.
private void Form1_Load(object sender, EventArgs e)
{
    Pi = File.ReadAllText("Pi.txt");
    rchPi.Text = Pi;
    rchPi.Select(0, 0);
    lblPosition.Text = "";
}

Этот код определяет переменную Pi на уровне класса. Обработчик события Load формы использует System.IO.File.ReadAllText для чтения файла в строку Pi.

Затем код отображает строку Pi в RichTextBox с именем rchPi.

Когда вы вводите шаблон в текстовое поле и нажимаете «Поиск», программа выполняет следующий код.

// Поиск шаблона.
private void btnSearch_Click(object sender, EventArgs e)
{
    // Получить шаблон.
    string pattern = txtPattern.Text;

    // Удалите все не цифры.
    Regex reg_exp = new Regex("[^0-9]");
    pattern = reg_exp.Replace(pattern, "");

    // Поиск шаблона.
    int position = Pi.IndexOf(pattern);

    // Отображение результата.
    rchPi.Text = Pi;
    if (position < 0)
        lblPosition.Text = pattern + " was not found";
    else
    {
        lblPosition.Text = pattern +
            " found at digit " + position.ToString();
        rchPi.Select(position, pattern.Length);
        rchPi.SelectionBackColor = Color.Yellow;
        rchPi.SelectionColor = Color.Red;
        rchPi.ScrollToCaret();
    }
}

Этот код получает шаблон, который вы ввели. Затем он создает объект Regex, который ищет нецифровые символы и использует этот шаблон для замены нечетных цифр пустыми строками, тем самым удаляя ненужные цифры из шаблона.

Далее код ищет Pi для шаблона. Если шаблон не отображается, код говорит об этом. Если шаблон содержится в строке Pi, программа выделяет ее в RichTextBox.

На самом деле, неизвестно, содержит ли Pi каждый конечный образец цифр, хотя большинство математиков считают, что это так. Есть, конечно, некоторые интересные образцы. Например, используйте эту программу для поиска шаблона 999999 или 12345. Эта программа выполняет поиск только первых 100 тысяч цифр Pi, однако есть много шаблонов, которые он не может найти.

У некоторых может возникнуть соблазн подумать, что существует какое-то мистическое значение для того факта, что Pi может содержать все возможные шаблоны. Например, если Pi действительно содержит все возможные конечные последовательности цифр, то где-то есть ASCII-кодировка всех работ Шекспира, включая все его потерянные работы. В этом случае вы могли бы вообразить, что какое-то божественное существо скрыло для вас сообщение в Пи.

Конечно, цифры Pi также включали бы кодировки ASCII всех других мыслимых кусков тарабарщины. Они включают в себя: «Иди и принеси мир миру», но они также включили бы: «Иди вперед и спустишься в мир».

Источник: http://csharphelper.com/blog/2017/03/find-patterns-within-pi-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector