Escuché que su código puede ejecutarse más rápido si lo sangra al revés, de modo que el compilador pueda procesarlo como un patrón de diseño de árbol desde la parte superior de las "ramas" hacia abajo. Esto ayuda porque la gravedad acelerará el tiempo que toma compilar su código y la eficiencia de la estructura de datos mejora. Aquí hay un ejemplo, en las secuencias de comandos 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;
}
Pero por alguna razón, el Bloc de notas no tiene una configuración para hacer esto automáticamente, por lo que necesito un programa que lo haga por mí.
Descripción
Las presentaciones deben tomar un fragmento de código como entrada, revertir la sangría y generar el código resultante.
Esto se realiza mediante el siguiente procedimiento:
Divide el código en líneas. Cada línea comenzará con cero o más espacios (no habrá pestañas).
Encuentra todos los niveles de sangría únicos en el código. Por ejemplo, para el ejemplo anterior, esto sería
0 4 8 12
Invierta el orden de esta lista de niveles de sangría y asigne la lista invertida a la lista original. Esto es difícil de explicar con palabras, pero por ejemplo, se vería como
0 — 12 4 — 8 8 — 4 12 — 0
Aplique esta asignación al código original. En el ejemplo, una línea con sangría de 0 espacios quedaría sangrada por 12 espacios, 4 espacios se convertirían en 8 espacios, etc.
De entrada y salida
La entrada y la salida se pueden proporcionar como desee (STDIN / STDOUT, parámetro de función / valor de retorno, etc.); Si su idioma no admite entrada de |
líneas múltiples (o simplemente no desea), puede usar el carácter para separar las líneas.
La entrada consistirá solo en nuevas líneas ASCII + imprimibles, y no contendrá líneas vacías.
Casos de prueba
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;
}
Salida: el código de ejemplo anterior.
Entrada:
a
b
c
d
e
f
g
h
Salida:
a
b
c
d
e
f
g
h
Entrada:
1
2
3
2
1
Salida:
1
2
3
2
1
Entrada:
foo
Salida:
foo