По историческим причинам 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-скобок, как описано выше. Особенно:
- Eval by
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