Des guerres sacrées ont été menées contre des espaces contre des onglets. (Et bien sûr, les espaces, étant objectivement supérieurs, ont gagné.) - Alex A.
S ome PEO p le refusent encore à un V ALIDER que WHI c h est cl e arly s SUPRÊME. Vous venez de recevoir un fichier en utilisant le inté re ct, b ad et inf e forme de rior WHI t espace, et maintenant t que il cont e nts du fichier un r e frelatée et ruiné.
Vous décidez que vous pourriez aussi bien montrer à la personne qui vous a envoyé le fichier à quel point ils se trompent - violemment.
La description
Comme le titre l'indique, votre défi est de prendre un fichier contenant un ou plusieurs onglets:
this is an evil tab onoes
et les briser impitoyablement en morceaux:
this is an evil tab
o
n
o
e
s
Notez que le logiciel Stack Exchange transforme les onglets littéraux en quatre espaces (car c'est exact), donc les onglets de ce message seront affichés comme quatre espaces. Cependant, l'entrée de votre programme contiendra des onglets réels.
Défi
La solution doit prendre une seule chaîne en entrée, qui peut contenir des caractères ASCII imprimables, des sauts de ligne et des tabulations. Il y aura toujours au moins un seul onglet dans l'entrée.
La sortie doit être la même chaîne, avec les règles suivantes appliquées:
Commencez le curseur aux coordonnées (0,0) et avec une direction de droite. Les coordonnées sont (colonne, ligne), indexées à zéro et la direction est le sens dans lequel vous devez déplacer le curseur après l'impression d'un caractère.
Pour chaque caractère de la chaîne:
S'il s'agit d'une nouvelle ligne, déplacez-vous vers les coordonnées (0, n), où n est le nombre de nouvelles lignes dans la chaîne jusqu'à présent (y compris celle-ci), et réinitialisez la direction vers la droite.
S'il s'agit d'un onglet, affichez deux espaces, faites pivoter le curseur de 90 degrés dans le sens des aiguilles d'une montre et affichez deux autres espaces, ce qui "brise" l'onglet en deux. Voici un exemple visuel, où un onglet est représenté par
--->
et des espaces comme·
:foo--->bar--->baz
devient
foo··· · b a r · · zab··
Sinon, il suffit de sortir le caractère au niveau du curseur et de déplacer le curseur d'un pas dans la direction actuelle.
Puisque vous lisez la chaîne du début à la fin, il est possible que vous deviez écrire "au-dessus" des caractères existants - ce n'est pas grave. Par exemple, l'entrée
foo--->bar
spaces are superior
devrait se traduire par une sortie de
foo
b
spaces are superior
r
Vous pouvez choisir si les "onglets cassés" doivent remplacer les autres caractères - l'intention initiale était qu'ils ne le fassent pas, mais la spécification était ambiguë, c'est donc votre décision.
En outre, après avoir appliqué ces règles, vous pouvez également
ajoutez ou supprimez autant d'espaces de fin que vous le souhaitez.
ajoutez un maximum d'une seule nouvelle ligne de fin.
L'entrée ne contiendra jamais d'espaces de fin; il ne contiendra également jamais de nouvelles lignes de début ou de fin. Vous pouvez également toujours supposer que vous n'aurez jamais besoin d'écrire dans une colonne ou une ligne inférieure à 0 (c'est-à-dire hors de l'écran).
Cas de test
Les onglets dans ce cas de test sont représentés comme --->
sinon sinon SE les engloutit.
Contribution:
Test case. Here's a tab--->there's a tab--->everywhere a tab--->tab--->this is some more text
blah
blah
blah blah blah blah blah blah--->blaah--->blaah--->blah--->blaaaaah--->blah--->blah--->blah--->blah--->blah
Sortie:
Test case. Here's a tab
blah
blah t
blah blah blah blah blah blah
blaablah
r b
e l b
h 'h a l
a sa a a
l l h h
this is some mobe tbxt
haalhalb
b a
a b
t
bat a erehwyreve
Animation fantaisie:
Règles
- Il s'agit de code-golf , donc le code le plus court en octets gagnera!
(0,0)
, voulez-vous dire que nous devons d'abord effacer la console, ou voulez-vous simplement dire la position par défaut du curseur par cela?