Я чув, що ваш код може працювати швидше, якщо відкласти його в зворотному порядку, щоб компілятор міг обробляти його як шаблон дизайну дерева з самої вершини "гілок" вниз. Це допомагає, оскільки гравітація пришвидшить час, необхідний для складання вашого коду, а ефективність структури даних покращиться. Ось приклад сценаріїв Java:
function fib(n) {
var a = 1, b = 1;
while (--n > 0) {
var tmp = a;
a = b;
b += tmp;
if (a === Infinity) {
return "Error!";
}
}
return a;
}
Але чомусь у Блокноті немає налаштування робити це автоматично, тому мені потрібна програма, щоб це зробити для мене.
Опис
Подані матеріали повинні брати фрагмент коду як вхідний, відміняти відступ та виводити отриманий код.
Це робиться за наступною процедурою:
Розбийте код на рядки. Кожен рядок починатиметься з нуля або більше пробілів (вкладок не буде).
Знайдіть усі унікальні рівні відступи в коді. Наприклад, для наведеного вище прикладу це було б
0 4 8 12
Зворотний порядок цього списку рівнів відступів і зіставте перевернутий список у вихідний список. Це важко пояснити словами, але, наприклад, це виглядало б так
0 — 12 4 — 8 8 — 4 12 — 0
Застосуйте це зіставлення до вихідного коду. У прикладі, рядок з відступом 0-простору стане відступів на 12 пробілів, 4 пробіли стануть 8 пробілами тощо.
Введення-виведення
Вхід і вихід можуть бути надані, як би ви хотіли (STDIN / STDOUT, параметр функції / значення повернення тощо); якщо ваша мова не підтримує багаторядковий вхід (або ви просто не хочете), ви можете використовувати |
символ для розділення рядків.
Вхід буде складатися лише з друкованих ASCII + нових рядків, і він не буде містити порожніх рядків.
Тестові справи
Вхід:
function fib(n) {
var a = 1, b = 1;
while (--n > 0) {
var tmp = a;
a = b;
b += tmp;
if (a === Infinity) {
return "Error!";
}
}
return a;
}
Вихід: наведений вище приклад коду.
Вхід:
a
b
c
d
e
f
g
h
Вихід:
a
b
c
d
e
f
g
h
Вхід:
1
2
3
2
1
Вихід:
1
2
3
2
1
Вхід:
foo
Вихід:
foo