eolymp
bolt
Try our new interface for solving problems
Məsələlər

Директивы include

Директивы include

Zaman məhdudiyyəti 4 saniyə
Yaddaşı istafadə məhdudiyyəti 64 MiB

Многие языки содержат специальную директиву, которая вставляет содержимое одного файла внутрь другого. Часто такие директивы называются include. В этой задаче вам предстоит реализовать функциональность простейшего препроцессора, обрабатывающего эту инструкцию. Вам задан набор текстовых файлов. Строка файла вида "#include <имя-файла>" должна быть заменена на содержимое соответствующего файла (имя файла в директиве может быть как абсолютным так и относительным; относительный путь всегда начинается с имени файла или директории или спецпоследовательности ".."). В этой строке могут быть любые незначащие пробелы, не разрывающие элементы include и имя-файла. Если файла с именем имя-файла не существует, то эта строка должна быть просто вырезана из текста файла.

Giriş verilənləri

Входной файл состоит из последовательности описаний файлов. Каждое описание начинается со строки, содержащей путь до файла в формате файловых систем Windows. Путь задан абсолютно и не содержит пробелов и символов "\" идущих подряд. В качестве элемента пути может быть использована спецпоследовательность "..", которая обозначает переход в родительскую директорию. Другие спецпоследовательности не используются. Имя любой директории и файла состоит из латинских букв, цифр и символа ".". Сравнение имен файлов следует проводить без учета регистра. Далее идет содержимое файла. Последовательность вида "^Z" обозначает конец файла. Эта последовательность всегда записана на отдельной строке, то есть каждая строка файла, включая последнюю, завершается переводом строки. Входной файл содержит не менее одного описания. Размер файла не превосходит 40 KB. Длина каждой строки файла не превосходит 1000 символов. Все имена файлов в тесте (включая те, что встречаются в директивах include) – это корректные абсолютные или относительные пути.

Çıxış verilənləri

Выведите содержимое первого файла после обработки препроцессором. Гарантируется, что размер вывода не превзойдет 400 KБ. Если обработка директив приводит к циклическому процессу – выведите строку "Too long file".

Пример

Nümunə

Giriş verilənləri #1
c:\files\first.txt
#define MAX_N 1024
#include <second.txt>
last line
^Z
c:\FILES\..\files\second.txt
included file
#include <..\files\third.txt>
^Z
c:\FILES\THIRD.txt
included file
^Z
Çıxış verilənləri #1
#define MAX_N 1024
included file
included file
last line