대부분의 역사적 이유에서 bash는 구문과 프로그래밍 패러다임의 절묘한 피지입니다. 이로 인해 어색하고 때로는 골프에 좌절감을 줄 수 있습니다. 언어. 이 중 하나는 괄호 확장 입니다.
괄호 확장에는 두 가지 기본 유형이 있습니다.
- 목록 중괄호에는 쉼표로 구분 된 임의 문자열 (중복 및 빈 문자열 포함) 목록이 포함될 수 있습니다. 예를 들어 (빈 문자열 주위의 공백에 유의)로
{a,b,c,,pp,cg,pp,}
확장됩니다a b c pp cg pp
. - 시퀀스 괄호는로 구분 된 시퀀스 엔드 포인트를 포함 할 수 있습니다
..
. 선택적으로 다른..
단계 다음에 단계 크기가 올 수 있습니다. 시퀀스 엔드 포인트는 정수 또는 문자 일 수 있습니다. 시퀀스는 어느 엔드 포인트가 큰지에 따라 자동으로 올라가거나 내려갑니다. 예를 들면 다음과 같습니다.{0..15}
~로 확장됩니다0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
{-10..-5}
~로 확장됩니다-10 -9 -8 -7 -6 -5
{3..-6..2}
~로 확장됩니다3 1 -1 -3 -5
{a..f}
~로 확장됩니다a b c d e f
{Z..P..3}
~로 확장됩니다Z W T Q
이 외에도 시퀀스 및 목록 괄호가 목록 괄호와 함께 존재할 수 있습니다.
{a,b,{f..k},p}
~로 확장됩니다a b f g h i j k p
{a,{b,c}}
~로 확장됩니다a b c
공백은 공백이 아닌 문자열로 확장됩니다. 예를 들면 다음과 같습니다.
c{a,o,ha,}t
~로 확장됩니다cat cot chat ct
이것은 함께 연결된 여러 개의 중괄호에도 적용됩니다.
{ab,fg}{1..3}
~로 확장됩니다ab1 ab2 ab3 fg1 fg2 fg3
이것은 상당히 복잡해질 수 있습니다. 예를 들면 다음과 같습니다.
{A..C}{x,{ab,fg}{1..3},y,}
~로 확장됩니다Ax Aab1 Aab2 Aab3 Afg1 Afg2 Afg3 Ay A Bx Bab1 Bab2 Bab3 Bfg1 Bfg2 Bfg3 By B Cx Cab1 Cab2 Cab3 Cfg1 Cfg2 Cfg3 Cy C
그러나 확장 사이에 공백이 있으면 단순히 별도의 확장으로 확장됩니다. 예를 들면 다음과 같습니다.
{a..c} {1..5}
~로 확장됩니다a b c 1 2 3 4 5
순서가 항상 유지되는 방식에 유의하십시오.
이 챌린지에 대한 항목은 위에서 설명한대로 bash 괄호 확장을 확장합니다. 특히:
- 에 의해 평가
bash
(또는 유사한 확장을 수행하는 다른 쉘)는 허용되지 않습니다. - 시퀀스 괄호는 항상 숫자없이, 소문자에서 소문자로 또는 대문자에서 대문자로 믹싱되지 않습니다. 숫자는 32 비트 부호있는 범위의 정수입니다. 주어진 경우 선택적 단계 크기는 항상 양의 정수입니다. (bash도 확장
{A..z}
되지만이 도전에서는 무시 될 수 있음) - 목록 중괄호의 개별 항목은 항상 대문자와 소문자 영숫자로만 구성됩니다 (빈 문자열 포함)
- 리스트 괄호에는 다른 괄호 확장의 임의 중첩이 포함될 수 있습니다.
- 중괄호는 임의의 횟수로 연결될 수 있습니다. 이것은 언어의 메모리에 의해 제한 될 것이므로 이론적으로 임의의 수의 연결을 수행 할 수 있지만 메모리가 부족한 경우에는 계산되지 않습니다.
위 텍스트의 예제는 테스트 케이스 역할을합니다. 각 입력 줄이 동일한 출력 줄에 해당하면 요약하면 다음과 같습니다.
입력
{0..15}
{-10..-5}
{3..-6..2}
{a..f}
{Z..P..3}
{a,b,{f..k},p}
{a,{b,c}}
c{a,o,ha,}t
{ab,fg}{1..3}
{A..C}{x,{ab,fg}{1..3},y,}
{a..c} {1..5}
{a{0..100..10},200}r
산출
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-10 -9 -8 -7 -6 -5
3 1 -1 -3 -5
a b c d e f
Z W T Q
a b f g h i j k p
a b c
cat cot chat ct
ab1 ab2 ab3 fg1 fg2 fg3
Ax Aab1 Aab2 Aab3 Afg1 Afg2 Afg3 Ay A Bx Bab1 Bab2 Bab3 Bfg1 Bfg2 Bfg3 By B Cx Cab1 Cab2 Cab3 Cfg1 Cfg2 Cfg3 Cy C
a b c 1 2 3 4 5
a0r a10r a20r a30r a40r a50r a60r a70r a80r a90r a100r 200r