Names to numbers: Difference between revisions

m
m (→‎{{header|Quackery}}: small tweak)
m (→‎{{header|Wren}}: Minor tidy)
 
(7 intermediate revisions by 5 users not shown)
Line 10:
{{trans|Nim}}
 
<langsyntaxhighlight lang="11l">V Names = [‘one’ = Int64(1),
‘two’ = 2,
‘three’ = 3,
Line 93:
 
L(name) names
print(‘#20’.format(nameToNum(name))‘ = ’name)</langsyntaxhighlight>
 
{{out}}
Line 116:
=={{header|Common Lisp}}==
A counterpart to (format t "~R" ...).
<langsyntaxhighlight Lisplang="lisp">(defpackage number-names
(:use cl))
 
Line 310:
(format t "~a => ~a => ~a~%" number word (parse word))))
test-numbers))
(values))</langsyntaxhighlight>
Running the test procedure:
<langsyntaxhighlight lang="none">CL-USER> (number-names::test)
number => (format t "~R" number) => (parse (format t "~R" number))
0 => zero => 0
Line 337:
-2 => negative two => -2
0 => zero => 0
; No value</langsyntaxhighlight>
 
=={{header|D}}==
This uses the D module from the Number names task.
{{trans|Python}}
<langsyntaxhighlight lang="d">import std.stdio, std.array, std.string, std.algorithm, std.bigint,
std.range, number_names;
 
Line 408:
auto num = txt.bigIntFromWords;
writefln("%12d <%s> %s", n, (n == num) ? "==" : "??", txt);
}</langsyntaxhighlight>
{{out}}
<pre>This shows <==> for a successful round trip, <??> otherwise:
Line 440:
{{libheader| System.Math}}
{{Trans|Kotlin}}
<syntaxhighlight lang="delphi">
<lang Delphi>
program Names_to_numbers;
 
Line 586:
Names.free;
Readln;
end.</langsyntaxhighlight>
{{out}}
<pre> 0 = none
Line 605:
=={{header|Factor}}==
This solution parses number names in the same format that Factor's existing <code>number>text</code> word outputs. Meaning that for numbers under 10^66, <code>number>text</code> and <code>text>number</code> ought to be inverses of each other.
<langsyntaxhighlight lang="factor">USING: arrays formatting grouping kernel math math.functions
math.parser multiline peg peg.ebnf sequences sequences.deep ;
 
Line 737:
[ dup text>number "%s => %u\n" printf ] each ;
 
names-to-numbers-demo</langsyntaxhighlight>
{{out}}
<pre>
Line 766:
=={{header|Go}}==
{{trans|Kotlin}}
<langsyntaxhighlight lang="go">package main
 
import (
Line 908:
}
}
}</langsyntaxhighlight>
 
{{out}}
Line 931:
=={{header|Haskell}}==
{{trans|Common Lisp}}
<langsyntaxhighlight Haskelllang="haskell">import Data.Char (toLower)
 
type Symbol = (String, Integer)
Line 1,052:
("zero":[]) -> 0
("negative":wx') -> negate $ parse illions wx'
wx' -> parse illions wx'</langsyntaxhighlight>
 
=={{header|J}}==
Define the verb usinv to convert number names to numbers.
File number_names.ijs contains the code of [[Number_names#J|number names project]].
<syntaxhighlight lang="j">
<lang J>
NB. standard profile defines tolower and delete extra blanks.
load'number_names.ijs'
 
NB. replace J's stdlib 'cut' with a variant which supports multi-character delimiters
cut =: #@:[ }.&.> [ (E. <;.1 ]) ,
 
Line 1,074 ⟶ 1,075:
M +/ .*+/"1 ,"2 (([: (* 100 ^ 2 ~: #) (#EN100)|EN100&i.)&>)D
)
</syntaxhighlight>
</lang>
<pre>
(-: [&.(us :.usinv))0
Line 1,089 ⟶ 1,090:
'''Works with gojq, the Go implementation of jq'''
 
<langsyntaxhighlight lang="jq">def check(cond; msg):
if cond then . else msg | error end;
 
Line 1,190 ⟶ 1,191:
 
tests[]
| "\(nameToNum|lpad(17)) = \(.)"</langsyntaxhighlight>
{{out}}
Exactly as for [[#Wren|Wren]].
 
=={{header|Julia}}==
<langsyntaxhighlight lang="julia">const stext = ["one", "two", "three", "four", "five",
"six", "seven", "eight", "nine"]
const teentext = ["eleven", "twelve", "thirteen", "fourteen",
Line 1,307 ⟶ 1,308:
println(txt, " => ", texttointeger(txt))
end
</langsyntaxhighlight>{{out}}
<pre>
One Hundred and One Dalmatians => 101 Dalmatians
Line 1,333 ⟶ 1,334:
 
=={{header|Kotlin}}==
<langsyntaxhighlight lang="scala">// version 1.1.2
 
val names = mapOf<String, Long>(
Line 1,440 ⟶ 1,441:
)
for (name in names) println("${"%20d".format(nameToNum(name))} = $name")
}</langsyntaxhighlight>
 
{{out}}
Line 1,463 ⟶ 1,464:
=={{header|Nim}}==
{{trans|Kotlin}}
<langsyntaxhighlight Nimlang="nim">import re, sequtils, strformat, strutils, tables
 
const Names = {"one": 1u64,
Line 1,571 ⟶ 1,572:
 
for name in names:
echo ($nametoNum(name)).align(20), " = ", name</langsyntaxhighlight>
 
{{out}}
Line 1,591 ⟶ 1,592:
 
=={{header|Perl}}==
<langsyntaxhighlight lang="perl">use strict;
use warnings;
use feature 'say';
use utf8;
binmode STDOUT, ':utf8';
 
my $phrases_with_numbers = <<'END';
Line 1,705 ⟶ 1,708:
 
say $_ . ' --> ' . numify($_) for grep { $_ } split "\n", $phrases_with_numbers;
say $_ . ' --> ' . comma numify($_) for grep { $_ } split "\n", $pure_numbers;</langsyntaxhighlight>
<pre>One Hundred and One Dalmatians --> 101 dalmatians
Two Thousand and One: A Space Odyssey --> 2001 : a space odyssey
Line 1,732 ⟶ 1,735:
=={{header|Phix}}==
Uses [[Number_names#Phix|Number_names]] as an executable library.
<!--<syntaxhighlight lang="phix">(phixonline)-->
<lang Phix>--
<span style="color: #000080;font-style:italic;">--
-- demo\rosetta\Names_to_numbers.exw
-- demo\rosetta\Names_to_numbers.exw
--
-- ---------------------------------
include demo\rosetta\Number_names.exw
--</span>
 
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
constant {tokens,tokvals} = columnize({{"zero",0},{"one",1},{"two",2},{"three",3},{"four",4},{"five",5},{"six",6},
<span style="color: #008080;">include</span> <span style="color: #000000;">demo</span><span style="color: #0000FF;">\</span><span style="color: #000000;">rosetta</span><span style="color: #0000FF;">\</span><span style="color: #000000;">Number_names</span><span style="color: #0000FF;">.</span><span style="color: #000000;">exw</span>
{"seven",7},{"eight",8},{"nine",9},{"ten",10},
{"eleven",11},{"twelve",12},{"thirteen",13},{"fourteen",14},{"fifteen",15},
<span style="color: #008080;">constant</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">tokens</span><span style="color: #0000FF;">,</span><span style="color: #000000;">tokvals</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">columnize</span><span style="color: #0000FF;">({{</span><span style="color: #008000;">"zero"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"one"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"two"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"three"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"four"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"five"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">5</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"six"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">},</span>
{"sixteen",16},{"seventeen",17},{"eighteen",18},{"nineteen",19},
<span style="color: #0000FF;">{</span><span style="color: #008000;">"seven"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">7</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"eight"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">8</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"nine"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">9</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"ten"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">10</span><span style="color: #0000FF;">},</span>
{"twenty",20},{"thirty",30},{"forty",40},{"fifty",50},{"sixty",60},
<span style="color: #0000FF;">{</span><span style="color: #008000;">"eleven"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">11</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"twelve"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">12</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"thirteen"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">13</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"fourteen"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">14</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"fifteen"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">15</span><span style="color: #0000FF;">},</span>
{"seventy",70},{"eighty",80},{"ninety",90},{"hundred",100},{"thousand",1e3},
<span style="color: #0000FF;">{</span><span style="color: #008000;">"sixteen"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">16</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"seventeen"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">17</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"eighteen"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">18</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"nineteen"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">19</span><span style="color: #0000FF;">},</span>
{"million",1e6},{"billion",1e9},{"trillion",1e12}})
<span style="color: #0000FF;">{</span><span style="color: #008000;">"twenty"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">20</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"thirty"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">30</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"forty"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">40</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"fifty"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">50</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"sixty"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">60</span><span style="color: #0000FF;">},</span>
function parse(string s)
<span style="color: #0000FF;">{</span><span style="color: #008000;">"seventy"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">70</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"eighty"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">80</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"ninety"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">90</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"hundred"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">100</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"thousand"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1e3</span><span style="color: #0000FF;">},</span>
sequence words
<span style="color: #0000FF;">{</span><span style="color: #008000;">"million"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1e6</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"billion"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1e9</span><span style="color: #0000FF;">},{</span><span style="color: #008000;">"trillion"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1e12</span><span style="color: #0000FF;">}})</span>
integer negmul = 1, hund = 0
atom total = 0, k
<span style="color: #008080;">function</span> <span style="color: #000000;">parse</span><span style="color: #0000FF;">(</span><span style="color: #004080;">string</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">)</span>
s = substitute(s,",","")
<span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">substitute</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">,</span><span style="color: #008000;">","</span><span style="color: #0000FF;">,</span><span style="color: #008000;">""</span><span style="color: #0000FF;">)</span>
s = substitute(s," and "," ")
<span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">substitute</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" and "</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" "</span><span style="color: #0000FF;">)</span>
s = substitute(s,"-"," ")
<span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">substitute</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"-"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" "</span><span style="color: #0000FF;">)</span>
words = split(s)
<span style="color: #004080;">sequence</span> <span style="color: #000000;">words</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">split</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">)</span>
if length(words)=0 then return "invalid" end if
<span style="color: #008080;">if</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">words</span><span style="color: #0000FF;">)=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span> <span style="color: #008080;">return</span> <span style="color: #008000;">"invalid"</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
if words[1]=="minus" then
<span style="color: #004080;">integer</span> <span style="color: #000000;">negmul</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">hund</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
negmul = -1
<span style="color: #008080;">if</span> <span style="color: #000000;">words</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]==</span><span style="color: #008000;">"minus"</span> <span style="color: #008080;">then</span>
words = words[2..$]
<span style="color: #000000;">negmul</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">-</span><span style="color: #000000;">1</span>
end if
<span style="color: #000000;">words</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">words</span><span style="color: #0000FF;">[</span><span style="color: #000000;">2</span><span style="color: #0000FF;">..$]</span>
for i=1 to length(words) do
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
k = find(words[i],tokens)
<span style="color: #004080;">atom</span> <span style="color: #000000;">total</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
if k=0 then
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">words</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
if words[i]!="point" then return "invalid" end if
<span style="color: #004080;">atom</span> <span style="color: #000000;">k</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">(</span><span style="color: #000000;">words</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">],</span><span style="color: #000000;">tokens</span><span style="color: #0000FF;">)</span>
total += hund
<span style="color: #008080;">if</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
hund = 0
<span style="color: #008080;">if</span> <span style="color: #000000;">words</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]!=</span><span style="color: #008000;">"point"</span> <span style="color: #008080;">then</span> <span style="color: #008080;">return</span> <span style="color: #008000;">"invalid"</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
integer tens = 10
<span style="color: #000000;">total</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">hund</span>
for j=i+1 to length(words) do
<span style="color: #000000;">hund</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
k = find(words[j],tokens)
<span style="color: #004080;">integer</span> <span style="color: #000000;">tens</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">10</span>
if k=0 then return "invalid" end if
<span style="color: #008080;">for</span> <span style="color: #000000;">j</span><span style="color: #0000FF;">=</span><span style="color: #000000;">i</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">words</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
k = tokvals[k]
<span style="color: #000000;">k</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">(</span><span style="color: #000000;">words</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">],</span><span style="color: #000000;">tokens</span><span style="color: #0000FF;">)</span>
if k>9 then return "invalid" end if
<span style="color: #008080;">if</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span> <span style="color: #008080;">return</span> <span style="color: #008000;">"invalid"</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
total += k/tens
<span style="color: #000000;">k</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">tokvals</span><span style="color: #0000FF;">[</span><span style="color: #000000;">k</span><span style="color: #0000FF;">]</span>
tens *= 10
<span style="color: #008080;">if</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">></span><span style="color: #000000;">9</span> <span style="color: #008080;">then</span> <span style="color: #008080;">return</span> <span style="color: #008000;">"invalid"</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end for
<span style="color: #000000;">total</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">/</span><span style="color: #000000;">tens</span>
exit
<span style="color: #000000;">tens</span> <span style="color: #0000FF;">*=</span> <span style="color: #000000;">10</span>
end if
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
k = tokvals[k]
<span style="color: #008080;">exit</span>
if k<100 then
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
hund += k
<span style="color: #000000;">k</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">tokvals</span><span style="color: #0000FF;">[</span><span style="color: #000000;">k</span><span style="color: #0000FF;">]</span>
elsif k=100 then
<span style="color: #008080;">if</span> <span style="color: #000000;">k</span><span style="color: #0000FF;"><</span><span style="color: #000000;">100</span> <span style="color: #008080;">then</span>
hund *= k
<span style="color: #000000;">hund</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">k</span>
else
<span style="color: #008080;">elsif</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">=</span><span style="color: #000000;">100</span> <span style="color: #008080;">then</span>
total += hund*k
<span style="color: #000000;">hund</span> <span style="color: #0000FF;">*=</span> <span style="color: #000000;">k</span>
hund = 0
<span style="color: #008080;">else</span>
end if
<span style="color: #000000;">total</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">hund</span><span style="color: #0000FF;">*</span><span style="color: #000000;">k</span>
end for
<span style="color: #000000;">hund</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
return negmul*(total+hund)
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end function
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
 
<span style="color: #008080;">return</span> <span style="color: #000000;">negmul</span><span style="color: #0000FF;">*(</span><span style="color: #000000;">total</span><span style="color: #0000FF;">+</span><span style="color: #000000;">hund</span><span style="color: #0000FF;">)</span>
atom si
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
for i=1 to length(Samples) do
si = Samples[i]
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">samples</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
string s = spell(si)
<span style="color: #004080;">atom</span> <span style="color: #000000;">si</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">samples</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span>
-- if parse(s)=si then
<span style="color: #004080;">string</span> <span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">spell</span><span style="color: #0000FF;">(</span><span style="color: #000000;">si</span><span style="color: #0000FF;">)</span>
if abs(parse(s)-si)<1e-6 then
<span style="color: #008080;">if</span> <span style="color: #7060A8;">abs</span><span style="color: #0000FF;">(</span><span style="color: #000000;">parse</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">)-</span><span style="color: #000000;">si</span><span style="color: #0000FF;">)<</span><span style="color: #000000;">1e-6</span> <span style="color: #008080;">then</span>
s = "<==> "&s
<span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"&lt;==&gt; "</span><span style="color: #0000FF;">&</span><span style="color: #000000;">s</span>
else
<span style="color: #008080;">else</span>
s = "???? "&s
<span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"???? "</span><span style="color: #0000FF;">&</span><span style="color: #000000;">s</span>
end if
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
printf(1,"%18s %s\n",{smartp(si),s})
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%18s %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">smartp</span><span style="color: #0000FF;">(</span><span style="color: #000000;">si</span><span style="color: #0000FF;">),</span><span style="color: #000000;">s</span><span style="color: #0000FF;">})</span>
end for</lang>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #0000FF;">{}</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">wait_key</span><span style="color: #0000FF;">()</span>
<!--</syntaxhighlight>-->
{{Out}}
<pre style="font-size: 8px">
Line 1,844 ⟶ 1,851:
 
<small>Note: This example and [[Number_names#Python]] need to be kept in sync</small>
<langsyntaxhighlight lang="python">from spell_integer import spell_integer, SMALL, TENS, HUGE
 
def int_from_words(num):
Line 1,896 ⟶ 1,903:
num = int_from_words(txt)
print('%12i <%s> %s' % (n, '==' if n == num else '??', txt))
print('')</langsyntaxhighlight>
{{out}}
<pre>##
Line 1,936 ⟶ 1,943:
Finally, the compiled nest is executed with <code>do</code>.
 
<langsyntaxhighlight Quackerylang="quackery"> [ 1 + ] is one ( --> n )
[ 2 + ] is two ( --> n )
[ 3 + ] is three ( --> n )
[ 4 + ] is four ( --> n )
[ 5 + ] is five ( --> n )
[ 6 + ] is six ( --> n )
[ 7 + ] is seven ( --> n )
[ 8 + ] is eight ( --> n )
[ 9 + ] is nine ( --> n )
[ 10 + ] is ten ( --> n )
[ 11 + ] is eleven ( --> n )
[ 12 + ] is twelve ( --> n )
[ 13 + ] is thirteen ( --> n )
[ 14 + ] is fourteen ( --> n )
[ 15 + ] is fifteen ( --> n )
[ 16 + ] is sixteen ( --> n )
[ 17 + ] is seventeen ( --> n )
[ 18 + ] is eighteen ( --> n )
[ 19 + ] is nineteen ( --> n )
[ 20 + ] is twenty ( --> n )
[ 30 + ] is thirty ( --> n )
[ 40 + ] is forty ( --> n )
[ 50 + ] is fifty ( --> n )
[ 60 + ] is sixty ( --> n )
[ 70 + ] is seventy ( --> n )
[ 80 + ] is eighty ( --> n )
[ 90 + ] is ninety ( --> n )
 
[ 100 * ] is hundred ( n --> n )
[ 1000 * ] is thousand ( n --> n )
[ thousand thousand ] is million ( n --> n )
[ thousand million ] is billion ( n --> n )
 
[ 0 ] is , ( --> n )
 
[ this100 ,* ] is {{ is hundred ( n --> [n )
[ 1000 * ] is thousand ( n --> n )
[ thousand thousand ] is million ( n --> n )
[ thousand million ] is billion ( n --> n )
 
[ 0 0 ] is {{ ( --> n n )
[ over ' {{ = iff
[ + 0 ] is , ( n n --> n n )
nip done
[ + again ] is }} ( [n *n --> n )
 
[ $ "{{ " swap
witheach
[ dup char , = if
[ dip space join ]
join ]
$ " }}" join
Line 1,990 ⟶ 1,993:
else
[ nested join ] ]
do ] is name->number ( $ --> n )
 
$ "one billion, two hundred and thirty four million, five hundred and sixty seven thousand, eight hundred and ninety"
name->number echo</langsyntaxhighlight>
 
{{out}}
Line 2,003 ⟶ 2,006:
Extension of the [[Number_names#Racket | number to names]] code:
 
<langsyntaxhighlight lang="racket">
#lang racket
 
Line 2,068 ⟶ 2,071:
(printf "~s <-> ~a\n" n eng)
(printf "Fail: ~s -> ~a -> ~s\n" n eng n2)))
</syntaxhighlight>
</lang>
 
{{out}}
Line 2,087 ⟶ 2,090:
(formerly Perl 6)
{{trans|Perl}}
<syntaxhighlight lang="raku" perl6line>my $phrases-with-numbers = q:to/END/;
One Hundred and One Dalmatians
Two Thousand and One: A Space Odyssey
Line 2,178 ⟶ 2,181:
 
say $_ ~ ' --> ' ~ .&numify for $phrases-with-numbers.split("\n").grep: *.so;
say $_ ~ ' --> ' ~ .&numify.&comma for $pure-numbers.split("\n").grep: *.so;</langsyntaxhighlight>
{{out}}
<pre>One Hundred and One Dalmatians --> 101 dalmatians
Line 2,207 ⟶ 2,210:
This solution uses "Number names" from [[Number_names#Ruby | here]]
{{trans|Python}}
<langsyntaxhighlight lang="ruby">require 'number_names'
 
def int_from_words(num)
Line 2,237 ⟶ 2,240:
end
negmult * (total + small)
end</langsyntaxhighlight>
 
Examples:
<langsyntaxhighlight lang="ruby">for n in (-10000..10000).step(17)
raise unless n == int_from_words(wordify(n))
end
Line 2,263 ⟶ 2,266:
break if n==0
n /= -10
end</langsyntaxhighlight>
 
{{out}}
Line 2,298 ⟶ 2,301:
=={{header|Sidef}}==
{{trans|Perl}}
<langsyntaxhighlight lang="ruby">func names_to_number(str) {
 
static nums = Hash.new(
Line 2,368 ⟶ 2,371:
str.gsub!(/\b(\d{2}) (\d{2})\b/, {|a,b| (a.to_i * 100) + b.to_i});
str.gsub!(regex[10], {|a| a.split(' ').map{.to_i}.sum });
}</langsyntaxhighlight>
 
Usage:
<langsyntaxhighlight lang="ruby">ARGF.each { |line|
say "#{line.chomp.dump} --> #{names_to_number(line).dump}";
}</langsyntaxhighlight>
 
Sample:
Line 2,393 ⟶ 2,396:
=={{header|Tcl}}==
{{works with|Tcl|8.6}}
<langsyntaxhighlight lang="tcl">package require Tcl 8.6
proc name2num name {
set words [regexp -all -inline {[a-z]+} [string tolower $name]]
Line 2,444 ⟶ 2,447:
}
return [expr {$sign * [tcl::mathop::+ {*}$groups]}]
}</langsyntaxhighlight>
Demonstrating/testing (based on [[#Perl|Perl]] code's samples):
<langsyntaxhighlight lang="tcl">set samples {
"Seventy-two dollars"
"Seventy two dollars"
Line 2,487 ⟶ 2,490:
foreach s $samples {
puts "$s => [name2num $s]"
}</langsyntaxhighlight>
{{out}}
<pre>
Line 2,535 ⟶ 2,538:
{{libheader|Wren-fmt}}
Wren's built in Num type can only deal accurately with integers up to 16 digits long (plus or minus 2 ^ 53) so without resorting to BigInt (which would be overkill here) we can only deal with numbers up to nine quadrillion or so.
<langsyntaxhighlight ecmascriptlang="wren">import "./str" for Str
import "./pattern" for Pattern
import "./fmt" for Fmt
var names = {
"one": 1,
Line 2,634 ⟶ 2,637:
"minus nine quadrillion, one hundred thirty-seven"
]
for (name in tests) Fmt.print("$17d = $s", nameToNum.call(name), name)</langsyntaxhighlight>
 
{{out}}
Line 2,655 ⟶ 2,658:
 
=={{header|zkl}}==
<langsyntaxhighlight lang="zkl">var names=T("zero","one","two","three","four","five","six","seven","eight",
"nine","ten","eleven","twelve","thirteen","fourteen","fifteen",
"sixteen","seventeen","eighteen","nineteen","twenty",
Line 2,684 ⟶ 2,687:
}
minus*(total + hund)
}</langsyntaxhighlight>
<langsyntaxhighlight lang="zkl">foreach s in (T("eighty-five thousand and one ",
" one hundred and fifty-five thousand and nineteen",
"one thousand, nine hundred and eighty-four","Nineteen Eighty-Four",
Line 2,694 ⟶ 2,697:
"six million, seven hundred and sixty-six thousand and twenty-seven")){
println("\"%s\" is %,d".fmt(s,stringToNumber(s)));
}</langsyntaxhighlight>
{{out}}
<pre>
9,482

edits