최대 n 음절에 대해 (c)v 패턴에 맞는 문자 조합을 찾으려고 노력하고 있으므로 echo {,p,t}{a,i}
한 음절에 대한 모든 가능성과 마찬가지로 먼저 확장을 사용합니다(가독성을 위해 2자만 사용). 더 많은 음절을 얻으려면 내가 생각할 수 있는 것은 모든 음절로 확장하는 것뿐입니다 echo {{,p,t}{a,i},{,p,t}{a,i}{,p,t}{a,i}}
(예: "모든 1음절 조합 다음 모든 2음절 조합"). echo {,p,t}{a,i}*{1..3}
1, 2, 3 음절 확장 등을 모두 입력할 수 있도록 n 음절로 확장하는 더 좋은 방법이 있습니까 ?
답변1
당신은 이런 일을 할 수 있습니다
불다, 165바이트
f(){
i=$1
exp=$2
con=$2
printf '{'
while [ "$i" -gt 0 ] ; do
(( i-- ))
printf '%s' "$con,"
con+=$exp
done
printf '}'
echo
}
eval echo "$(f 6 '{,p,t}{a,i}')"
답변2
지쉬, 73바이트
c=('' p t) v=(a i) r=({1..4})
(){echo ${(e)@}} '${(el['$^r'*6][$^c$^v])}'
확장하세요:
$ c=( '' p t ) v=( a i ) r=( {1..4} )
$ echo $c$v
p ta i
$ echo $^c$^v
a i pa pi ta ti
$^c
대신 을 사용하면 $c
배열 확장은 중괄호 확장과 약간 비슷합니다.
$ echo ${(l[12][$^c$^v])}
$^c$^v$^c$^v
우리는 연장한다아무것도 없다(매개변수 확장에는 매개변수가 없습니다.) l
eft 패딩 연산자를 사용합니다. 여기서는 문자열을 $^c$^v
길이 12
(문자열 길이의 두 배 $^c$^v
)로 패딩합니다.
$ echo ${(el[12][$^c$^v])}
aa ai apa api ata ati ia ii ipa ipi ita iti paa pai papa papi pata pati pia pii pipa pipi pita piti taa tai tapa tapi tata tati tia tii tipa tipi tita titi
매개변수 확장 플래그를 추가하면 e
결과의 확장이 e
평가/ e
확장됩니다.
따라서 우리가 해야 할 일은 6, 12, ... n*6 패딩을 생성하는 것뿐입니다.
$ echo '${(el['$^r'*6][$^c$^v])}'
${(el[1*6][$^c$^v])} ${(el[2*6][$^c$^v])} ${(el[3*6][$^c$^v])} ${(el[4*6][$^c$^v])}
이러한 단어를 배열에 넣을 수 있으면 e
해당 단어에 플래그를 적용하여 결과를 확장할 수 있습니다. 이를 위해 우리는 익명 함수를 사용하고 이 단어를 $@
일명 $argv
배열에서 사용할 수 있는 매개변수로 전달합니다.
답변3
코드/로직을 최대한 활용하세요.
케시, 95바이트, 해롭지 않습니다 eval
:)
n=4
for ((i=1; i<=n; i++)) {
printf -v x '{,p,t}{a,i}%.0s' {1..$i}
printf '%s\n' $x
}
ksh
구현에서 이를 지원하지 않는 경우 printf -v x
다음으로 바꾸세요.x=$(printf ...)