PowerShell v3 +, 171 바이트
param([char[]]$x)$a,$b=$x;$a=,$a;while($b){$z,$b=$b;$a+=$a|%{0..($y=($c="$_").Length)|%{-join($c[0..$_]+$z+$c[++$_..$y])};"$z$c";"$c$z"}}$a|?{$_.length-eq$x.count}|sort -u
PowerShell v3 -Unique
은 Sort-Object
cmdlet 에 플래그를 도입 했으므로 Select
먼저 v2 버전보다 필요하지 않기 때문에 아래 v2 버전보다 몇 바이트 짧습니다 .
v2 버전, 178 바이트 :
param([char[]]$x)$a,$b=$x;$a=,$a;while($b){$z,$b=$b;$a+=$a|%{0..($y=($c="$_").Length)|%{-join($c[0..$_]+$z+$c[++$_..$y])};"$z$c";"$c$z"}}$a|?{$_.length-eq$x.count}|select -u|sort
PowerShell에는 내장 순열이 없으므로 Prime Factors Buddies 에서 코드를 빌려 여기에서 사용할 수 있도록 약간 조정했습니다.
이것은 본질적으로 세 부분으로, 아래에서 확장하겠습니다.
param([char[]]$x)$a,$b=$x;$a=,$a
input을 가져 와서 배열로 $x
캐스트 char
하고 첫 번째 문자를으로 분리 $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
각 항목 은 반복됩니다 자신의 다음과 붙이는와 함께 추가를 포함하여 모든 위치에 삽입 하고 . 예를 들어 for 및 을 사용하면으로 다시 연결됩니다 .$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
nique 항목, 마지막 sort
알파벳 S는 이들. 결과 문자열은 모두 파이프 라인에 남아 있으며 암시 적 출력 Write-Output
은 프로그램 완료시 발생합니다.
PS C:\Tools\Scripts\golfing> .\alphabetically-permute-a-string.ps1 'PPCG'
CGPP
CPGP
CPPG
GCPP
GPCP
GPPC
PCGP
PCPG
PGCP
PGPC
PPCG
PPGC
["buzz" "bzuz" "bzzu" "ubzz" "uzbz" "uzzb" "zbuz" "zbzu" "zubz" "zuzb" "zzbu" "zzub"]
?