Задача
Напишите подпрограмму, которая принимает строку печатных символов 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
?