Écrivez un programme qui ajoute ou supprime des espaces pour bien formater le code. Règles à quoi le code devrait ressembler lorsque vous avez terminé:
- Aucune ligne ne doit contenir plus d'un
{
et}
. - Un
{
devrait toujours être la dernière chose sur une ligne. - Un
}
devrait toujours être la seule chose sur une ligne (en plus des espaces qui le précèdent). - La quantité d'espaces devant chaque ligne doit être un multiple fixe du nombre d'imbrication actuel. (Vous pouvez utiliser la quantité d'indentation que vous souhaitez, tant qu'elle ne change pas.)
- Aucun espace ne doit être inséré ou supprimé qui ne contribue pas à satisfaire à l'une de ces règles.
Le nombre d'imbrication pour la première ligne est 0. Le nombre d'imbrication de toute autre ligne est le nombre d'imbrication de la ligne précédente, plus un si la ligne précédente contient un {
, moins un si la ligne actuelle contient un }
.
{
et }
les littéraux de chaîne et les commentaires ne comptent pas dans les règles ci-dessus. Un littéral de chaîne est du texte entre guillemets simples ou doubles, où les guillemets simples ou doubles avec un nombre impair de barres obliques inverses immédiatement avant ne sont pas interprétés comme la fin du littéral de chaîne. Un commentaire est un texte placé entre /*
et */
, ou un texte allant de //
la fin de la ligne. Dans une ligne, plusieurs marqueurs de début de commentaire, seul le premier compte. Les commentaires ne sont pas analysés à l'intérieur des littéraux de chaîne.
Exemples
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
}
;
la source
Réponses:
JavaScript (ES6),
376373378393 octetsC'était ... tout le défi ...
Afficher l'extrait de code
Faites-moi savoir s'il y a quelque chose qui ne va pas avec la sortie, bien que je
ne trouve rien, je ne trouve rien de plus.Version non golfée
J'ai joué au code tel que je l'ai écrit, alors voyons comment ça se passe ...
Afficher l'extrait de code
la source
JavaScript (ES6),
260259 octetsAnalyse le caractère saisi caractère par caractère. Utilise une indentation de 4 espaces.
Il s'agit toujours d'un WIP et a été essentiellement testé uniquement par rapport aux exemples fournis. Si vous trouvez un bug, faites-le moi savoir dans les commentaires.
L'état de l'analyseur est entièrement décrit par les variables suivantes:
d
→ profondeur d'imbrication actuellei
→ drapeau indiquant que nous sommes situés "à l'intérieur" du code (c'est-à-dire après les premiers espaces de la ligne)l
→ drapeau littéral de chaînec
→ drapeau de commentaire de bloce
→ indicateur de commentaire de ligneVersion en retrait obligatoire
Cas de test
Afficher l'extrait de code
la source