Напишите программу, которая добавляет или удаляет пробелы для удобного форматирования кода. Правила того, как должен выглядеть код, когда вы закончите:
- Ни одна строка не должна содержать более одного
{
и}
. - A
{
всегда должен быть последним в строке. - A
}
всегда должно быть единственным в строке (кроме пробела, который стоит перед ним). - Количество пробелов перед каждой строкой должно быть фиксированным кратным текущего числа вложений. (Вы можете использовать любое количество отступов, если оно не изменится.)
- Запрещается вставлять или удалять пробелы, которые не способствуют выполнению одного из этих правил.
Число вложений для первой строки равно 0. Число вложений любой другой строки - это число вложений предыдущей строки, плюс один, если предыдущая строка содержит a {
, минус один, если текущая строка содержит a }
.
{
и }
внутри строковые литералы и комментарии не учитываются в вышеуказанных правилах. Строковый литерал - это текст, заключенный в одинарные или двойные кавычки, где одинарные или двойные кавычки с нечетным числом обратных косых черт непосредственно перед ними не интерпретируются как конец строкового литерала. Комментарий является текст , заключенный в /*
и */
, или текст , идя от //
конца линии. В строке несколько маркеров начала комментария, учитывается только первый. Комментарии не анализируются внутри строковых литералов.
Примеры
main() {printf("Hello!"); // I don't care about the world...
}
becomes:
main() {
printf("Hello!"); // I don't care about the world...
}
int main(){
puts("a");
puts("b");
}
becomes:
int main(){
puts("a");
puts("b");
}
main()
{ printf("{"); /* }
} */
printf("}//}"); ///*
}
becomes:
main()
{
printf("{"); /* }
} */
printf("}//}"); ///*
}
int test[] = {1, 2, 3};
becomes:
int test[] = {
1, 2, 3
}
;
источник
Ответы:
JavaScript (ES6),
376373378393 байтаЭто было ... довольно сложной задачей ...
Показать фрагмент кода
Дайте мне знать, если что-то не так с выводом, хотя я
не смог найти ничего,не могу найти больше ничего.Неуправляемая версия
Я играл в код, как я написал, так что давайте посмотрим, как это происходит ...
Показать фрагмент кода
источник
JavaScript (ES6),
260259 байтАнализирует вход за символом. Использует отступ в 4 пространства.
Это все еще WIP и был в основном проверен только против предоставленных примеров. Если вы нашли ошибку, пожалуйста, дайте мне знать в комментариях.
Состояние синтаксического анализатора полностью описывается следующими переменными:
d
→ текущая глубина вложенияi
→ флаг, указывающий, что мы находимся «внутри» кода (т.е. после начальных пробелов строки)l
→ строка буквального флагаc
→ заблокировать комментарийe
→ строка комментарияОбязательная версия с отступом
Контрольные примеры
Показать фрагмент кода
источник