Range modifications: Difference between revisions

m
parse reversed ranges
m (sort input)
m (parse reversed ranges)
Line 209:
=={{header|Julia}}==
Julia has iterator classes called a type of Range, such as integer UnitRanges, that are like the "10-10" of the task but are stated as 10:10, with a colon not a minus sign. This implementation uses Julia's UnitRange class internally.
<lang julia>import Base.stringparse, Base.parseprint, Base.printreduce
 
const RangeSequence = Array{UnitRange, 1}
Line 238:
startstop = split(e, r"\:|\-")
if length(startstop) == 2
start, stop = tryparse(Int, startstop[1]), tryparse(Int, startstop[2])
start, stop = start <= stop ? tryparse(Intstart, stop) : (stop, startstop[2]start)
if start != nothing && stop != nothing && combine!(seq, start:stop)
combine!(seq, start:stop)
end
elseif (n = tryparse(Int, startstop[1])) != nothing
combine!(seq, n:n)
Line 262 ⟶ 260:
else
newseq = vcat(combine!(seq[1:pos], n:n), seq[pos+1:end])
append!(empty!(seq), newseq)
append!(seq, newseq)
end
return seq
end
 
reduce(rangeseqa::RangeSequence) = begin seq = UnitRange[]; for r in rangeseqa combine!(seq, r) end; seq end
 
function removeinteger!(seq, n::Integer)
Line 338 ⟶ 335:
 
println("Parse \"10-25, 1-5, 27-30\" => ", parse(RangeSequence, "10-25, 1-5, 27-30"))
println("Parse \"1-3,5-15,25-10,27-30\" => ", parse(RangeSequence, "1-3,5-15,25-10,27-30"))
</lang>{{out}}
<pre>
Line 365 ⟶ 363:
 
Parse "10-25, 1-5, 27-30" => 1-5,10-25,27-30
Parse "1-3,5-15,25-10,27-30" => 1-3,10-25,27-30
</pre>
 
4,102

edits