불다, 165바이트

불다, 165바이트

최대 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

우리는 연장한다아무것도 없다(매개변수 확장에는 매개변수가 없습니다.) left 패딩 연산자를 사용합니다. 여기서는 문자열을 $^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 ...)

온라인으로 사용해 보세요!

관련 정보