Brace expansion using ranges: Difference between revisions

Content added Content deleted
m (→‎{{header|Raku}}: Tidy, DRY, no functional changes)
(julia example)
Line 867: Line 867:
rangeless{random}string ->
rangeless{random}string ->
rangeless{random}string</pre>
rangeless{random}string</pre>

=={{header|Julia}}==
Julia currently does not handle certain trigraphs in strings correctly, such as , so that test is omitted.
<lang julia>prefixzeros(str) = length(str) > 1 && str[1] == '0' ? length(str) : 0

function ranged(str)
rang = split(str[2:end-1], "..")
delta = length(rang) > 2 ? parse(Int, rang[3]) : 1
if delta < 0
rang[1], rang[2], delta = rang[2], rang[1], -delta
end
if '0' <= rang[1][1] <= '9' || rang[1][1] == '-'
x, y = parse(Int, rang[1]), parse(Int, rang[2])
pad = max(prefixzeros(rang[1]), prefixzeros(rang[2]))
return [string(x, pad=pad) for x in range(x, step=(x < y) ? delta : -delta, stop=y)]
else
x, y, z = rang[1][end], rang[2][end], rang[1][1:end-1]
return [z * string(x) for x in range(x, step=(x < y) ? delta : -delta, stop=y)]
end
end

function splatrange(s)
m = match(r"([^\{]*)(\{[^}]+\.\.[^\}]+\})(.*)", s)
m == nothing && return [s]
cap = m.captures
return [a * b for b in splatrange(cap[3]),
a in [cap[1] * string(x) for x in ranged(cap[2])]][:]
end

for test in [
"simpleNumberRising{1..3}.txt",
"simpleAlphaDescending-{Z..X}.txt",
"steppedDownAndPadded-{10..00..5}.txt",
"minusSignFlipsSequence {030..20..-5}.txt",
"combined-{Q..P}{2..1}.txt",
"li{teral",
"rangeless{}empty",
"rangeless{random}string",
]
println(test, "->\n", [" " * x * "\n" for x in splatrange(test)]...)
end
</lang>{{out}}
<pre>
simpleNumberRising{1..3}.txt->
simpleNumberRising1.txt
simpleNumberRising2.txt
simpleNumberRising3.txt

simpleAlphaDescending-{Z..X}.txt->
simpleAlphaDescending-Z.txt
simpleAlphaDescending-Y.txt
simpleAlphaDescending-X.txt

steppedDownAndPadded-{10..00..5}.txt->
steppedDownAndPadded-10.txt
steppedDownAndPadded-05.txt
steppedDownAndPadded-00.txt

minusSignFlipsSequence {030..20..-5}.txt->
minusSignFlipsSequence 020.txt
minusSignFlipsSequence 025.txt
minusSignFlipsSequence 030.txt

combined-{Q..P}{2..1}.txt->
combined-Q2.txt
combined-Q1.txt
combined-P2.txt
combined-P1.txt

li{teral->
li{teral

rangeless{}empty->
rangeless{}empty

rangeless{random}string->
rangeless{random}string
</pre>


=={{header|Raku}}==
=={{header|Raku}}==