Four is the number of letters in the ...: Difference between revisions

m
(→‎{{header|Haskell}}: added Haskell solution)
m (→‎{{header|Wren}}: Minor tidy)
 
(4 intermediate revisions by 4 users not shown)
Line 14:
:*   '''twenty─three'''   is considered one word   (which is hyphenated).
:* &nbsp; no &nbsp; <big>''' ''and'' '''</big> &nbsp; words are to be used when spelling a (English) word for a number.
:* &nbsp; The Americanshort versionscale ofnumbering numberssystem will(i.e. be2,000,000,000 usedis heretwo inbillion) thiswill taskbe &nbsp;used (ashere. opposed[[wp:Long toand theshort British version).scales]]
 
'''2,000,000,000''' &nbsp; is two billion, &nbsp; ''not'' &nbsp; two milliard.
 
Line 52 ⟶ 53:
=={{header|C}}==
{{libheader|GLib}}
<langsyntaxhighlight lang="c">#include <ctype.h>
#include <locale.h>
#include <stdbool.h>
Line 254 ⟶ 255:
word_list_destroy(&result);
return 0;
}</langsyntaxhighlight>
 
{{out}}
Line 277 ⟶ 278:
 
=={{header|C++}}==
<langsyntaxhighlight lang="cpp">#include <cctype>
#include <cstdint>
#include <iomanip>
Line 433 ⟶ 434:
}
return 0;
}</langsyntaxhighlight>
 
{{out}}
Line 463 ⟶ 464:
[[Spelling_of_ordinal_numbers#Go|Spelling of ordinal numbers]] task
(omitted from this listing).
<langsyntaxhighlight Golang="go">package main
 
import (
Line 556 ⟶ 557:
// omitted from this listing
// ...
</syntaxhighlight>
</lang>
{{out}}
<pre>The lengths of the first 201 words are:
Line 577 ⟶ 578:
 
=={{header|Haskell}}==
 
Uses the solution [[Spelling_of_ordinal_numbers#Haskell]] and tying-the-knot technique to create the infinite sentence.
 
<syntaxhighlight lang="haskell">import Data.Char
<lang haskell>sentence = start ++ foldMap add (zip [2..] $ tail $ words sentence)
 
sentence = start ++ foldMap add (zip [2..] $ tail $ words sentence)
where
start = "Four is the number of letters in the first word of this sentence, "
Line 593 ⟶ 597:
in "The " ++ spellOrdinal n ++ " word is \"" ++ w ++ "\" which has " ++
spellInteger (alphaLength w) ++ " letters. The sentence length is " ++
show (length $ unwords a) ++ " chars."</langsyntaxhighlight>
 
<pre>λ> take 200 sentence
Line 607 ⟶ 611:
Take care with the requirements. As noted, numberToString(23) = twenty-three. Therefore numberToString(723423) = seven hundred twenty-three thousand four hundred twenty-three (note the two "-").
<br/>The discussion was helpful by providing the first 2202 words of the sentence.
<langsyntaxhighlight lang="java">
import java.util.HashMap;
import java.util.Map;
Line 821 ⟶ 825:
}
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 843 ⟶ 847:
 
=={{header|Julia}}==
The functions num2text and numtext2ordinal are from the "Spelling of ordinal numbers" and "Number names" tasks, updated for Julia 1.0 and to remove the "and" words.<langsyntaxhighlight lang="julia">using DataStructures # for deque
 
const seed = "Four is the number of letters in the first word of this sentence, "
Line 916 ⟶ 920:
println("$n words -> $itercount iterations, $totalletters letters total, ",
"last word \"$lastword\" with $(length(lastword)) letters.")
end</langsyntaxhighlight> {{output}} <pre>
It is interesting how identical lengths align with 20 columns.
1: 4 2 3 6 2 7 2 3 5 4 2 4 8 3 2 3 6 5 2 3
Line 939 ⟶ 943:
=={{header|Kotlin}}==
This pulls in (slightly adjusted) code from related tasks to convert numbers to text or ordinals.
<langsyntaxhighlight lang="scala">// version 1.1.4-3
 
val names = mapOf(
Line 1,114 ⟶ 1,118:
}
while (n <= 10_000_000)
}</langsyntaxhighlight>
 
{{out}}
Line 1,149 ⟶ 1,153:
 
=={{header|Mathematica}}/{{header|Wolfram Language}}==
<langsyntaxhighlight Mathematicalang="mathematica">(*==Number names==*)
 
(*Mathematica has a built-in function for getting the name of an integer. It's a semantically rich function (dealing with many languages and grammatical variants), and consequently it would slow down our algorithm significantly. So, I've used the built-in function to seed/memoize special-purpose functions. Furthermore, the problem is suited to using a representation of the sentence that is an array of strings rather than a single monolithic string, and so these integer name functions will return arrays of strings.*)
Line 1,234 ⟶ 1,238:
},
"\n\n"
]</langsyntaxhighlight>
 
{{out}}
Line 1,253 ⟶ 1,257:
 
=={{header|Nim}}==
<langsyntaxhighlight Nimlang="nim">import strutils, strformat, tables
 
####################################################################################################
Line 1,414 ⟶ 1,418:
for n in [1_000, 10_000, 100_000, 1_000_000, 10_000_000]:
echo ""
displayWord(n)</langsyntaxhighlight>
 
{{out}}
Line 1,455 ⟶ 1,459:
Uses <code>Lingua::EN::Numbers</code> module to generate number names. State variable in <tt>extend_to</tt> routine keeps track of last word tallied.
{{trans|Raku}}
<langsyntaxhighlight lang="perl">use feature 'state';
use Lingua::EN::Numbers qw(num2en num2en_ordinal);
 
Line 1,486 ⟶ 1,490:
ucfirst(num2en_ordinal($_)) . " word, '$sentence[$_-1]' has " . alpha($sentence[$_-1]) . " characters. \n" .
count($_) . "\n";
}</langsyntaxhighlight>
{{out}}
<pre>First 201 word lengths in the sequence:
Line 1,515 ⟶ 1,519:
=={{header|Phix}}==
Note that my version of [[Number_names]] includes "and" (and ","), that others do not, hence the kill_and()/grr below and the minor mismatch of sentence lengths.
<!--<syntaxhighlight lang="phix">(phixonline)-->
<lang Phix>include demo\rosetta\number_names.exw
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
 
<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> <span style="color: #000080;font-style:italic;">-- see note
-- as per Spelling_of_ordinal_numbers#Phix:
constant {irregs,ordinals} = columnize({{"one","first"},
-- as per Spelling_of_ordinal_numbers#Phix:</span>
{"two","second"},
<span style="color: #008080;">constant</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">irregs</span><span style="color: #0000FF;">,</span><span style="color: #000000;">ordinals</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;">"one"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"first"</span><span style="color: #0000FF;">},</span>
{"three","third"},
<span style="color: #0000FF;">{</span><span style="color: #008000;">"two"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"second"</span><span style="color: #0000FF;">},</span>
{"five","fifth"},
<span style="color: #0000FF;">{</span><span style="color: #008000;">"three"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"third"</span><span style="color: #0000FF;">},</span>
{"eight","eighth"},
<span style="color: #0000FF;">{</span><span style="color: #008000;">"five"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"fifth"</span><span style="color: #0000FF;">},</span>
{"nine","ninth"},
<span style="color: #0000FF;">{</span><span style="color: #008000;">"eight"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"eighth"</span><span style="color: #0000FF;">},</span>
{"twelve","twelfth"}})
<span style="color: #0000FF;">{</span><span style="color: #008000;">"nine"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"ninth"</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{</span><span style="color: #008000;">"twelve"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"twelfth"</span><span style="color: #0000FF;">}})</span>
function ordinal(string s)
integer i
<span style="color: #008080;">function</span> <span style="color: #000000;">ordinl</span><span style="color: #0000FF;">(</span><span style="color: #004080;">string</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">)</span>
for i=length(s) to 1 by -1 do
<span style="color: #004080;">integer</span> ch<span style="color: s[#000000;">i]</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">to</span> <span style="color: #000000;">1</span> <span style="color: #008080;">by</span> <span style="color: #0000FF;">-</span><span style="color: #000000;">1</span> <span style="color: #008080;">do</span>
if ch=' ' or ch='-' then exit end if
<span style="color: #004080;">integer</span> <span style="color: #000000;">ch</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span>
end for
<span style="color: #008080;">if</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #008000;">' '</span> <span style="color: #008080;">or</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;">=</span><span style="color: #008000;">'-'</span> <span style="color: #008080;">then</span> <span style="color: #008080;">exit</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
integer k = find(s[i+1..$],irregs)
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
if k then
<span style="color: #004080;">integer</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;">s</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: #0000FF;">..$],</span><span style="color: #000000;">irregs</span><span style="color: #0000FF;">)</span>
s = s[1..i]&ordinals[k]
<span style="color: #008080;">if</span> <span style="color: #000000;">k</span> <span style="color: #008080;">then</span>
elsif s[$]='y' then
<span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">..</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]&</span><span style="color: #000000;">ordinals</span><span style="color: #0000FF;">[</span><span style="color: #000000;">k</span><span style="color: #0000FF;">]</span>
s[$..$] = "ieth"
<span style="color: #008080;">elsif</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">[$]=</span><span style="color: #008000;">'y'</span> <span style="color: #008080;">then</span>
else
<span style="color: #000000;">s</span><span style="color: #0000FF;">[$..$]</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"ieth"</span>
s &= "th"
<span style="color: #008080;">else</span>
end if
<span style="color: #000000;">s</span> <span style="color: #0000FF;">&=</span> <span style="color: #008000;">"th"</span>
return s
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end function
<span style="color: #008080;">return</span> <span style="color: #000000;">s</span>
--/copy of Spelling_of_ordinal_numers#Phix
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
 
<span style="color: #000080;font-style:italic;">--/copy of Spelling_of_ordinal_numers#Phix</span>
function countLetters(string s)
integer res = 0
<span style="color: #008080;">function</span> <span style="color: #000000;">count_letters</span><span style="color: #0000FF;">(</span><span style="color: #004080;">string</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">)</span>
for i=1 to length(s) do
<span style="color: #004080;">integer</span> <span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
integer ch = s[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;">s</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
if (ch>='A' and ch<='Z')
<span style="color: #004080;">integer</span> <span style="color: #000000;">ch</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span>
or (ch>='a' and ch<='z') then
<span style="color: #008080;">if</span> <span style="color: #0000FF;">(</span><span style="color: #000000;">ch</span><span style="color: #0000FF;">>=</span><span style="color: #008000;">'A'</span> <span style="color: #008080;">and</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;"><=</span><span style="color: #008000;">'Z'</span><span style="color: #0000FF;">)</span>
res += 1
<span style="color: #008080;">or</span> <span style="color: #0000FF;">(</span><span style="color: #000000;">ch</span><span style="color: #0000FF;">>=</span><span style="color: #008000;">'a'</span> <span style="color: #008080;">and</span> <span style="color: #000000;">ch</span><span style="color: #0000FF;"><=</span><span style="color: #008000;">'z'</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span>
end if
<span style="color: #000000;">res</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span>
end for
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
return res
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
end function
<span style="color: #008080;">return</span> <span style="color: #000000;">res</span>
 
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
sequence words = split("Four is the number of letters in the first word of this sentence,")
integer fi = 1
<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: #008000;">"Four is the number of letters in the first word of this sentence,"</span><span style="color: #0000FF;">)</span>
 
<span style="color: #004080;">integer</span> <span style="color: #000000;">fi</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span>
function kill_and(sequence s)
--grr...
<span style="color: #008080;">function</span> <span style="color: #000000;">kill_and</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">)</span>
for i=length(s) to 1 by -1 do
<span style="color: #000080;font-style:italic;">--grr...</span>
if s[i] = "and" then
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">to</span> <span style="color: #000000;">1</span> <span style="color: #008080;">by</span> <span style="color: #0000FF;">-</span><span style="color: #000000;">1</span> <span style="color: #008080;">do</span>
s[i..i] = {}
<span style="color: #008080;">if</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"and"</span> <span style="color: #008080;">then</span>
end if
<span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">..</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{}</span>
end for
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
return s
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
end function
<span style="color: #008080;">return</span> <span style="color: #000000;">s</span>
 
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
function WordLen(integer w)
-- Returns the w'th word and its length (only counting letters).
<span style="color: #008080;">function</span> <span style="color: #000000;">word_len</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">w</span><span style="color: #0000FF;">)</span>
while length(words)<w do
<span style="color: #000080;font-style:italic;">-- Returns the w'th word and its length (only counting letters).</span>
fi += 1
<span style="color: #008080;">while</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;">w</span> <span style="color: #008080;">do</span>
integer n = countLetters(words[fi])
<span style="color: #000000;">fi</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span>
sequence ns = kill_and(split(spell(n)))
<span style="color: #004080;">integer</span> <span style="color: #000000;">n</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">count_letters</span><span style="color: #0000FF;">(</span><span style="color: #000000;">words</span><span style="color: #0000FF;">[</span><span style="color: #000000;">fi</span><span style="color: #0000FF;">])</span>
sequence os = kill_and(split(ordinal(spell(fi)) & ","))
<span style="color: #004080;">sequence</span> <span style="color: #000000;">ns</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">kill_and</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">split</span><span style="color: #0000FF;">(</span><span style="color: #000000;">spell</span><span style="color: #0000FF;">(</span><span style="color: #000000;">n</span><span style="color: #0000FF;">)))</span>
-- append eg {"two","in","the","second,"}
<span style="color: #004080;">sequence</span> <span style="color: #000000;">os</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">kill_and</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">split</span><span style="color: #0000FF;">(</span><span style="color: #000000;">ordinl</span><span style="color: #0000FF;">(</span><span style="color: #000000;">spell</span><span style="color: #0000FF;">(</span><span style="color: #000000;">fi</span><span style="color: #0000FF;">))</span> <span style="color: #0000FF;">&</span> <span style="color: #008000;">","</span><span style="color: #0000FF;">))</span>
words &= ns&{"in","the"}&os
<span style="color: #000080;font-style:italic;">-- append eg {"two","in","the","second,"}</span>
end while
<span style="color: #000000;">words</span> <span style="color: #0000FF;">&=</span> <span style="color: #000000;">ns</span><span style="color: #0000FF;">&{</span><span style="color: #008000;">"in"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"the"</span><span style="color: #0000FF;">}&</span><span style="color: #000000;">os</span>
string word = words[w]
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
return {word, countLetters(word)}
<span style="color: #004080;">string</span> <span style="color: #000000;">word</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">words</span><span style="color: #0000FF;">[</span><span style="color: #000000;">w</span><span style="color: #0000FF;">]</span>
end function
<span style="color: #008080;">return</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">word</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">count_letters</span><span style="color: #0000FF;">(</span><span style="color: #000000;">word</span><span style="color: #0000FF;">)}</span>
 
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
function TotalLength()
-- Returns the total number of characters (including blanks,
<span style="color: #008080;">function</span> <span style="color: #000000;">total_length</span><span style="color: #0000FF;">()</span>
-- commas, and punctuation) of the sentence so far constructed.
<span style="color: #000080;font-style:italic;">-- Returns the total number of characters (including blanks,
integer res = 0
-- commas, and punctuation) of the sentence so far constructed.</span>
for i=1 to length(words) do
<span style="color: #004080;">integer</span> <span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span>
res += length(words[i])+1
<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>
end for
<span style="color: #000000;">res</span> <span style="color: #0000FF;">+=</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;">i</span><span style="color: #0000FF;">])+</span><span style="color: #000000;">1</span>
return res
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
end function
<span style="color: #008080;">return</span> <span style="color: #000000;">res</span>
 
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
procedure main()
integer i,n
<span style="color: #008080;">procedure</span> <span style="color: #000000;">main</span><span style="color: #0000FF;">()</span>
string w
<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;">"The lengths of the first 201 words are:\n"</span><span style="color: #0000FF;">)</span>
<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: #000000;">201</span> <span style="color: #008080;">do</span>
for i=1 to 201 do
<span style="color: #008080;">if</span> <span style="color: #7060A8;">mod</span><span style="color: #0000FF;">(</span><span style="color: #000000;">i</span><span style="color: #0000FF;">,</span><span style="color: #000000;">25</span><span style="color: #0000FF;">)==</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span>
if mod(i,25)==1 then
<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;">"\n%3d: "</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">)</span>
printf(1,"\n%3d: ", i)
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end if
<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;">" %2d"</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">word_len</span><span style="color: #0000FF;">(</span><span style="color: #000000;">i</span><span style="color: #0000FF;">)[</span><span style="color: #000000;">2</span><span style="color: #0000FF;">])</span>
{?,n} = WordLen(i)
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
printf(1," %2d", n)
<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;">"\nLength of sentence so far:%d\n"</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">total_length</span><span style="color: #0000FF;">())</span>
end for
<span style="color: #008080;">for</span> <span style="color: #000000;">p</span><span style="color: #0000FF;">=</span><span style="color: #000000;">3</span> <span style="color: #008080;">to</span> <span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">platform</span><span style="color: #0000FF;">()=</span><span style="color: #004600;">JS</span><span style="color: #0000FF;">?</span><span style="color: #000000;">5</span><span style="color: #0000FF;">:</span><span style="color: #000000;">7</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
printf(1,"\nLength of sentence so far:%d\n", TotalLength())
<span style="color: #004080;">integer</span> <span style="color: #000000;">i</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">power</span><span style="color: #0000FF;">(</span><span style="color: #000000;">10</span><span style="color: #0000FF;">,</span><span style="color: #000000;">p</span><span style="color: #0000FF;">)</span>
for p=3 to 7 do
<span style="color: #0000FF;">{</span><span style="color: #004080;">string</span> <span style="color: #000000;">w</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">word_len</span><span style="color: #0000FF;">(</span><span style="color: #000000;">i</span><span style="color: #0000FF;">)</span>
i = power(10,p)
<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;">"Word %8d is \"%s\", with %d letters."</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">i</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">w</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">})</span>
{w, n} = WordLen(i)
<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;">" Length of sentence so far:%d\n"</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">total_length</span><span style="color: #0000FF;">())</span>
printf(1,"Word %8d is \"%s\", with %d letters.", {i, w, n})
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
printf(1," Length of sentence so far:%d\n", TotalLength())
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
end for
<span style="color: #000000;">main</span><span style="color: #0000FF;">()</span>
end procedure
<!--</syntaxhighlight>-->
main()</lang>
Note you will have to comment out main()..EOF in the number_names.exw file for pwa/p2js to accept it/not complain about multiple main() or #ilASM (which I may yet remove). Also as indicated 100K words is simply too much for your typical browser, let alone a million, so we limit the last part to 10K under pwa/p2js.
{{out}}
<pre>
Line 1,635 ⟶ 1,640:
 
=={{header|Python}}==
<syntaxhighlight lang="python">
<lang Python>
# Python implementation of Rosetta Code Task
# http://rosettacode.org/wiki/Four_is_the_number_of_letters_in_the_...
Line 1,820 ⟶ 1,825:
word_and_counts(1000000)
word_and_counts(10000000)
</syntaxhighlight>
</lang>
 
Output:
Line 1,852 ⟶ 1,857:
Uses the Lingua::EN::Numbers module to generate both cardinal and ordinal numbers. This module places commas in number words between 3-orders-of-magnitude clusters. E.G. <code>12345678.&ordinal</code> becomes: twelve million, three hundred forty-five thousand, six hundred seventy-eighth. Uses a custom 'no-commas' routine to filter them out for accurate character counts. Generates the 'sentence' lazily so only the words needed are ever calculated and reified.
 
<syntaxhighlight lang="raku" perl6line>use Lingua::EN::Numbers;
no-commas(True);
 
Line 1,868 ⟶ 1,873:
for 1e3, 1e4, 1e5, 1e6, 1e7 {
say "{.&ordinal.tc} word, '{@sentence[$_ - 1]}', has {@sentence[$_ - 1].&alpha} characters. ", .&count
}</langsyntaxhighlight>
{{out}}
<pre>First 201 word lengths in the sequence:
Line 1,893 ⟶ 1,898:
 
=={{header|REXX}}==
<langsyntaxhighlight lang="rexx">/*REXX pgm finds/shows the number of letters in the Nth word in a constructed sentence*/
@= 'Four is the number of letters in the first word of this sentence,' /*···*/
/* [↑] the start of a long sentence. */
Line 1,935 ⟶ 1,940:
 
if $\=='' & z>0 then say right(idx, w)'►'$ /*display if there are residual numbers*/
return</langsyntaxhighlight>
The &nbsp; '''$SPELL#.REX''' &nbsp; routine can be found here &nbsp; ───► &nbsp; [[$SPELL.REX|$SPELL#.REX]]. <br><br>
 
Line 1,967 ⟶ 1,972:
=={{header|Rust}}==
{{trans|C}}
<langsyntaxhighlight lang="rust">struct NumberNames {
cardinal: &'static str,
ordinal: &'static str,
Line 2,304 ⟶ 2,309:
n *= 10;
}
}</langsyntaxhighlight>
 
{{out}}
Line 2,329 ⟶ 2,334:
{{trans|Kotlin}}
{{libheader|Wren-fmt}}
<langsyntaxhighlight ecmascriptlang="wren">import "./fmt" for Fmt
 
var names = {
Line 2,509 ⟶ 2,514:
n = n * 10
if (n > 1e7) break
}</langsyntaxhighlight>
 
{{out}}
Line 2,545 ⟶ 2,550:
=={{header|zkl}}==
Uses the nth function from [[Spelling_of_ordinal_numbers#zkl]]
<langsyntaxhighlight lang="zkl"> // Built the sentence in little chucks but only save the last one
// Save the word counts
fcn fourIsThe(text,numWords){
Line 2,572 ⟶ 2,577:
return(lastWords.strip(),szs,total);
}
fcn lastWord(sentence){ sentence[sentence.rfind(" ")+1,*] }</langsyntaxhighlight>
<langsyntaxhighlight lang="zkl">var seed="Four is the number of letters in the first word of this sentence, ";
sentence,szs,total := fourIsThe(seed,201);
print(" 1:");
Line 2,580 ⟶ 2,585:
if(0 == n%25) print("\n%3d:".fmt(n+1));
}
println("\nLength of above sentence: ",total);</langsyntaxhighlight>
{{out}}
<pre>
Line 2,594 ⟶ 2,599:
Length of above sentence: 1203
</pre>
<langsyntaxhighlight lang="zkl">n:=1000; do(5){
sentence,x,total := fourIsThe(seed,n);
word:=lastWord(sentence);
Line 2,600 ⟶ 2,605:
.fmt(n,word,word.len(),total));
n*=10;
}</langsyntaxhighlight>
{{out}}
<pre>
9,476

edits