Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
79
Task/Commatizing-numbers/Wren/commatizing-numbers.wren
Normal file
79
Task/Commatizing-numbers/Wren/commatizing-numbers.wren
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
var commatize = Fn.new { |s, start, step, sep|
|
||||
var addSeps = Fn.new { |n, dp|
|
||||
var lz = ""
|
||||
if (!dp && n.startsWith("0") && n != "0") {
|
||||
var k = n.trimStart("0")
|
||||
if (k == "") k = "0"
|
||||
lz = "0" * (n.count - k.count)
|
||||
n = k
|
||||
}
|
||||
if (dp) n = n[-1..0] // invert if after decimal point
|
||||
var i = n.count - step
|
||||
while (i >= 1) {
|
||||
n = n[0...i] + sep + n[i..-1]
|
||||
i = i - step
|
||||
}
|
||||
if (dp) n = n[-1..0] // invert back
|
||||
return lz + n
|
||||
}
|
||||
|
||||
var t = s.toList
|
||||
var isExponent = Fn.new { |c| "eEdDpP^∙x↑*⁰¹²³⁴⁵⁶⁷⁸⁹".contains(c) }
|
||||
var acc = (start == 0) ? "" : t.toList[0...start].join()
|
||||
var n = ""
|
||||
var dp = false
|
||||
for (j in start...t.count) {
|
||||
var c = t[j].codePoints[0]
|
||||
if (c >= 48 && c <= 57) {
|
||||
n = n + t[j]
|
||||
if (j == t.count-1) {
|
||||
if (acc != "" && isExponent.call(acc[-1])) {
|
||||
acc = s
|
||||
} else {
|
||||
acc = acc + addSeps.call(n, dp)
|
||||
}
|
||||
}
|
||||
} else if (n != "") {
|
||||
if (acc != "" && isExponent.call(acc[-1])) {
|
||||
acc = s
|
||||
break
|
||||
} else if (t[j] != ".") {
|
||||
acc = acc + addSeps.call(n, dp) + t[j..-1].join()
|
||||
break
|
||||
} else {
|
||||
acc = acc + addSeps.call(n, dp) + t[j]
|
||||
dp = true
|
||||
n = ""
|
||||
}
|
||||
} else {
|
||||
acc = acc + t[j]
|
||||
}
|
||||
}
|
||||
|
||||
System.print(s)
|
||||
System.print(acc)
|
||||
System.print()
|
||||
}
|
||||
|
||||
// special version of the above which uses defaults for start, step and sep.
|
||||
var commatize2 = Fn.new { |s| commatize.call(s, 0, 3, ",") }
|
||||
|
||||
commatize.call("123456789.123456789", 0, 2, "*")
|
||||
commatize.call(".123456789", 0, 3, "-")
|
||||
commatize.call("57256.1D-4", 0, 4, "__")
|
||||
commatize.call("pi=3.14159265358979323846264338327950288419716939937510582097494459231", 0, 5, " ")
|
||||
commatize.call("The author has two Z$100000000000000 Zimbabwe notes (100 trillion).", 0, 3, ".")
|
||||
|
||||
var defaults = [
|
||||
"\"-in Aus$+1411.8millions\"",
|
||||
"===US$0017440 millions=== (in 2000 dollars)",
|
||||
"123.e8000 is pretty big.",
|
||||
"The land area of the earth is 57268900(29\% of the surface) square miles.",
|
||||
"Ain't no numbers in this here words, nohow, no way, Jose.",
|
||||
"James was never known as 0000000007",
|
||||
"Arthur Eddington wrote: I believe there are 15747724136275002577605653961181555468044717914527116709366231425076185631031296 protons in the universe.",
|
||||
" $-140000±100 millions.",
|
||||
"6/9/1946 was a good year for some."
|
||||
]
|
||||
|
||||
defaults.each { |d| commatize2.call(d) }
|
||||
Loading…
Add table
Add a link
Reference in a new issue