September Morn Update
This commit is contained in:
parent
4e2d22a71d
commit
aac6731f2c
6856 changed files with 141342 additions and 21127 deletions
84
Task/Natural-sorting/Julia/natural-sorting.julia
Normal file
84
Task/Natural-sorting/Julia/natural-sorting.julia
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
#1
|
||||
natural1(x, y) = strip(x) < strip(y)
|
||||
|
||||
#2
|
||||
natural2(x, y) = replace(x, r"\s+" => " ") < replace(y, r"\s+" => " ")
|
||||
|
||||
#3
|
||||
natural3(x, y) = lowercase(x) < lowercase(y)
|
||||
|
||||
#4
|
||||
splitbynum(x) = split(x, r"(?<=\D)(?=\d)|(?<=\d)(?=\D)")
|
||||
numstringtonum(arr) = [(n = tryparse(Float32, e)) != nothing ? n : e for e in arr]
|
||||
function natural4(x, y)
|
||||
xarr = numstringtonum(splitbynum(x))
|
||||
yarr = numstringtonum(splitbynum(y))
|
||||
for i in 1:min(length(xarr), length(yarr))
|
||||
if typeof(xarr[i]) != typeof(yarr[i])
|
||||
a = string(xarr[i]); b = string(yarr[i])
|
||||
else
|
||||
a = xarr[i]; b = yarr[i]
|
||||
end
|
||||
if a == b
|
||||
continue
|
||||
else
|
||||
return a < b
|
||||
end
|
||||
end
|
||||
return length(xarr) < length(yarr)
|
||||
end
|
||||
|
||||
#5
|
||||
deart(x) = replace(x, r"^The\s+|^An\s+|^A\s+"i => "")
|
||||
natural5(x, y) = deart(x) < deart(y)
|
||||
|
||||
#6
|
||||
const accentdict = Dict(
|
||||
'À'=> 'A', 'Á'=> 'A', 'Â'=> 'A', 'Ã'=> 'A', 'Ä'=> 'A',
|
||||
'Å'=> 'A', 'Ç'=> 'C', 'È'=> 'E', 'É'=> 'E',
|
||||
'Ê'=> 'E', 'Ë'=> 'E', 'Ì'=> 'I', 'Í'=> 'I', 'Î'=> 'I',
|
||||
'Ï'=> 'I', 'Ñ'=> 'N', 'Ò'=> 'O', 'Ó'=> 'O',
|
||||
'Ô'=> 'O', 'Õ'=> 'O', 'Ö'=> 'O', 'Ù'=> 'U', 'Ú'=> 'U',
|
||||
'Û'=> 'U', 'Ü'=> 'U', 'Ý'=> 'Y', 'à'=> 'a', 'á'=> 'a',
|
||||
'â'=> 'a', 'ã'=> 'a', 'ä'=> 'a', 'å'=> 'a', 'è'=> 'e',
|
||||
'é'=> 'e', 'ê'=> 'e', 'ë'=> 'e', 'ì'=> 'i', 'í'=> 'i',
|
||||
'î'=> 'i', 'ï'=> 'i', 'ð'=> 'd', 'ñ'=> 'n', 'ò'=> 'o',
|
||||
'ó'=> 'o', 'ô'=> 'o', 'õ'=> 'o', 'ö'=> 'o', 'ù'=> 'u',
|
||||
'ú'=> 'u', 'û'=> 'u', 'ü'=> 'u', 'ý'=> 'y', 'ÿ'=> 'y')
|
||||
function tr(str, dict=accentdict)
|
||||
for (i, ch) in enumerate(str)
|
||||
if haskey(dict, ch)
|
||||
arr = split(str, "")
|
||||
arr[i] = string(dict[ch])
|
||||
str = join(arr)
|
||||
end
|
||||
end
|
||||
str
|
||||
end
|
||||
|
||||
natural6(x, y) = tr(x) < tr(y)
|
||||
|
||||
#7
|
||||
const ligaturedict = Dict('œ' => "oe", 'Œ' => "OE", 'æ' => "ae", 'Æ' => "AE", 'IJ' => "IJ")
|
||||
natural7(x, y) = tr(x, ligaturedict) < tr(y, ligaturedict)
|
||||
|
||||
#8
|
||||
const altsdict = Dict('ß' => "ss", 'ſ' => 's', 'ʒ' => 's')
|
||||
natural8(x, y) = tr(x, altsdict) < tr(y, altsdict)
|
||||
|
||||
preprocessors = [natural1, natural2, natural2, natural3, natural4, natural5, natural6, natural7, natural8]
|
||||
|
||||
const testarrays = Vector{Vector{String}}([
|
||||
["ignore leading spaces: 2-2", " ignore leading spaces: 2-1", " ignore leading spaces: 2+0", " ignore leading spaces: 2+1"],
|
||||
["ignore m.a.s spaces: 2-2", "ignore m.a.s spaces: 2-1", "ignore m.a.s spaces: 2+0", "ignore m.a.s spaces: 2+1"],
|
||||
["Equiv. spaces: 3-3", "Equiv.\rspaces: 3-2", "Equiv.\x0cspaces: 3-1", "Equiv.\x0bspaces: 3+0", "Equiv.\nspaces: 3+1", "Equiv.\tspaces: 3+2"],
|
||||
["cASE INDEPENENT: 3-2", "caSE INDEPENENT: 3-1", "casE INDEPENENT: 3+0", "case INDEPENENT: 3+1"],
|
||||
["foo100bar99baz0.txt", "foo100bar10baz0.txt", "foo1000bar99baz10.txt", "foo1000bar99baz9.txt"],
|
||||
["The Wind in the Willows", "The 40th step more", "The 39 steps", "Wanda"],
|
||||
["Equiv. ý accents: 2-2", "Equiv. Ý accents: 2-1", "Equiv. y accents: 2+0", "Equiv. Y accents: 2+1"],
|
||||
["IJ ligatured ij", "no ligature"],
|
||||
["Start with an ʒ: 2-2", "Start with an ſ: 2-1", "Start with an ß: 2+0", "Start with an s: 2+1"]])
|
||||
|
||||
for (i, ltfunction) in enumerate(preprocessors)
|
||||
println("Testing sorting mod number $i. Sorted is: $(sort(testarrays[i], lt=ltfunction)).")
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue