J'ai entendu dire que votre code peut fonctionner plus rapidement si vous l'indenter en sens inverse, de sorte que le compilateur puisse le traiter comme un motif de conception d'arborescence à partir du sommet des "branches". Cela aide car la gravité accélère le temps nécessaire à la compilation de votre code et améliore l'efficacité de la structure de données. Voici un exemple de script 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;
}
Mais pour une raison quelconque, Notepad n’a pas de paramètre permettant de le faire automatiquement; j’ai donc besoin d’un programme pour le faire à ma place.
La description
Les soumissions doivent prendre un extrait de code en entrée, inverser l'indentation et générer le code obtenu.
Ceci est fait par la procédure suivante:
Divisez le code en lignes. Chaque ligne commencera par zéro ou plusieurs espaces (il n'y aura pas de tabulations).
Trouvez tous les niveaux d'indentation uniques dans le code. Par exemple, pour l'exemple ci-dessus, ce serait
0 4 8 12
Inversez l'ordre de cette liste de niveaux d'indentation et mappez la liste inversée à la liste d'origine. C'est difficile à expliquer avec des mots, mais pour l'exemple, cela ressemblerait à
0 — 12 4 — 8 8 — 4 12 — 0
Appliquez ce mappage au code d'origine. Dans l'exemple, une ligne avec une indentation de 0 espace deviendrait indentée de 12 espaces, 4 espaces deviendraient 8 espaces, etc.
Entrée sortie
L'entrée et la sortie peuvent être fournies comme vous le souhaitez (STDIN / STDOUT, paramètre de fonction / valeur de retour, etc.); Si votre langue ne prend pas en charge la saisie multiligne (ou si vous ne le souhaitez pas), vous pouvez utiliser le |
caractère pour séparer les lignes.
L'entrée consistera uniquement en nouvelles lignes ASCII + imprimables et ne contiendra pas de lignes vides.
Cas de test
Contribution:
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;
}
Sortie: l'exemple de code ci-dessus.
Contribution:
a
b
c
d
e
f
g
h
Sortie:
a
b
c
d
e
f
g
h
Contribution:
1
2
3
2
1
Sortie:
1
2
3
2
1
Contribution:
foo
Sortie:
foo