Код программы на Java

А вы задумывались ли над тем, какова вероятность того, что ваше имя появилось случайно? Уже который день изучаю программирование на языке Java и на ней получилось написать такой код, который вычисляет ВСЕ комбинации букв алфавита, равных по числу символов вашему имени в соответствие с вероятностью его появления. Среди них есть и абсолютно непонятные наборы букв, но есть и реально существующие имена.

Написанный мной код создаёт комбинации ровно до тех пор, пока на экране не появится именно ваше имя. Чем оно длиннее, тем больше времени займет работа кода. Это и понятно, ведь вероятность случайного возникновения имени из 6 букв при использовании латинского алфавита равна 1 к 308 915 776. То есть, для того, чтобы СЛУЧАЙНО возникло моё имя, нужно было бы создать таблицу всевозможных вариантов комбинаций букв латинского алфавита, состоящую из более чем 308 миллионов комбинаций.

Те, кто немного знаком с теорией вероятности, наверняка помнят формулу вычисления вероятности возникновения подобного события. Она очень просто – просто нужно умножать вероятность наступления каждого события на вероятность наступления следующего. Поскольку в латинском алфавите всего 26 букв, то получается, что вероятность наступления события – возникновения каждой буквы алфавита в вашем имени – равна 1/26 и, если ваше имя как и моё состоит из 6 букв, то вероятность его возникновения будем равна (1/26)6 = 1/308 915 776. Как видите, всё достаточно просто.

Но давайте немного усложним свою задачу J. Например, высчитаем вероятность возникновения ИМЕННО своего имени – то есть заложим в программу создание комбинаций не из всего алфавите, а только до того места, где находятся буквы вашего имени. В этом случае самой последней комбинацией букв станет именно ваше имя.

 же его возникновения высчитывается по той же формуле, только на этот раз вместо общего числа алфавита напишите порядковые номера букв своего имени. Для своего имени я получаю формулу вероятности его возникновения ДО момента его возникновения в следующем виде:

a= 1 к (R х U х S х T х A х M),

где a – вероятность его случайно генерации, х – символ умножений, а красным цветом выделены именно его буквы, где для вычислений следует поставить порядковые номера этих букв в алфавите:

a =  1 к (R х U х S х T х A х M)  = 1 к 1 867 320

Для легкости вашей работы предлагаю и сам латинский алфавит с порядковой нумерацией его символов, которые вы можете использовать для своих расчетов:

A (1) B (2) C (3) D (4) E (5) F (6) G (7) H (8) I (9) J (10)

K (11) L (12) M (13) N (14) O (15) P (16) Q (17) R (18)

S (19) T (20) U (21) V (22) W (23) X (24) Y (25) Z (26)

Тем же, кто знаком с языком программирования Java и хочет использовать код для генерации всевозможных комбинаций букв латиницы ДО возникновения своего имени на экране, предлагаю сам код:

//Начало кода

class Name {

    public static void main(String args[]) {

        char a, b, c, d, e, f;

        for(a=’a‘; a<=’r‘; a++)

            for(b=’a‘; b<=’u‘; b++)

                for(c=’a‘; c<=’s‘; c++)

                    for(d=’a‘; d<=’t‘; d++)

                        for(e=’a‘; e<=’a‘; e++)

                            for(f=’a‘; f<=’m‘; f++){

        System.out.print(a);

        System.out.print(b);

        System.out.print(c);

        System.out.print(d);

        System.out.print(e);

        System.out.print(f + » «);

        }

    }

}

//конец кода

Обратите внимание на несколько моментов:

1.         Зеленые буквы – это переменные – их количество должно совпадать с количеством букв в вашем имени. Главное, чтобы не было назначено двух одинаковых переменных;

2.         Количество циклов for, приведенных в виде «for(a=’a‘; a<=’r‘; a++)» должно совпадать с количеством указанных переменных – для каждой переменной напишите его собственный for;

3.         Темно-оранжевым цветом выделены буквы, с которых код должен начать создание комбинаций. Если укажите вместо них по порядку буквы своего имени, то ваше имя станет ПЕРВОЙ комбинацией, а все остальные последуют за ней. По умолчанию я поставил букву «a»;

4.         Красные буквы – это буквы вашего имени. Поставьте в этом коде буквы своего имени и в результате его работы вы получите комбинацию всех символов ДО вашего имени и своим именем вы поставите точку в создании комбинаций. Если вместо них вы поставите букву «z», то программа создаст ВСЕ возможные комбинации из букв латинского алфавита начиная от «aaaaaa» до «zzzzzz». В этих комбинациях вы сможете найти имена ВСЕХ своих знакомых с одинаковым числом букв в именах;

5.         Для каждой переменной, указанной зеленым цветом, создайте строку типа «System.out.print(a);» — это команда для публикации создаваемых комбинаций на экране командной строки, где и запускается программа.

В итоге выполнения указанного кода на экране появится огромная комбинация букв, окончание которого будет иметь следующий вид. Как видно на скриншоте, самой последней комбинацией является моё имя.

Вид окна командной строки с окончанием выполненного кода

P.S.

Код довольно таки простой и, думаю, если еще чуть-чуть поднапрячься, то можно сделать его еще короче и эффективнее. У меня пока что он в этом варианте.

Тем, кто как я только-только учится писать подобные программы на Java, думаю, это упражнение покажется интересным.

Кто уже лучше знаком с Java и может предложить улучшения для данного кода, прошу отписаться в комментариях – давайте делиться знаниями и навыками J

P.P.S.

 

Код в некоторых случаях работает довольно долго, поэтому его можно запустить и параллельно позаниматься другими делами. Пока он работает и создает комбинации 6-символьных комбинаций ДО появления моего имени, я, например, написал этот пост и сделал еще кучу чего, а программа записала 1 миллион 867 тысяч 320 комбинаций и потратил на это 2 часа 00 минут 46 секунд.

Rustam Gulov
Автор Rustam Gulov 545 Articles
Блоггер, гражданский активист, медиа-тренер и консультант, основатель Блогпортала "Блогистон"

Оставьте первый комментарий

Напишите свой комментарий