Pour des raisons principalement historiques, bash est un méli-mélo de paradigmes de syntaxe et de programmation - cela peut le rendre gênant et parfois frustrant pour le golf. Cependant, il a quelques astuces dans sa manche qui peuvent souvent le rendre compétitif avec d'autres scripts traditionnels. langues. L'un d'eux est l' expansion des orthèses .
Il existe deux types de base d'extension d'expansion:
- Les accolades de liste peuvent contenir des listes de chaînes arbitraires séparées par des virgules (y compris les doublons et la chaîne vide). Par exemple
{a,b,c,,pp,cg,pp,}
, développeraa b c pp cg pp
(notez les espaces autour des chaînes vides). - Les accolades de séquence peuvent contenir des points de terminaison de séquence séparés par
..
. Facultativement, un autre..
peut suivre, suivi d'une taille de pas. Les points de terminaison de séquence peuvent être des nombres entiers ou des caractères. La séquence monte ou descend automatiquement en fonction du point final le plus élevé. Par exemple:{0..15}
va s'étendre à0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
{-10..-5}
va s'étendre à-10 -9 -8 -7 -6 -5
{3..-6..2}
va s'étendre à3 1 -1 -3 -5
{a..f}
va s'étendre àa b c d e f
{Z..P..3}
va s'étendre àZ W T Q
Au-delà, des accolades de séquence et de liste peuvent exister avec des accolades de liste:
{a,b,{f..k},p}
va s'étendre àa b f g h i j k p
{a,{b,c}}
va s'étendre àa b c
Les accolades se développent avec des chaînes non blanches de chaque côté. Par exemple:
c{a,o,ha,}t
va s'étendre àcat cot chat ct
Cela fonctionne également pour plusieurs accolades concaténées ensemble:
{ab,fg}{1..3}
va s'étendre àab1 ab2 ab3 fg1 fg2 fg3
Cela peut devenir assez complexe. Par exemple:
{A..C}{x,{ab,fg}{1..3},y,}
va s'étendre à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
Cependant, s'il y a un espace entre les extensions, elles se développent simplement en tant qu'extensions distinctes. Par exemple:
{a..c} {1..5}
va s'étendre àa b c 1 2 3 4 5
Notez comment l'ordre est toujours préservé.
Les entrées pour ce défi développeront les extensions d'accolade bash comme décrit ci-dessus. En particulier:
- eval by
bash
(ou d'autres shells qui effectuent une expansion similaire) n'est pas autorisé - les accolades de séquence seront toujours numérotées, minuscules à minuscules ou majuscules à majuscules sans mélange. Les nombres seront des entiers dans la plage signée 32 bits. Si elle est donnée, la taille de pas facultative sera toujours un entier positif. (Notez que bash se développera
{A..z}
également, mais cela peut être ignoré pour ce défi) - les éléments individuels entre accolades de liste seront toujours composés uniquement de caractères alphanumériques en majuscules et minuscules (chaîne vide incluse)
- les accolades de liste peuvent contenir des imbrications arbitraires d'autres extensions d'accolade
- les accolades peuvent être concaténées un nombre arbitraire de fois. Ceci sera limité par la mémoire de votre langue, donc on s'attend à ce que vous puissiez théoriquement faire un nombre arbitraire de concaténations mais si / quand vous manquez de mémoire cela ne comptera pas contre vous.
Les exemples dans le texte ci-dessus servent de cas de test. Résumées, chaque ligne d'entrée correspondant à la même ligne de sortie, elles sont:
Contribution
{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
Production
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