Август 6

Иерархия арифметических операций

Нулевой уровень. Тут идёт самая простая операция — добавление единицы. Она как бы определяет в каком порядке идут числа.

Первый уровень. Применив несколько раз эту операцию мы получаем следующую операцию — сложение. Сложение показывает сколько раз нужно добавить единицу к числу. То есть сколько раз нужно применить предыдущую операцию.

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

Третий уровень. Возведение в степень — сколько раз нужно умножить число само на себя. Обычно этим всё и заканчивается, но в общем можно продолжать — так при описании числа Грэма пользуются стрелками чтобы показывать операции, которые идут после возведения в степень.

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

3^^3 = 3^(3^3) = 3^27 = 7625597484987

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

Можно подумать что нас бы спасла научная запись (запись вида (7.62 * 10^12), по даже тут показатель степени при десятке начнёт неудержимо быстро расти при увеличении уровня операции.

Август 5

Регулярные выражения

Регулярные выражения это текстовые шаблоны, которые часто применяются в программировании и системном администрировании.

В программировании все популярные языки поддерживают регулярные выражения для работы со строками: php, javascript, perl, python, и так далее. А также текстовые редакторы для программистов поддерживают их для поиска и замены текста.

В администрировании их поддерживают команды grep, sed, less и диугие. s/диугие/другие/

Границами регулярного выражениями являются символы косой черты. Выглядит это так:

/выражение/

Все буквы и цифры ищутся как есть. Например, /буквы и цифры/ будет найдено в первом предложении этого абзаца.

Точка соответствует одному любому символу. Так, словам точка и тучка (а также тжчка, т1чка и т_чка) соответствует выражение /т.чка/

Символ ? означает что предыдущий символ встречается один раз или не встречается ни разу. Например /замоче?ка?/ соответствует словам замочек и замочка (замочк и замочека тоже). После точки тоже можно использовать, тогда это будет означать «любой символ или его отсутствие».

Звездочка — любое число повторений символа, в том числе ноль. Например /ура*/ соответствует как ура, ураа, урааааа, так и ур.

Плюс — одно или больше повторений. /морожен+ое/ это мороженое или мороженное, но не морожеое.

В квадратных скобках можно перечислить символы, которые могут быть на одном месте. /д[оыа]ма?/ — дом, дым, дам, дама, и так далее. Можно комбинировать с остальными символами, например в тексте с ошибками можно искать слово в любом склонении: /м[ао]л[ао]к[оеу]?м?/

Удобно искать слова для кроссворда: /к…фе.а/ для конфеты. А как искать слово, начинающееся на ж… и заканчивается на лёр? /ж.+лёр/

Начало строки обозначается ^, конец — $. Чтобы показать что слово — единственное что есть в строке надо писать /^слово$/

В квадратных скобках можно использовать минус чтобы указывать диапазон символов. /[0-9]/ — цифра, /[А-П]/ буквы от А до П.

Чтобы искать один из служебных символов используется обратная косая черта. Ставится перед служебным символом — /\/\[А-П\]\// найдёт регулярное выражение в прошлом абзаце.

Фигурные скобки позволяют указать точное количество повторений символа — /^2{15}$/ это пятнадцать двоек. А если указать два числа через запятую, то это любое количество из интервала включительно. /^Ы{3,8}$/ от 3 до 8 букв Ы.