Autogram checker: Difference between revisions
m
→{{header|Raku}}: Declutter sligthly. Better names. Filter out full stop (oops). Add a link to module and install command
Thundergnat (talk | contribs) m (typo) |
Thundergnat (talk | contribs) m (→{{header|Raku}}: Declutter sligthly. Better names. Filter out full stop (oops). Add a link to module and install command) |
||
Line 59:
<br>
=={{header|Raku}}==
Slightly fragile, especially for non-letter
Using [https://raku.land/github:jkramer/Text::Wrap Text::Wrap] from the ecosystem. Install command: <code>zef install -v git://github.com/jkramer/p6-Text-Wrap.git</code>.
<lang perl6>my %nums = :0zero, :1one, :2two, :3three, :4four, :5five, :6six, :7seven, :8eight, :9nine, :10ten, :11eleven,
Line 65 ⟶ 67:
:20twenty, :30thirty, :40forty, :50fifty, :60sixty, :70seventy, :80eighty, :90ninety, :100hundred, :1single;
sub whitespace { $^a.subst(:g, /\s|'.'/, '') }
sub
my @tests =
(&
(&
(&whitespace, "Only the fool would take trouble to verify that his sentence was composed of ten a's, three b's, four c's, four d's, forty-six e's, sixteen f's, four g's, thirteen h's, fifteen i's, two k's, nine l's, four m's, twenty-five n's, twenty-four o's, five p's, sixteen r's, forty-one s's, thirty-seven t's, ten u's, eight v's, eight w's, four x's, eleven y's, twenty-seven commas, twenty-three apostrophes, seven hyphens and, last but not least, a single !"),
(&
(&
(&
(&whitespace, "Fifteen e's, seven f's, four g's, six h's, eight i's, four n's, five o's, six r's, eighteen s's, eight t's, four u's, three v's, two w's, three x's."),
(&
;
use Text::Wrap;
say '=' x 100;
for @tests -> (&filter, $text) {
Line 97 ⟶ 101:
# Build a hash of claimed characters.
my %claim = flat $str.lc.match(:g, /\d+ <:ws> ['comma'|'apostrophe'|'hyphen'|.]/)».split(' ')»[1,0]».pairup;
for <comma , hyphen - apostrophe '> #`['] -> $a, $b { %claim{$b} = %claim{$a}:delete if %claim{$a} }
say "\nClaimed character counts:\n" ~ wrap-text :100width, %claim.sort( ~*.key ).map( { sprintf "
# And of the actual character counts.
my %count = &filter($text).lc.comb.Bag.hash;
say "\nActual:\n" ~ wrap-text :100width, %count.sort( ~*.key ).map( { sprintf "
# And compare them
say "\nAutogram? " ~
quietly (so
say '=' x 100;
}</lang>
{{out}}
<pre style="height:50ex;overflow:scroll;">
This sentence employs two a's, two c's, two d's, twenty-eight e's, five f's, three g's, eight h's,
eleven i's, three l's, two m's, thirteen n's, nine o's, two p's, five r's, twenty-five s's,
twenty-three t's, six v's, ten w's, two x's, five y's, and one z.
Filtering out
Claimed character counts:
Actual:
Autogram? True
Line 131 ⟶ 136:
three t's, six v's, ten w's, two x's, five y's, and one z.
Filtering out
Claimed character counts:
Actual:
y(5) z(1)
Autogram? True
Line 152 ⟶ 157:
Claimed character counts:
Actual:
Autogram? True
Line 167 ⟶ 170:
eighteen ts, two us, seven vs, eight ws, two xs, three ys, & one z.
Filtering out
Claimed character counts:
Actual:
Autogram? True
Line 183 ⟶ 186:
twenty-nine s's, nineteen t's, six u's, seven v's, four w's, four x's, five y's, and one z.
Filtering out
Claimed character counts:
Actual:
Autogram? True
Line 198 ⟶ 201:
s's, twelve t's, three u's, four v's, six w's, four x's, two y's.
Filtering out
Claimed character counts:
▲:x(4), :y(2)
Actual:
▲:x(4), :y(2)
Autogram? True
Line 216 ⟶ 217:
Claimed character counts:
Actual:
Autogram? False
Line 227:
eight t's, three u's, three v's, two w's, four z's.
Filtering out
Claimed character counts:
Actual:
▲:z(1)
Autogram? False
|