Задав строку в качестве входных данных, выведите один или несколько вариантов строки так, чтобы:
- Ни один персонаж не находится в исходном положении
- Ни один символ не является смежным с персонажем, к которому он был изначально
Вы можете предположить, что это всегда будет возможно для данной строки и будет содержать только единичные буквенные символы ( [a-z]
или, [A-Z]
если вы предпочитаете)
Обратите внимание, что дубликаты одного и того же символа не считаются уникальными.
Например, учитывая ввод programming
, вывод не может содержать m
7-й или 8-й символ и не может содержать g
4-й или 11-й символ (1 проиндексирован)
Пример:
Возьми струну abcdef
Следующее будет правильным выводом: daecfb
Однако следующее будет недопустимым: fdbcae
как в этом примере c
и b
все еще рядом.
Смежность также окутывает, а это значит, что вы не можете делать, fdbeca
как f
и a
все еще рядом.
Testcases:
Обратите внимание, что это не единственные действительные выходы для данных входов
Написано как input -> output
:
helowi -> ioewhl
mayube -> euabmy
stephens -> nhseespt
aabcdeffghij -> dbfhjfigaeca
Подсчет очков:
Это код-гольф, поэтому побеждает меньшее количество байтов на каждом языке !
источник
No character is adjacent to a character that it was originally adjacent to
, Разве порядок не имеет значения для смежности? Таким образом, ввод «abcd» не может иметь «ab» нигде, и также не может иметь «ba» нигде?Ответы:
Желе ,
2423 байтаПопробуйте онлайн!
Чрезвычайно долго из-за того, что я ужасен в Джелли, но это наконец работает, по крайней мере ... все еще в процессе игры в гольф.
источник
Python 2 , 185 байт
Попробуйте онлайн!
Печатает все допустимые строки
источник
mayube
,stephens
иhelowi
, похоже, работает для всех 3. Мне нужно сделать выходной валидатор, чтобы провести более интенсивное тестированиеaabcdeffghij
, но это не значит, что оно не работает, просто для этого требуется больше минутыprint next(l for l in permutations(x) if not((g(l)|g(l[::-1]))&(g(x)|g(x[::-1]))or any(a==b for a,b in zip(x,l))))
`l`[2::5]
= /PHP> = 7.1, 147 байт
PHP Sandbox Online
PHP> = 7.1, 184 байта
Используйте расстояние Левенштейна вместо способа Regex
PHP Sandbox Online
PHP , 217 байт
Версия под 7.1
Попробуйте онлайн!
источник
helowi
, выходыioewlh
,i
иh
примыкаютБрахилог , 21 байт
Попробуйте онлайн!
объяснение
Я действительно хотел
p.;?z≠ᵐ&j¬{s₂p~s~j}
бы работать на 2 байта меньше, но, кажется~j
, не достаточно умен ...источник
PHP 7.1,
136131 байтвдохновленный решением Jörg :
Запустите как трубу с
-r
или проверьте это онлайн . (Убедитесь, что выбрана версия PHP 7.1 или выше)Требуется PHP 7.1; добавить 14 байт для старого PHP: заменить
$k-1
на($k?:strlen($a))-1
;(еще два байта для PHP <5.3:
$k?$k-1:strlen($a)-1
)сломать
источник
$c=$a[$k=0], $d=$a[$k-1]
) с помощью$s.$s
.PHP 7.1,
187 185 172 178143 байтаЗапустите как трубу с
-r
или проверьте это онлайн . (Убедитесь, что выбрана версия PHP 7.1.0 или выше!)сломать
источник
mayube
, выходовyeuamb
,m
иa
являются смежнымиРубин,
11097102 байтПопробуйте онлайн!
источник
3594817062
в качестве вывода по вашей ссылке TIO.JavaScript 6, 116 байт
источник
Stax ,
2321 байтЗапускать и отлаживать онлайн!
Спасибо за @recursive за сохранение 2 байта.
Занимает очень много времени, чтобы бежать. Более разумная / выполнимая версия (всего 2 байта длиннее)
Запускать и отлаживать онлайн!
объяснение
Использует распакованную версию для объяснения.
источник
G
. Вы делаете,{...}X!...x!
чтобы выполнить один и тот же блок дважды. В общем, вы можете переписать это какG...G
с}...
в конце программы, как это .G
в другом посте, чтобы сохранить один байт, заменив{...}*
наD...
. Я думаю, я все еще не совсем привык к этому ...