Священные войны велись из-за пробелов против табов. (И конечно пробелы, будучи объективно превосходящими, выиграли.) - Алекс А.
S Ом ЕГО р ля до сих пор отказывается , чтобы в ccept , что бея с ч сл е арли евым upreme. Вы только что получили в файл , используя Инкор ре кт, б объявление и инф е RIOR форму беи т Espace, и теперь т ситеме прода й нТ файла р е испорченный и разоренным.
Вы решаете, что с таким же успехом можете показать человеку, приславшему вам файл, насколько они неправы - насильственно.
Описание
Как видно из заголовка, ваша задача - взять файл, содержащий одну или несколько вкладок:
this is an evil tab onoes
и безжалостно разбивают их на куски
this is an evil tab
o
n
o
e
s
Обратите внимание, что программное обеспечение Stack Exchange превращает буквенные вкладки в четыре пробела (потому что это правильно), поэтому вкладки в этом посте будут отображаться в виде четырех пробелов. Однако вход в вашу программу будет содержать реальные вкладки.
Вызов
Решение должно принимать в качестве входных данных одну строку, которая может содержать печатный ASCII, символы новой строки и вкладки. На входе всегда будет хотя бы одна вкладка.
Вывод должен быть такой же строкой, с применением следующих правил:
Начать курсор с координат (0,0) и с направлением вправо. Координаты (столбец, строка), с нулевым индексом, и направление, в котором вы должны перемещать курсор после печати символа.
Для каждого символа в строке:
Если это новая строка, перейдите к координатам (0, n), где n - количество новых строк в строке (включая эту), и сбросьте направление вправо.
Если это вкладка, выведите два пробела, поверните курсор на 90 градусов по часовой стрелке и выведите еще два пробела, эффективно «разбивая» вкладку пополам. Вот наглядный пример, где вкладка представлена как
--->
и пробелы как·
:foo--->bar--->baz
становится
foo··· · b a r · · zab··
В противном случае просто выведите символ на курсор и переместите курсор на один шаг в текущем направлении.
Поскольку вы читаете строку от начала до конца, возможно, вам придется писать «поверх» существующих символов - это нормально. Например, вход
foo--->bar
spaces are superior
должен привести к выводу
foo
b
spaces are superior
r
Вы можете выбрать, должны ли «сломанные вкладки» перезаписывать другие символы - изначально предполагалось, что они этого не делают, но спецификация была неоднозначной, поэтому это ваше решение.
Кроме того, после применения этих правил вы также можете
добавьте или удалите столько пробелов, сколько хотите.
добавить максимум одного завершающего символа новой строки.
Вход никогда не будет содержать завершающие пробелы; он также никогда не будет содержать начальных или конечных символов новой строки. Вы также можете всегда предполагать, что вам никогда не потребуется записывать в столбец или строку меньше 0 (т.е. за пределы экрана).
Прецедент
Вкладки в этом тестовом примере представлены так, --->
потому что в противном случае SE поглощает их.
Входные данные:
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
Выход:
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
Необычная анимация:
правила
- Это код-гольф , поэтому выиграет самый короткий код в байтах!
(0,0)
, вы имеете в виду, что мы должны сначала очистить консоль, или вы просто подразумеваете положение курсора по умолчанию?