English cardinal anagrams: Difference between revisions
Content added Content deleted
m (→{{header|Phix}}: sort less) |
(→{{header|Wren}}: 'Numbers to names' routines now built into 'Fmt' module.) |
||
Line 400: | Line 400: | ||
{{libheader|Wren-sort}} |
{{libheader|Wren-sort}} |
||
{{libheader|Wren-fmt}} |
{{libheader|Wren-fmt}} |
||
I've reused the code for determining the number names from the related task. |
|||
<syntaxhighlight lang="ecmascript">import "./sort" for Sort |
<syntaxhighlight lang="ecmascript">import "./sort" for Sort |
||
import "./fmt" for Fmt |
import "./fmt" for Fmt, Name |
||
var small = [ |
|||
"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", |
|||
"twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" |
|||
] |
|||
var tens = ["", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"] |
|||
var illions = ["", " thousand", " million", " billion"," trillion", " quadrillion", " quintillion"] |
|||
var say |
|||
say = Fn.new { |n| |
|||
var t = "" |
|||
if (n < 0) { |
|||
t = "negative " |
|||
n = -n |
|||
} |
|||
if (n < 20) { |
|||
t = t + small[n] |
|||
} else if (n < 100) { |
|||
t = t + tens[(n/10).floor] |
|||
var s = n % 10 |
|||
if (s > 0) t = t + "-" + small[s] |
|||
} else if (n < 1000) { |
|||
t = t + small[(n/100).floor] + " hundred" |
|||
var s = n % 100 |
|||
if (s > 0) t = t + " " + say.call(s) |
|||
} else { |
|||
var sx = "" |
|||
var i = 0 |
|||
while (n > 0) { |
|||
var p = n % 1000 |
|||
n = (n/1000).floor |
|||
if (p > 0) { |
|||
var ix = say.call(p) + illions[i] |
|||
if (sx != "") ix = ix + " " + sx |
|||
sx = ix |
|||
} |
|||
i = i + 1 |
|||
} |
|||
t = t + sx |
|||
} |
|||
return t |
|||
} |
|||
for (limit in [1000, 10000]) { |
for (limit in [1000, 10000]) { |
||
var ana = {} |
var ana = {} |
||
for (i in 0..limit) { |
for (i in 0..limit) { |
||
var key = Sort.quick( |
var key = Sort.quick(Name.fromNum(i).toList).join("") |
||
if (ana.containsKey(key)) { |
if (ana.containsKey(key)) { |
||
ana[key].add(i) |
ana[key].add(i) |