Ouvi dizer que seu código pode ser executado mais rapidamente se você o recuar de forma inversa, para que o compilador possa processá-lo como um padrão de design de árvore do topo dos "ramos" para baixo. Isso ajuda porque a gravidade acelerará o tempo necessário para a compilação do seu código e a eficiência da estrutura de dados será aprimorada. Aqui está um exemplo, em scripts 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;
}
Mas, por alguma razão, o Bloco de Notas não tem uma configuração para fazer isso automaticamente, então preciso de um programa para fazer isso por mim.
Descrição
Os envios devem usar um trecho de código como entrada, reverter o recuo e gerar o código resultante.
Isso é feito pelo seguinte procedimento:
Divida o código em linhas. Cada linha começará com zero ou mais espaços (não haverá tabulações).
Encontre todos os níveis de indentação exclusivos no código. Por exemplo, para o exemplo acima, isso seria
0 4 8 12
Inverta a ordem desta lista de níveis de indentação e mapeie a lista invertida para a lista original. Isso é difícil de explicar em palavras, mas, por exemplo, pareceria
0 — 12 4 — 8 8 — 4 12 — 0
Aplique esse mapeamento ao código original. No exemplo, uma linha com recuo de espaço 0 seria recuada por 12 espaços, 4 espaços se tornariam 8 espaços etc.
Entrada / Saída
A entrada e saída podem ser fornecidas como você desejar (STDIN / STDOUT, parâmetro de função / valor de retorno, etc.); se o seu idioma não suportar entrada |
de várias linhas (ou você simplesmente não quiser), você poderá usar o caractere para separar as linhas.
A entrada consistirá apenas em novas linhas imprimíveis ASCII + e não conterá linhas vazias.
Casos de teste
Entrada:
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;
}
Saída: o código de exemplo acima.
Entrada:
a
b
c
d
e
f
g
h
Resultado:
a
b
c
d
e
f
g
h
Entrada:
1
2
3
2
1
Resultado:
1
2
3
2
1
Entrada:
foo
Resultado:
foo