Конец вкладки против космической войны
Итак, было много споров о том, использовать ли табуляции или пробелы для отступа / форматирования кода. Можете ли вы помочь университету уладить спор, перейдя на невероятно сумасшедший уникальный метод форматирования.
Ваша задача - написать полную программу или функцию, которая расширяет все вкладки на четыре области. И затем заменяет серию из n ведущих пробелов на "/ (n - две звезды здесь) /". Вы получите ввод по нескольким строкам в любом приемлемом формате (однострочный массив строк для каждой новой строки. Массив столбцов и т. Д.)
Образец ввода бесстыдно украден . Обратите внимание, что поскольку в SE вкладки автоматически расширяются до четырех пробелов, я представляю их как символ «^», но вы также должны обрабатывать вкладки (кодовая точка 0x09). Все символы «^» представляют собой табуляцию.
Calculate the value 256 and test if it's zero
If the interpreter errors on overflow this is where it'll happen
++++++++[>++++++++<-]>[<++++>-]
+<[>-<
Not zero so multiply by 256 again to get 65536
[>++++<-]>[<++++++++>-]<[>++++++++<-]
+>[>
# Print "32"
++++++++++[>+++++<-]>+.-.[-]<
<[-]<->] <[>>
# Print "16"
+++++++[>+++++++<-]>.+++++.[-]<
<<-]] >[>
# Print "8"
++++++++[>+++++++<-]>.[-]<
<-]<
# Print " bit cells\n"
+++++++++++[>+++>+++++++++>+++++++++>+<<<<-]>-.>-.+++++++.+++++++++++.<.
>>.++.+++++++..<-.>>-
Clean up used cells.
[[-]<]l
^this is preceded by a tab
^^two tabs
^^^three tabs etcetera!
Образец вывода
Calculate the value 256 and test if it's zero
If the interpreter errors on overflow this is where it'll happen
++++++++[>++++++++<-]>[<++++>-]
+<[>-<
/**/Not zero so multiply by 256 again to get 65536
/**/[>++++<-]>[<++++++++>-]<[>++++++++<-]
/**/+>[>
/******/# Print "32"
/******/++++++++++[>+++++<-]>+.-.[-]<
/**/<[-]<->] <[>>
/******/# Print "16"
/******/+++++++[>+++++++<-]>.+++++.[-]<
<<-]] >[>
/**/# Print "8"
/**/++++++++[>+++++++<-]>.[-]<
<-]<
# Print " bit cells\n"
+++++++++++[>+++>+++++++++>+++++++++>+<<<<-]>-.>-.+++++++.+++++++++++.<.
>>.++.+++++++..<-.>>-
Clean up used cells.
[[-]<]l
/**/this is preceded by a tab
/******/two tabs
/**********/three tabs etcetera!
Поскольку университету требуется место для загрузки как Vim, так и Emacs, вам достаточно места для хранения вашего кода. Поэтому это код-гольф, и выигрывает самый короткий код. Вы можете предположить, что входные данные правильно сформированы и строки с менее чем четырьмя пробелами (после замены вкладок) могут привести к неопределенному поведению.
отказ
Эта «превосходная» стратегия форматирования была предоставлена Geobits и воспроизводится с его разрешения. Никто из программистов не пострадал во время постановки этой задачи.
/*
, или это можно считать не «правильно сформированным вводом»? Исходный файл C ++ был бы лучшим тестом, потому что его многострочный комментарий /* */
мог бы разбить некоторые ответы, которые заменяют первый и последний из первых пробелов на «а» /
, а затем переходить к заполнению пробелов *
.
/* */
код C ++, но на этот раз в начале строки. Согласно вашей спецификации его следует оставить как есть. Здесь есть ловушка, и она уже обнаружила неправильные ответы, что регулярное выражение, например, скажем, /\** /
используемое, чтобы заполнить эти пробелы между // звездочками, превратило бы строку в /***/
. Я также видел это преобразование /*//*/
. Я предполагаю, что оба неверны.