задача
Ваша цель, если вы решите принять ее, - написать программу, которая при заданной входной строке (или массиве символов) выводит каждую возможную перестановку букв в этой строке. Я привередлив в своем выводе, поэтому он должен быть отсортирован по алфавиту, без дубликатов.
Пример:
Входные данные: buzz
Выход:
buzz
bzuz
bzzu
ubzz
uzbz
uzzb
zbuz
zbzu
zubz
zuzb
zzbu
zzub
правила
- Это код-гольф, поэтому выигрывает самый короткий код.
- Конечные пробелы в каждой / любой строке в порядке
- Разрешается одна новая строка после последней строки (но не более)
code-golf
string
permutations
Брайан Градин
источник
источник
["buzz" "bzuz" "bzzu" "ubzz" "uzbz" "uzzb" "zbuz" "zbzu" "zubz" "zuzb" "zzbu" "zzub"]
?N*
кp
) :-)Ответы:
Желе , 5 байт
Попробуйте онлайн!
объяснение
источник
05AB1E ,
43 байтаОбновленный, так как обновление
œ
сломало старую версию,которая также сохранила байт, как было предложено Magic Octopus Urn .
Попробуйте онлайн!
объяснение
источник
œê»
хорошо для не наследства.œ
теперь возвращает список строк в обеих.MATL , 4 байта
Попробуйте онлайн!
объяснение
источник
Python 3.5, 79 байт
Функция, которая принимает ввод как список символов и выводит на печать.
Рекурсивно делает каждую отдельную перестановку, отбирая каждый возможный следующий символ в алфавитном порядке из оставшихся различных символов и добавляя его в текущий вывод
w
. Затем мы рекурсируем, убрав этого персонажа. Как только вход очищен, мы печатаемw
.источник
CJam , 5 байтов
Спасибо @EriktheOutgolfer за исправление (
q
вместоr
)Попробуйте онлайн!
объяснение
источник
Pyth - 5 байт
Попробуйте это онлайн здесь .
источник
S
самом деле нужно?Haskell, 46 байтов
2 байта сохранены благодаря nimi
источник
f=
.J, 19 байт
Прецедент
объяснение
Это 4 поезда
В основном:
источник
[:~.i.@!@#A./:~
вы должны сэкономить несколько байтJavaScript (Firefox 30+),
129124 байтаНе так уж плохо для языка без встроенных перестановок ...
источник
Python 3.5, 81 байт:
Действительно ... 81 байт, когда следующий самый длинный ответ - 48 байт ... вздох . Ну, я попробую этот гольф как можно больше, но советы по игре в гольф по-прежнему очень ценятся.
Кроме того, вот самое короткое решение, которое я мог получить в Python 2 при 86 байтах :
По-видимому, в Python 2
[*...]
возвращает aSyntax Error
, а посколькуpermutations
возвращаетitertools.permutations object at 0x...
, следующим кратчайшим (насколько мне известно) способом извлечения уникальных перестановок является использование{''.join(i)for i in permutations(f)}
гдеf
- входная строка.Наконец, обратите внимание, что это обе лямбда-функции и, следовательно, должны вызываться в формате
print(<Function Name>(<Input String>))
.источник
Mathematica,
3423 байтаНа входе должен быть список символов.
объяснение
Найти все перестановки ввода, отсортированные и без дубликатов.
Распечатайте их один за другим.
источник
Брахилог , 9 байт
Попробуйте онлайн!
объяснение
источник
Perl 6 ,
4944 байтаСтрока как вход
Список символов в качестве ввода
расширенный
источник
#perl6
.».say
вместо.map: *.put
».say
разрешено делать их в любом порядке, и одно время это было сделано преднамеренно.Brachylog (v2), 5 байт
Попробуйте онлайн!
Найти
ᵘ
Niquep
ermutations ввода, сo
к.т. их,ᵐ
арẉ
riteln (запись с новой строки) через этот массив.источник
Python 3,
7785 байтТеперь сортирует!
источник
from itertools import*
в отличие отimport itertools as i
. Вы сможете сохранить байт, заменивi.permutations
наpermutations
.{*...}
вместоset(...)
экономит вам еще два байта.PowerShell v3 +, 171 байт
PowerShell v3 ввел
-Unique
флаг вSort-Object
командлет, поэтому он на несколько байтов короче, чем в версии v2 ниже, так как нам не нужноSelect
сначала.версия v2, 178 байт:
PowerShell не имеет встроенных перестановок, поэтому я позаимствовал мой код у Prime Factors Buddies и немного подправил его для использования здесь.
По сути, это три части, которые я расскажу ниже.
param([char[]]$x)$a,$b=$x;$a=,$a
Принимает данные$x
,char
преобразует их как -array, удаляет первую букву,$a
а остальные -$b
, а затем преобразует$a
в массив с запятой-оператором.while($b){$z,$b=$b;$a+=$a|%{0..($y=($c="$_").Length)|%{-join($c[0..$_]+$z+$c[++$_..$y])};"$z$c";"$c$z"}}
Перебирает оставшиеся буквы ($b
), каждая итерация берет следующую букву и сохраняет ее$z
и оставляет в ней$b
, затем объединяет массив$a
в результат отправки$a
через свой собственный цикл - каждый элемент$a
(временно сохраненный в$c
) зацикливается его собственный.length
, а затем$z
вставляется в каждую позицию, включая добавление и добавление с помощью$z$c
и$c$z
. Например, для$c = '12'
и$z = '3'
, это приведет'132','312','123'
к объединению обратно в$a
.Последняя часть
$a|?{$_.length-eq$x.count}|select -u|sort
берет каждый элемент$a
и используетWhere-Object
предложение, чтобы отфильтровать только те, которые имеют ту же длину, что и входная строка, затемselect
s только-u
уникальные элементы и, наконец,sort
те в алфавитном порядке. Все полученные строки остаются в конвейере, а вывод через неявныйWrite-Output
происходит при завершении программы.источник
|select -u|sort
на|sort -u
. Уверен, что 2.0 не имеет этого.JavaScript (ES6), 119 байт
Где
\n
представляет буквальный символ новой строки. Порт ответа @ ETHproduction на использование строк вместо массивов. Обратный вывод или перемещение завершающего символа новой строки в начало экономит 3 байта.источник
R 113 байтов
Читает ввод из стандартного ввода. Предполагается, что
permute
пакет установлен для вызоваallPerms
функции.Добавлю объяснения, как доберусь домой с работы.
источник
Java
302300 байтUngolfed & тестовый код:
Попробуй это здесь.
Вход: тест
Выход:
источник
Ракетка 82 байта
Ungolfed:
Тестирование:
Ouput:
источник
Groovy, 69 байт
источник
Рубин, 51 байт
источник
puts s.chars.permutation().map(&:join).uniq
43 байтаs
без предварительного определения.На самом деле , 8 байт
Предложения по игре в гольф приветствуются! Попробуйте онлайн!
Ungolfing
источник
Пип , 8 байт
7 байтов кода, +1 за
-n
флаг.Принимает строку в качестве аргумента командной строки. Попробуйте онлайн!
Сканер Пипа разбивает серии заглавных букв на две буквы. Итак, этот код
SS UQ PM a
--ieSortString(UniQue(PerMutations(a)))
, сa
аргументом командной строки arg. В-n
флаге обеспечивает список результата новая строка , разделенная. Это все, что нужно сделать.источник
K (ок) , 14 байтов
Решение:
Попробуйте онлайн!
Объяснение:
Используйте встроенную функцию перестановки
prm
, чтобы генерировать перестановки длины ввода, применять эти перестановки к вводу, сортировать по алфавиту и затем принимать различные значения.источник
Perl 5
-MList::Util=uniq -F
, 68 байтПопробуйте онлайн!
источник
Japt v2.0a0
-R
, 5 байтПопытайся
источник
û
метод центра па; Я думаю, что вы имели в видуn
;)sort
панель поиска в ваш переводчик и нажал первую найденную мной. Но,á
похоже, каждая перестановка приведена в алфавитном порядкеü
. Я исправлю это завтра. Перестановки «гудения» оказываются отсортированными, потому что само слово есть - попробуйте вместо этого «zzub», например.n
(легче набрать)C ++ (gcc) ,
132128 байтПопробуйте онлайн!
источник
Моллюск , 9 байт
объяснение
источник