Brace expansion using ranges: Difference between revisions
Content added Content deleted
m (→{{header|Phix}}: added syntax colouring the hard way) |
Alextretyak (talk | contribs) (Added 11l) |
||
Line 106: | Line 106: | ||
* [[Range_expansion|range expansion]] |
* [[Range_expansion|range expansion]] |
||
<br><br> |
<br><br> |
||
=={{header|11l}}== |
|||
{{trans|Nim}} |
|||
<lang 11l>F intFromString(s) -> Int? |
|||
X.try |
|||
R Int(s) |
|||
X.catch ValueError |
|||
R N |
|||
F parseRange(r) |
|||
I r.empty {R [‘{}’]} |
|||
V sp = r.split(‘..’) |
|||
I sp.len == 1 {R [‘{’r‘}’]} |
|||
V first = sp[0] |
|||
V last = sp[1] |
|||
V incr = I sp.len == 2 {‘1’} E sp[2] |
|||
Int? val1 = intFromString(first) |
|||
Int? val2 = intFromString(last) |
|||
Int? val3 = intFromString(incr) |
|||
I val3 == N {R [‘{’r‘}’]} |
|||
V n3 = val3 |
|||
V numeric = val1 != N & val2 != N |
|||
Int n1 |
|||
Int n2 |
|||
I numeric |
|||
n1 = val1 |
|||
n2 = val2 |
|||
E |
|||
I (val1 != N & val2 == N) | (val1 == N & val2 != N) |
|||
R [‘{’r‘}’] |
|||
I first.len != 1 | last.len != 1 |
|||
R [‘{’r‘}’] |
|||
n1 = first[0].code |
|||
n2 = last[0].code |
|||
V width = 1 |
|||
I numeric |
|||
width = max(first.len, last.len) |
|||
I n3 == 0 |
|||
R I numeric {[String(n1).zfill(width)]} E [first] |
|||
V asc = n1 < n2 |
|||
I n3 < 0 |
|||
asc = !asc |
|||
swap(&n1, &n2) |
|||
n3 = -n3 |
|||
[String] result |
|||
V i = n1 |
|||
I asc |
|||
L i <= n2 |
|||
result.append(I numeric {String(i).zfill(width)} E Char(code' i)) |
|||
i += n3 |
|||
E |
|||
L i >= n2 |
|||
result.append(I numeric {String(i).zfill(width)} E Char(code' i)) |
|||
i -= n3 |
|||
R result |
|||
F rangeExpand(s) |
|||
V result = [‘’] |
|||
V rng = ‘’ |
|||
V inRng = 0B |
|||
L(c) s |
|||
I c == ‘{’ & !inRng |
|||
inRng = 1B |
|||
rng = ‘’ |
|||
E I c == ‘}’ & inRng |
|||
V rngRes = parseRange(rng) |
|||
[String] res |
|||
L(r) result |
|||
L(rr) rngRes |
|||
res.append(r‘’rr) |
|||
result = move(res) |
|||
inRng = 0B |
|||
E I inRng |
|||
rng ‘’= c |
|||
E |
|||
L(&s) result |
|||
s ‘’= c |
|||
I inRng |
|||
L(&s) result |
|||
s ‘’= ‘{’rng |
|||
R result |
|||
-V examples = [‘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’, |
|||
‘mixedNumberAlpha{5..k}’, |
|||
‘steppedAlphaRising{P..Z..2}.txt’, |
|||
‘stops after endpoint-{02..10..3}.txt’] |
|||
L(s) examples |
|||
print(s" ->\n ", end' ‘’) |
|||
V res = rangeExpand(s) |
|||
print(res.join("\n ")) |
|||
print()</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 |
|||
mixedNumberAlpha{5..k} -> |
|||
mixedNumberAlpha{5..k} |
|||
steppedAlphaRising{P..Z..2}.txt -> |
|||
steppedAlphaRisingP.txt |
|||
steppedAlphaRisingR.txt |
|||
steppedAlphaRisingT.txt |
|||
steppedAlphaRisingV.txt |
|||
steppedAlphaRisingX.txt |
|||
steppedAlphaRisingZ.txt |
|||
stops after endpoint-{02..10..3}.txt -> |
|||
stops after endpoint-02.txt |
|||
stops after endpoint-05.txt |
|||
stops after endpoint-08.txt |
|||
</pre> |
|||
=={{header|Go}}== |
=={{header|Go}}== |