Por razões principalmente históricas, o bash é uma mistura de paradigmas de sintaxe e programação - isso pode torná-lo estranho e às vezes frustrante para o golfe. No entanto, existem alguns truques na manga, que muitas vezes podem torná-lo competitivo com outros scripts tradicionais. línguas. Uma delas é a expansão de chaves .
Existem dois tipos básicos de expansão de chaves:
- Os colchetes de lista podem conter listas separadas por vírgula de cadeias arbitrárias (incluindo duplicatas e a cadeia vazia). Por exemplo
{a,b,c,,pp,cg,pp,}
, expandirá paraa b c pp cg pp
(observe os espaços ao redor das cadeias vazias). - Os colchetes de sequência podem conter pontos finais de sequência separados por
..
. Opcionalmente, outro..
pode ser seguido, seguido por um tamanho de etapa. Os pontos finais da sequência podem ser números inteiros ou caracteres. A sequência sobe ou desce automaticamente de acordo com o ponto final maior. Por exemplo:{0..15}
vai expandir para0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
{-10..-5}
vai expandir para-10 -9 -8 -7 -6 -5
{3..-6..2}
vai expandir para3 1 -1 -3 -5
{a..f}
vai expandir paraa b c d e f
{Z..P..3}
vai expandir paraZ W T Q
Além disso, chaves de sequência e lista podem existir com chaves de lista:
{a,b,{f..k},p}
vai expandir paraa b f g h i j k p
{a,{b,c}}
vai expandir paraa b c
O aparelho se expande com cadeias que não sejam espaços em branco em ambos os lados. Por exemplo:
c{a,o,ha,}t
vai expandir paracat cot chat ct
Isso também funciona para várias chaves concatenadas juntas:
{ab,fg}{1..3}
vai expandir paraab1 ab2 ab3 fg1 fg2 fg3
Isso pode ficar bastante complexo. Por exemplo:
{A..C}{x,{ab,fg}{1..3},y,}
vai expandir paraAx 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
No entanto, se houver espaço em branco entre as expansões, elas simplesmente se expandirão como expansões separadas. Por exemplo:
{a..c} {1..5}
vai expandir paraa b c 1 2 3 4 5
Observe como a ordem é sempre preservada.
As inscrições para esse desafio expandirão as expansões de chaves de bash, conforme descrito acima. Em particular:
- avaliação por
bash
(ou outras conchas que executam expansão semelhante) não é permitida - chaves entre sequências sempre serão de número para número, minúsculas para minúsculas ou maiúsculas para maiúsculas sem mistura. Os números serão números inteiros no intervalo assinado de 32 bits. Se fornecido, o tamanho opcional da etapa sempre será um número inteiro positivo. (Observe que o bash também se expandirá
{A..z}
, mas isso pode ser ignorado para esse desafio) - itens individuais entre chaves sempre serão compostos apenas por caracteres alfanuméricos em maiúsculas e minúsculas (string vazia incluída)
- chaves de lista podem conter aninhamentos arbitrários de outras expansões de chave
- chaves podem ser concatenadas números arbitrários de vezes. Isso será limitado pela memória do seu idioma; portanto, a expectativa é que você possa teoricamente fazer números arbitrários de concatenações, mas se / quando ficar sem memória, isso não será considerado.
Os exemplos no texto acima servem como casos de teste. Resumidos, com cada linha de entrada correspondente à mesma linha de saída, são eles:
Entrada
{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
Resultado
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