Страничка, чтобы вычислить все имена Бога и положить конец существованию Вселенной :)
Нет, я не сошёл с ума, просто попался на глаза старый добрый рассказик А. Кларка "Девять миллиардов имён Бога" (читать по-русски, по-английски).
"We have reason to believe," continued the lama imperturbably, "that all such names can be written with not more than nine letters in an alphabet we have devised."
Из текста следует, что имена Бога записываются 9-буквенным алфавитом и включают не более 3 идущих подряд одинаковых букв, правда, нигде явно не утверждается, что речь идёт именно о 9-буквенных словах. Но почему-то все, кто обращал внимание на задачу, в силу инерции мышления считали, что и длина самого имени - тоже 9 символов. Ладно, последую и я ей, набросав вот такой небольшой скрипт для решения описанной в рассказе задачи:
9000000000.html (1 Кб)
Выполнить скрипт в новом окне (вкладке)
Исходник приложения виден в исходнике открывшейся страницы. Ставить задержку выполнения меньше 20 мс едва ли целесообразно, так что я оставил
setInterval ('next_name()',20);
Есть и обратная задача для разработчиков браузеров - как только они напишут браузер, способный выполнить этот скрипт, наступит конец мира :)
А если говорить всерьёз, то проблема "бесконечного" или просто длинного цикла на Javascript нелегка. Особенно если этот цикл в процессе своей работы должен что-то печатать в документ:
-
просто "бесконечный" или очень длинный
while
илиfor
, вероятнее всего, "завесит" документ и ничего не будет выводить, пока не отработает. Можно попытаться писать в другой документ, а не текущий (или реализовать многопоточность), но без гарантий успеха; -
рекурсивные вызовы по типу
setTimeout(next_name(),1);
сделанные из тела самой функцииnext_name
, быстро завалят стек, буквально 15-20 тысяч имён узнаем; -
если даже сделать периодическое выполнение кода через
setInterval
, как в этом скрипте, и не использовать в периодически выполняемой функции никаких локальных данных, чтобы не забивать память, всё равно браузер завершит выполнение кода довольно быстро (по сравнению с требуемым количеством шагов цикла).
Ну, конечно, имееет смысл отказаться от document.write
(document.writeln
) в периодически выполняемом коде, заменив хотя бы на document.getElementById('id').innerHTML
... Может, получим больше шагов, но скорость-то ещё уменьшится... Просто Javascript выше головы всё равно не прыгнет и не помещающиеся в ОП данные на страничке браузера не покажет никак :)
Так что или напишите аналог на "нормальном" языке и сохраняйте получаемые варианты, например, в файл, или подставляйте последнее полученное имя в переменную name
по типу
var name= "AAAEHOVLI";
и запускайте скрипт по новой. Надеюсь, что у вас это отнимет некоторое время и наш мир ещё поживёт :)
Да, 9-буквенный алфавит
var alphabet = "AEIHOLSUV";
мне кажется как раз тем, что нужно - IEHOVA, IISUS, ALLAH и другие отлично сюда вписываются :)
13.04.2016, 17:44 [5601 просмотр]