Skip to main content

Beget, задание 16

По итогу, я всё-таки перемудрил себя... Я думал, что где-то мог затесаться файлик с md5-имеменм файла без цифр, и добавил проверку на буквы...

По итогу вышел скрипт:

#!/bin/bash

# Проверка, были ли переданы файлы через stdin
if [ ! -t 0 ]; then
    while IFS= read -r file; do
        # Извлекаем имя файла без пути
        filename=$(basename "$file")

        # Проверяем, соответствует ли имя файла формату md5
        if [[ "$filename" =~ ^[0-9a-f]{32}$ ]]; then            
            result=$(awk '
                {
                    while (match($0, /(\[[0-9]+\]|\{[0-9]+\}|\([0-9]+\)|\<[0-9]+\>)/)) {
                        printf "%s ", substr($0, RSTART, RLENGTH);
                        $0 = substr($0, RSTART + RLENGTH);
                    }
                }
            ' "$file")

            # Выводим результат для текущего файла, если что-то было найдено
            if [ -n "$result" ]; then
                echo "В файле $file найденные последовательности: $result"
            fi            
        fi
    done
else
    echo "Не переданы файлы через stdin."
    exit 1
fi

Который я закинул в base64 и получился скрипт с поиском

find -type f -wholename './*' | bash <(echo "IyEvYmluL2Jhc2gKCiMg0J/RgNC+0LLQtdGA0LrQsCwg0LHRi9C70Lgg0LvQuCDQv9C10YDQtdC00LDQvdGLINGE0LDQudC70Ysg0YfQtdGA0LXQtyBzdGRpbgppZiBbICEgLXQgMCBdOyB0aGVuCiAgICB3aGlsZSBJRlM9IHJlYWQgLXIgZmlsZTsgZG8KICAgICAgICAjINCY0LfQstC70LXQutCw0LXQvCDQuNC80Y8g0YTQsNC50LvQsCDQsdC10Lcg0L/Rg9GC0LgKICAgICAgICBmaWxlbmFtZT0kKGJhc2VuYW1lICIkZmlsZSIpCgogICAgICAgICMg0J/RgNC+0LLQtdGA0Y/QtdC8LCDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0LXRgiDQu9C4INC40LzRjyDRhNCw0LnQu9CwINGE0L7RgNC80LDRgtGDIG1kNQogICAgICAgIGlmIFtbICIkZmlsZW5hbWUiID1+IF5bMC05YS1mXXszMn0kIF1dOyB0aGVuICAgICAgICAgICAgCiAgICAgICAgICAgIHJlc3VsdD0kKGF3ayAnCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG1hdGNoKCQwLCAvKFxbWzAtOV0rXF18XHtbMC05XStcfXxcKFswLTldK1wpfFw8WzAtOV0rXD4pLykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICIlcyAiLCBzdWJzdHIoJDAsIFJTVEFSVCwgUkxFTkdUSCk7CiAgICAgICAgICAgICAgICAgICAgICAgICQwID0gc3Vic3RyKCQwLCBSU1RBUlQgKyBSTEVOR1RIKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICcgIiRmaWxlIikKCiAgICAgICAgICAgICMg0JLRi9Cy0L7QtNC40Lwg0YDQtdC30YPQu9GM0YLQsNGCINC00LvRjyDRgtC10LrRg9GJ0LXQs9C+INGE0LDQudC70LAsINC10YHQu9C4INGH0YLQvi3RgtC+INCx0YvQu9C+INC90LDQudC00LXQvdC+CiAgICAgICAgICAgIGlmIFsgLW4gIiRyZXN1bHQiIF07IHRoZW4KICAgICAgICAgICAgICAgIGVjaG8gItCSINGE0LDQudC70LUgJGZpbGUg0L3QsNC50LTQtdC90L3Ri9C1INC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9GM0L3QvtGB0YLQuDogJHJlc3VsdCIKICAgICAgICAgICAgZmkgICAgICAgICAgICAKICAgICAgICBmaQogICAgZG9uZQplbHNlCiAgICBlY2hvICLQndC1INC/0LXRgNC10LTQsNC90Ysg0YTQsNC50LvRiyDRh9C10YDQtdC3IHN0ZGluLiIKICAgIGV4aXQgMQpmaQ==" | base64 -d)

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

image.png

Однако когда скрипт почти закончился, Руслан прислал ответ 79061525, я увидел мелькнувшее от него сообщение "Победа", которое было сразу стёрто, а потом появилась отметка в сообщении с заданием.

image.png

Этот ответ очень похож, если исключить из моего вывода угловые скобки (подсветил оранжевым)...

image.png

Однако где-то в этот момент возникает вопрос: почему-то у Руслана нет цифры из файла ./pacific_ocean/gulf_of_thailand/1a5d8d4e992256ec2f93c434c8467cbb, которая (1), подсветил голубым. Собственно, ответ с этой дополнительной 1 я прислал через 5 минут.

image.png

Собственно, вопрос, там точно нигде не пропустилась эта 1? Вариант с тем, что это круглые скобки странен, так как (2) из предыдущего файла в ответе...


Не по делу

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

#!/bin/bash

# Проверка, были ли переданы файлы через stdin
if [ ! -t 0 ]; then
    while IFS= read -r file; do
        # Ищем все последовательности [4], {5}, (6) в файле
        result=$(awk '
            {
                while (match($0, /(\[[0-9]+\]|\{[0-9]+\}|\([0-9]+\)|\<[0-9]+\>)/)) {
                    printf "%s ", substr($0, RSTART, RLENGTH);
                    $0 = substr($0, RSTART + RLENGTH);
                }
            }
        ' "$file")

        # Выводим результат для текущего файла, если что-то было найдено
        if [ -n "$result" ]; then
            echo "В файле $file найденные последовательности: $result"
        fi
    done
else
    echo "Не переданы файлы через stdin."
    exit 1
fi
find -type f -wholename './*/*/*[0-9]*' | bash <(echo "IyEvYmluL2Jhc2gKCiMg0J/RgNC+0LLQtdGA0LrQsCwg0LHRi9C70Lgg0LvQuCDQv9C10YDQtdC00LDQvdGLINGE0LDQudC70Ysg0YfQtdGA0LXQtyBzdGRpbgppZiBbICEgLXQgMCBdOyB0aGVuCiAgICB3aGlsZSBJRlM9IHJlYWQgLXIgZmlsZTsgZG8KICAgICAgICAjINCY0YnQtdC8INCy0YHQtSDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvRjNC90L7RgdGC0LggWzRdLCB7NX0sICg2KSDQsiDRhNCw0LnQu9C1CiAgICAgICAgcmVzdWx0PSQoYXdrICcKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgd2hpbGUgKG1hdGNoKCQwLCAvKFxbWzAtOV0rXF18XHtbMC05XStcfXxcKFswLTldK1wpfFw8WzAtOV0rXD4pLykpIHsKICAgICAgICAgICAgICAgICAgICBwcmludGYgIiVzICIsIHN1YnN0cigkMCwgUlNUQVJULCBSTEVOR1RIKTsKICAgICAgICAgICAgICAgICAgICAkMCA9IHN1YnN0cigkMCwgUlNUQVJUICsgUkxFTkdUSCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAnICIkZmlsZSIpCgogICAgICAgICMg0JLRi9Cy0L7QtNC40Lwg0YDQtdC30YPQu9GM0YLQsNGCINC00LvRjyDRgtC10LrRg9GJ0LXQs9C+INGE0LDQudC70LAsINC10YHQu9C4INGH0YLQvi3RgtC+INCx0YvQu9C+INC90LDQudC00LXQvdC+CiAgICAgICAgaWYgWyAtbiAiJHJlc3VsdCIgXTsgdGhlbgogICAgICAgICAgICBlY2hvICLQkiDRhNCw0LnQu9C1ICRmaWxlINC90LDQudC00LXQvdC90YvQtSDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvRjNC90L7RgdGC0Lg6ICRyZXN1bHQiCiAgICAgICAgZmkKICAgIGRvbmUKZWxzZQogICAgZWNobyAi0J3QtSDQv9C10YDQtdC00LDQvdGLINGE0LDQudC70Ysg0YfQtdGA0LXQtyBzdGRpbi4iCiAgICBleGl0IDEKZmk=" | base64 -d)

image.png

И даже прислал варианты в чат:

image.png

однако я оставил ответы с угловыми скобками, а когда подумал, что их, может быть, не надо использовать, я уже тестировал более сложный вариант из начала этого документа, история чата забилась, а скрин я сделать забыл...

Однако, опять-таки, лишняя (1) у меня тут затесалась...