Another update from ingydotnet^djgoku
This commit is contained in:
parent
91df62d461
commit
948b86eafa
7604 changed files with 108452 additions and 22726 deletions
76
Task/Number-names/Batch-File/number-names.bat
Normal file
76
Task/Number-names/Batch-File/number-names.bat
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
::Number Names Task from Rosetta Code Wiki
|
||||
::Batch File Implementation
|
||||
|
||||
@echo off
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
if "%~1"=="iterate" goto num_name
|
||||
|
||||
::Define the words
|
||||
set "small=One Two Three Four Five Six Seven Eight Nine Ten"
|
||||
set "small=%small% Eleven Twelve Thirteen Fourteen Fifteen Sixteen Seventeen Eighteen Nineteen"
|
||||
set "decade=Twenty Thirty Forty Fifty Sixty Seventy Eighty Ninety"
|
||||
set "big=Thousand Million Billion"
|
||||
|
||||
::Seperating each word...
|
||||
set cnt=0
|
||||
for %%X in (%small%) do (set /a "cnt+=1"&set small!cnt!=%%X)
|
||||
set cnt=0
|
||||
for %%Y in (%decade%) do (set decade!cnt!=%%Y&set /a "cnt+=1")
|
||||
set cnt=0
|
||||
for %%Z in (%big%) do (set big!cnt!=%%Z&set /a "cnt+=1")
|
||||
|
||||
::The Main Thing
|
||||
for %%. in (42,27,1090,230000,1001100,-40309,0,123456789) do (
|
||||
set input=%%.
|
||||
if %%. lss 0 (set /a input*=-1)
|
||||
if !input! equ 0 (set TotalOut=Zero) else (
|
||||
call :num_word %%.
|
||||
)
|
||||
echo "!TotalOut!"
|
||||
)
|
||||
exit /b
|
||||
::/The Main Thing
|
||||
|
||||
::The Procedure
|
||||
:num_word
|
||||
set outP=
|
||||
set unit=0
|
||||
set num=!input!
|
||||
:num_loop
|
||||
set /a tmpLng1 = num %% 100
|
||||
set /a tmpLng2 = tmpLng1 %% 10
|
||||
set /a tmpNum1 = tmpLng1/10 - 2
|
||||
|
||||
if !tmpLng1! geq 1 if !tmpLng1! leq 19 (
|
||||
set "outP=!small%tmpLng1%! !outP!"
|
||||
)
|
||||
if !tmpLng1! geq 20 if !tmpLng1! leq 99 (
|
||||
if !tmpLng2! equ 0 (
|
||||
set "outP=!decade%tmpNum1%! !outP!"
|
||||
) else (
|
||||
set "outP=!decade%tmpNum1%!-!small%tmpLng2%! !outP!"
|
||||
)
|
||||
)
|
||||
|
||||
set /a tmpLng1 = (num %% 1000)/100
|
||||
if not !tmpLng1! equ 0 (
|
||||
set "outP=!small%tmpLng1%! Hundred !outP!"
|
||||
)
|
||||
|
||||
set /a num/=1000
|
||||
if !num! lss 1 goto :break_loop
|
||||
|
||||
set /a tmpLng1 = num %% 1000
|
||||
if not !tmpLng1! equ 0 (
|
||||
set "outP=!big%unit%! !outP!"
|
||||
)
|
||||
set /a unit+=1
|
||||
goto :num_loop
|
||||
|
||||
:break_loop
|
||||
set "TotalOut=!outP!"
|
||||
if %1 lss 0 set "TotalOut=Negative !outP!"
|
||||
|
||||
set TotalOut=%TotalOut:~0,-1%
|
||||
goto :EOF
|
||||
77
Task/Number-names/Erlang/number-names.erl
Normal file
77
Task/Number-names/Erlang/number-names.erl
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
-module(nr2eng).
|
||||
-import(lists, [foreach/2, seq/2, append/2]).
|
||||
-import(string, [strip/3, str/2]).
|
||||
-export([start/0]).
|
||||
|
||||
sym(1) -> "one";
|
||||
sym(2) -> "two";
|
||||
sym(3) -> "three";
|
||||
sym(4) -> "four";
|
||||
sym(5) -> "five";
|
||||
sym(6) -> "six";
|
||||
sym(7) -> "seven";
|
||||
sym(8) -> "eight";
|
||||
sym(9) -> "nine";
|
||||
sym(10) -> "ten";
|
||||
sym(11) -> "eleven";
|
||||
sym(12) -> "twelve";
|
||||
sym(13) -> "thirteen";
|
||||
sym(20) -> "twenty";
|
||||
sym(30) -> "thirty";
|
||||
sym(40) -> "forty";
|
||||
sym(50) -> "fifty";
|
||||
sym(100) -> "hundred";
|
||||
sym(1000) -> "thousand";
|
||||
sym(1000*1000) -> "million";
|
||||
sym(1000*1000*1000) -> "billion";
|
||||
sym(_) -> "".
|
||||
|
||||
next(1000) -> 100;
|
||||
next(100) -> 10;
|
||||
next(10) -> 1;
|
||||
next(X) -> X div 1000.
|
||||
|
||||
concat(PRE, "") ->
|
||||
PRE;
|
||||
concat(PRE, POST) ->
|
||||
PRE++" "++POST.
|
||||
concat("", _, POST) ->
|
||||
POST;
|
||||
concat(PRE, SYM, "") ->
|
||||
PRE++" "++SYM;
|
||||
concat(PRE, SYM, POST) ->
|
||||
PRE++" "++SYM++" "++POST.
|
||||
|
||||
nr2eng(0, _) ->
|
||||
"";
|
||||
nr2eng(NR, 1) ->
|
||||
sym(NR);
|
||||
nr2eng(NR, 10) when NR =< 20 ->
|
||||
case sym(NR) of
|
||||
"" -> strip(sym(NR-10), right, $t) ++ "teen";
|
||||
_ -> sym(NR)
|
||||
end;
|
||||
nr2eng(NR, 10) ->
|
||||
concat(
|
||||
case sym((NR div 10)*10) of
|
||||
"" -> strip(sym(NR div 10), right, $t) ++ "ty";
|
||||
_ -> sym((NR div 10)*10)
|
||||
end,
|
||||
nr2eng(NR rem 10, 1));
|
||||
nr2eng(NR, B) ->
|
||||
PRE = nr2eng(NR div B, next(B)),
|
||||
POST = nr2eng(NR rem B, next(B)),
|
||||
AND = str(POST, "and"),
|
||||
COMMA = if
|
||||
POST == "" -> "";
|
||||
AND == 0 -> " and";
|
||||
B >= 1000 -> ",";
|
||||
true -> ""
|
||||
end,
|
||||
concat(PRE, sym(B)++COMMA, POST).
|
||||
|
||||
start() ->
|
||||
lists:foreach(
|
||||
fun (X) -> io:fwrite("~p ~p ~n", [X, nr2eng(X, 1000000000)])
|
||||
end,
|
||||
append(seq(1, 2000), [123123, 43234234])).
|
||||
78
Task/Number-names/Julia/number-names-1.julia
Normal file
78
Task/Number-names/Julia/number-names-1.julia
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
const stext = ["one", "two", "three", "four", "five",
|
||||
"six", "seven", "eight", "nine"]
|
||||
const teentext = ["eleven", "twelve", "thirteen", "fourteen",
|
||||
"fifteen", "sixteen", "seventeen",
|
||||
"eighteen", "nineteen"]
|
||||
const tenstext = ["ten", "twenty", "thirty", "forty", "fifty",
|
||||
"sixty", "seventy", "eighty", "ninety"]
|
||||
const ordstext = ["million", "billion", "trillion",
|
||||
"quadrillion", "quintillion", "sextillion",
|
||||
"septillion", "octillion", "nonillion",
|
||||
"decillion", "undecillion", "duodecillion",
|
||||
"tredecillion", "quattuordecillion", "quindecillion",
|
||||
"sexdecillion", "septendecillion", "octodecillion",
|
||||
"novemdecillion", "vigintillion"]
|
||||
|
||||
function normalize_digits!{T<:Integer}(a::Array{T,1})
|
||||
while 0 < length(a) && a[end] == 0
|
||||
pop!(a)
|
||||
end
|
||||
return length(a)
|
||||
end
|
||||
|
||||
function digits2text!{T<:Integer}(d::Array{T,1}, use_short_scale=true)
|
||||
ndig = normalize_digits!(d)
|
||||
0 < ndig || return ""
|
||||
if ndig < 7
|
||||
s = ""
|
||||
if 3 < ndig
|
||||
t = digits2text!(d[1:3])
|
||||
s = digits2text!(d[4:end])*" thousand"
|
||||
0 < length(t) || return s
|
||||
if contains(t, "and")
|
||||
return s*" "*t
|
||||
else
|
||||
return s*" and "*t
|
||||
end
|
||||
end
|
||||
if ndig == 3
|
||||
s *= stext[pop!(d)]*" hundred"
|
||||
ndig = normalize_digits!(d)
|
||||
0 < ndig || return s
|
||||
s *= " and "
|
||||
end
|
||||
1 < ndig || return s*stext[pop!(d)]
|
||||
j, i = d
|
||||
j != 0 || return s*tenstext[i]
|
||||
i != 1 || return s*teentext[j]
|
||||
return s*tenstext[i]*"-"*stext[j]
|
||||
end
|
||||
s = digits2text!(d[1:6])
|
||||
d = d[7:end]
|
||||
dgrp = use_short_scale ? 3 : 6
|
||||
ord = 0
|
||||
while(dgrp < length(d))
|
||||
ord += 1
|
||||
t = digits2text!(d[1:dgrp])
|
||||
d = d[(dgrp+1):end]
|
||||
0 < length(t) || continue
|
||||
t = t*" "*ordstext[ord]
|
||||
if length(s) == 0
|
||||
s = t
|
||||
else
|
||||
s = t*" "*s
|
||||
end
|
||||
end
|
||||
ord += 1
|
||||
t = digits2text!(d)*" "*ordstext[ord]
|
||||
0 < length(s) || return t
|
||||
return t*" "*s
|
||||
end
|
||||
|
||||
function num2text{T<:Integer}(n::T, use_short_scale=true)
|
||||
-1 < n || return "minus "*num2text(-n, use_short_scale)
|
||||
0 < n || return "zero"
|
||||
toobig = use_short_scale ? big(10)^66 : big(10)^126
|
||||
n < toobig || return "too big to say"
|
||||
return digits2text!(digits(n, 10), use_short_scale)
|
||||
end
|
||||
53
Task/Number-names/Julia/number-names-2.julia
Normal file
53
Task/Number-names/Julia/number-names-2.julia
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
function wrap{T<:String,U<:Integer}(str::T, width::U=70, indent::U=4)
|
||||
sdent = " "^(indent-1)
|
||||
s = sdent
|
||||
llen = indent
|
||||
for t in split(str, " ")
|
||||
s *= " "*t
|
||||
llen += length(t) + 1
|
||||
width < llen || continue
|
||||
s *= "\n"*sdent
|
||||
llen = indent
|
||||
end
|
||||
return rstrip(s)
|
||||
end
|
||||
|
||||
println("Testing num2text")
|
||||
println()
|
||||
println("Some easy ones to start with")
|
||||
println()
|
||||
tests = [-1:21, 100, 101, 10000, 10001, 1000000, 1010101]
|
||||
for i in tests
|
||||
println(@sprintf("%8d is %s", i, num2text(i)))
|
||||
end
|
||||
|
||||
println()
|
||||
println("Some larger numbers")
|
||||
println()
|
||||
println("The largest signed literal integer (short-scale)")
|
||||
i = typemax(1)
|
||||
println(" ", i, " is")
|
||||
println(wrap(num2text(i)))
|
||||
println()
|
||||
println("The largest signed literal integer (long-scale)")
|
||||
println(" ", i, " is")
|
||||
println(wrap(num2text(i, false)))
|
||||
println()
|
||||
println("The largest unsigned integer (short-scale)")
|
||||
i = typemax(Uint128)
|
||||
println(" ", i, " is")
|
||||
println(wrap(num2text(i)))
|
||||
println()
|
||||
println("50! (short-scale)")
|
||||
i = factorial(big(50))
|
||||
println(" ", i, " is")
|
||||
println(wrap(num2text(i)))
|
||||
println()
|
||||
println("51! (short-scale)")
|
||||
i = factorial(big(51))
|
||||
println(" ", i, " is")
|
||||
println(wrap(num2text(i)))
|
||||
println()
|
||||
println("51! (long-scale)")
|
||||
println(" ", i, " is")
|
||||
println(wrap(num2text(i, false)))
|
||||
|
|
@ -13,7 +13,7 @@ sub int-name ($num) {
|
|||
if $num eq '0' { return @I[0] }
|
||||
my $m = 0;
|
||||
return join ', ', reverse gather for $num.flip.comb(/\d ** 1..3/) {
|
||||
my ($i,$x,$c) = .comb;
|
||||
my ($i,$x,$c) = .comb».Int;
|
||||
if $i or $x or $c {
|
||||
take join ' ', gather {
|
||||
if $c { take @C[$c] }
|
||||
|
|
|
|||
26
Task/Number-names/Scala/number-names-2.scala
Normal file
26
Task/Number-names/Scala/number-names-2.scala
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
import scala.collection.immutable.TreeMap
|
||||
|
||||
val NUMBERS = TreeMap(
|
||||
1 -> "one", 2 -> "two", 3 -> "three", 4 -> "four", 5 -> "five", 6 -> "six", 7 -> "seven", 8 -> "eight", 9 -> "nine",
|
||||
10 -> "ten", 11 -> "eleven", 12 -> "twelve", 13 -> "thirteen", 14 -> "fourteen", 15 -> "fifteen", 16 -> "sixteen",
|
||||
17 -> "seventeen", 18 -> "eighteen", 19 -> "nineteen", 20 -> "twenty", 30 -> "thirty", 40 -> "forty",
|
||||
50 -> "fifty", 60 -> "sixty", 70 -> "seventy", 80 -> "eighty", 90 -> "ninety"
|
||||
)
|
||||
|
||||
val HUNDREDS = TreeMap(
|
||||
100l -> "hundred", 1000l -> "thousand", 1000000l -> "million", 1000000000l -> "billion", 1000000000000l -> "trillion"
|
||||
)
|
||||
|
||||
def numberToString(number: Long) : String = {
|
||||
if (HUNDREDS.to(number).nonEmpty) {
|
||||
val (h, hundreds) = HUNDREDS.to(number).last
|
||||
val remainder = number % h
|
||||
numberToString(number / h) + hundreds + {if (remainder > 0) {if (remainder < 100) " and " else ", "} + numberToString(remainder) else " "}
|
||||
} else if (NUMBERS.to(number.toInt).nonEmpty) {
|
||||
val (n, word) = NUMBERS.to(number.toInt).last
|
||||
val remainder = number - n
|
||||
word + {if (remainder > 0 && remainder < 10) "-" else " "} + numberToString(remainder)
|
||||
} else {
|
||||
""
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue