Certaines personnes insistent pour utiliser des espaces pour la tabulation et l'indentation.
Pour la tabulation, c'est indéniablement faux. Par définition, les tabulateurs doivent être utilisés pour la tabulation.
Même pour l’indentation, les tabulateurs sont objectivement supérieurs:
Il existe un consensus clair dans la communauté Stack Exchange.
L'utilisation d'un seul espace pour l'indentation est visuellement désagréable; en utiliser plus d'un est un gaspillage.
Comme tous les
golfeurs lesavent, les programmes doivent être aussi courts que possible. Non seulement cela économise de l'espace sur le disque dur, mais les temps de compilation sont également réduits si moins d'octets doivent être traités.En ajustant la largeur de tabulation 1 , le même fichier a un aspect différent sur chaque ordinateur, de sorte que tout le monde peut utiliser sa largeur d’indentation préférée sans modifier le fichier lui-même.
Tous les bons éditeurs de texte utilisent les tabulateurs par défaut (et leur définition).
Je le dis et j'ai toujours raison!
Malheureusement, tout le monde n’écoute pas sa raison. Quelqu'un vous a envoyé un fichier qui ne fonctionne pas correctement et vous devez le réparer. Vous pouvez le faire manuellement, mais il y en aura d'autres.
Il est déjà assez grave que les entretoises vous fassent perdre votre temps précieux. Vous décidez donc de rédiger le programme le plus court possible pour résoudre le problème.
Tâche
Ecrivez un programme ou une fonction qui effectue les tâches suivantes:
Lit une seule chaîne de STDIN ou sous forme d'argument de ligne de commande ou de fonction.
Identifiez tous les emplacements où des espaces ont été utilisés pour la tabulation ou l'indentation.
Une série d'espaces est une indentation si elle se produit au début d'une ligne.
Une série de deux espaces ou plus est une tabulation si ce n'est pas une indentation.
Un seul espace qui n'est pas indenté peut ou peut ne pas avoir été utilisé pour la tabulation. Comme prévu lorsque vous utilisez le même personnage à des fins différentes, il n’ya pas de moyen facile de le savoir. Par conséquent, nous dirons que l'espace a été utilisé pour la confusion .
Déterminez la largeur de tabulation 1 la plus longue possible pour laquelle tous les espaces utilisés pour la tabulation ou l'indentation peuvent être remplacés par des tabulateurs, sans modifier l'apparence du fichier.
Si l'entrée ne contient ni tabulation, ni indentation, il est impossible de déterminer la largeur de la tabulation. Dans ce cas, ignorez l'étape suivante.
En utilisant la largeur de tabulation précédemment déterminée, remplacez tous les espaces utilisés pour la tabulation ou l'indentation par des tabulatrices.
En outre, chaque fois que cela est possible sans modifier l'apparence du fichier, remplacez tous les espaces utilisés pour confusion par des tabulateurs. (En cas de doute, supprimez les espaces.)
Renvoie la chaîne modifiée à partir de votre fonction ou imprimez-la dans STDOUT.
Exemples
Tous les espaces de
a bc def ghij
sont tabulation.
Chaque série d'espaces complète la chaîne précédente de caractères autres que des espaces à une largeur de 5, de sorte que la largeur de tabulation correcte est 5 et que la sortie correcte 2 soit
a--->bc-->def->ghij
Les deux premiers espaces de
ab cde f ghi jk lm
sont la tabulation, les autres confusion.
La largeur de tabulation correcte est 4, la sortie correcte 2 est donc
ab->cde>f ghi>jk lm
Le dernier espace reste inchangé, car il serait rendu comme deux espaces s'il était remplacé par une tabulatrice:
ab->cde>f ghi>jk->lm
Tous les espaces sauf un de
int main( ) { puts("TABS!"); }
sont l'indentation, l'autre est la confusion.
Les niveaux d’indentation sont de 0, 4 et 8 espaces. La largeur de tabulation correcte est donc 4 et la sortie correcte 2 est
int --->main( ) --->{ --->--->puts("TABS!"); --->}
L'espace
( )
dedans serait rendu comme trois espaces s'il était remplacé par une tabulatrice, de sorte qu'il reste inchangé.Les deux premiers espaces de
x yz w
sont indentation, les autres confusion.
La largeur de l'onglet appropriée est 2 et la sortie correcte 2 est
->x>yz w
Le dernier espace serait rendu sous forme de deux espaces s'il était remplacé par une tabulatrice, de sorte qu'il reste inchangé.
Les deux premiers espaces de
xy zw
sont indentation, les trois autres sont tabulation.
Seule une largeur de tabulation de 1 permet d’éliminer tous les espaces. La sortie 2 correcte est
>>xy>>>zw
Tous les espaces de
a b c d
sont la confusion.
Il n’ya pas de largeur de tabulation la plus longue possible, la sortie 2 correcte est
a b c d
Règles supplémentaires
L'entrée consistera entièrement en caractères ASCII imprimables et sauts de ligne.
Vous pouvez supposer qu'il y a au maximum 100 lignes de texte et au plus 100 caractères par ligne.
Si vous choisissez STDOUT pour la sortie, vous pouvez imprimer un seul saut de ligne de fin.
Les règles standard de code-golf s'appliquent.
1 La largeur de tabulation est définie comme la distance en caractères entre deux points de tabulation consécutifs , en utilisant une police à espacement fixe.
2 Les flèches art ASCII représentent les tabulateurs que Stack Exchange refuse de restituer correctement, pour lequel j'ai soumis un rapport de bogue. La sortie réelle doit contenir des tabulateurs réels.
programs should be as short as possible
Je crois avoir retrouvé le frère longtemps perdu d'Arthur Whitney !!