R、112 107 99バイト
非再帰的なアプローチ。「<」と「>」を使用するのは、正規表現でエスケープ文字を回避するためです。ASCII範囲のより短い仕様を使用できるようにするために、expand.grid
(ASCIIコード60、61、62 を使用して)「<」、「=」、「>」の3 ^ 2n 2n文字の文字列を生成し、次にgrepを実行します。開き括弧と閉じ括弧のバランスが取れている組み合わせを確認してください。もちろん、「=」の可能性は無視されます。
経由http://rachbelaid.com/recursive-regular-experession/
function(n)sort(grep("^(<(?1)*>)(?1)*$",apply(expand.grid(rep(list(60:62),2*n)),1,intToUtf8),,T,T))
オンラインでお試しください!
説明
"^(<(?1)*>)(?1)*$" = regex for balanced <> with no other characters
^ # match a start of the string
( # start of expression 1
< # open <>
(?1)* # optional repeat of any number of expression 1 (recursive)
# allows match for parentheses like (()()())(()) where ?1 is (\\((?1)*\\))
> # close <>
) # end of expression 1
(?1)* # optional repeat of any number of expression 1
$ # end of string
function(n)
sort(
grep("^(<(?1)*>)(?1)*$", # search for regular expression matching open and close brackets
apply(
expand.grid(rep(list(60:62),2*n)) # generate 3^(2n) 60,61,62 combinations
,1,intToUtf8) # turn into all 3^(2n) combinations of "<","=",">"
,,T,T) # return the values that match the regex, so "=" gets ignored
) # sort them
R、107バイト
通常の再帰的アプローチ。
-1ありがとう@Giuseppe
f=function(n,x=0:1)`if`(n,sort(unique(unlist(Map(f,n-1,lapply(seq(x),append,x=x,v=0:1))))),intToUtf8(x+40))
オンラインでお試しください!