Range modifications: Difference between revisions
Content added Content deleted
m (sort input) |
m (parse reversed ranges) |
||
Line 209: | Line 209: | ||
=={{header|Julia}}== |
=={{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. |
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. |
<lang julia>import Base.parse, Base.print, Base.reduce |
||
const RangeSequence = Array{UnitRange, 1} |
const RangeSequence = Array{UnitRange, 1} |
||
Line 238: | Line 238: | ||
startstop = split(e, r"\:|\-") |
startstop = split(e, r"\:|\-") |
||
if length(startstop) == 2 |
if length(startstop) == 2 |
||
start = tryparse(Int, startstop[1]) |
start, stop = tryparse(Int, startstop[1]), tryparse(Int, startstop[2]) |
||
stop = |
start, stop = start <= stop ? (start, stop) : (stop, start) |
||
start != nothing && stop != nothing && combine!(seq, start:stop) |
|||
combine!(seq, start:stop) |
|||
end |
|||
elseif (n = tryparse(Int, startstop[1])) != nothing |
elseif (n = tryparse(Int, startstop[1])) != nothing |
||
combine!(seq, n:n) |
combine!(seq, n:n) |
||
Line 262: | Line 260: | ||
else |
else |
||
newseq = vcat(combine!(seq[1:pos], n:n), seq[pos+1:end]) |
newseq = vcat(combine!(seq[1:pos], n:n), seq[pos+1:end]) |
||
empty!(seq) |
append!(empty!(seq), newseq) |
||
append!(seq, newseq) |
|||
end |
end |
||
return seq |
return seq |
||
end |
end |
||
reduce( |
reduce(a::RangeSequence) = begin seq = UnitRange[]; for r in a combine!(seq, r) end; seq end |
||
function removeinteger!(seq, n::Integer) |
function removeinteger!(seq, n::Integer) |
||
Line 338: | Line 335: | ||
println("Parse \"10-25, 1-5, 27-30\" => ", parse(RangeSequence, "10-25, 1-5, 27-30")) |
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}} |
</lang>{{out}} |
||
<pre> |
<pre> |
||
Line 365: | Line 363: | ||
Parse "10-25, 1-5, 27-30" => 1-5,10-25,27-30 |
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> |
</pre> |
||