Задача
Напишите подпрограмму, которая принимает строку печатных символов ASCII s и возвращает строку, содержащую те же символы, что и s , переупорядоченную таким образом, чтобы ни одна из двухсимвольных подстрок не появлялась более одного раза. Программа должна обработать все строки тестов (см. Ниже) менее чем за одну минуту на современном компьютере . Я также присуждаю специальный бонус в 50 повторений к ответу с наименьшей оценкой, который обрабатывает любую действительную строку из 30 символов менее чем за минуту.
Например, если заданы входные данные Mississippi, допустимым будет вывод issiMspiips(двухсторонние подстроки не появляются дважды), а недопустимый вывод будет ipMsispiiss(поскольку подстрока isпоявляется дважды).
Процедура может принимать форму:
- полное чтение программы из
stdin(или эквивалентной) или из командной строки и вывод вstdout(или эквивалентную) - функция, принимающая один строковый аргумент и возвращающая строку
Вы можете предположить, что входная строка всегда допускает хотя бы один допустимый вывод.
Соревнование
Ваша процедура должна содержать 5 или более строк кода, разделенных символами новой строки. Пустые строки (включая строки, содержащие только пробелы) игнорируются во всех контекстах и не учитываются в общем количестве строк.
Замена любых двух строк в вашем исходном коде должна привести к фатальной ошибке. Под «фатальной ошибкой» мы понимаем любое из следующих условий:
- исходный код не компилируется, компилятор / интерпретатор объявляет фатальную ошибку
- процедура прерывается с фатальной ошибкой во время выполнения или необработанным исключением во время выполнения
- подпрограмма принудительно завершается внезапным, ненормальным завершением программы, которое не выдает никаких выходных данных, за исключением возможного сообщения об ошибке и / или дампа стека
В качестве альтернативы , вместо строк могут использоваться непрерывные блоки кода, не содержащие символов новой строки. Каждый из этих блоков должен отображаться на отдельной строке в исходном файле с пониманием того, что новые строки удаляются перед компиляцией / интерпретацией исходного кода.
Например, код
aaaa
bbbb
cccc
будет конденсироваться до
aaaabbbbcccc
перед оценкой.
В этом режиме условие фатальной ошибки применяется к замене любых двух блоков кода (и, таким образом, к обмену строк в исходном коде до удаления новых строк). Следовательно, в приведенном выше примере подпрограммы aaaaccccbbbb, bbbbaaaaccccи ccccbbbbaaaaвсе они должны вызывать фатальные ошибки, либо во время компиляции, либо во время выполнения.
Материалы, использующие этот альтернативный режим, должны декларировать его использование.
счет
Позвольте n быть числом непустых текстовых строк в вашем исходном файле, с n ≥ 5. Позвольте c быть количеством байтов, включенных самой длинной текстовой строкой (длиной в байтах) в вашем исходном файле, не считая никакой завершающей новой строки.
Оценка представления дается с ( n + 10).
Представление с самым низким счетом является победителем.
Удачи. ;)
Тестовые строки
Abracadabra Alacazam
Is Miss. Mississauga Missing?
Ask Alaska's Alaskans
GGGGAAAATTTTCCCCgggaaatttccc
A Man A Plan A Canal Panama
Mspiisiipssдействительным, поскольку единственное повторение, iiкоторое не происходит в Mississippi?
CooliO, выходoOoCli?