Word wheel: Difference between revisions

2,591 bytes added ,  3 years ago
→‎{{header|Raku}}: Add a Raku example
(Add Factor)
(→‎{{header|Raku}}: Add a Raku example)
Line 205:
["ken", "keg", "eke", "elk", "wok", "keno", "knee", "keen", "knew", "kong", "know", "woke", "keel", "leek", "week", "kneel", "knowledge"]
</pre>
 
=={{header|Raku}}==
{{works with|Rakudo|2020.05}}
Everything is adjustable through command line parameters.
 
Defaults to task specified wheel, unixdict.txt, minimum 3 letters.
 
<lang perl6>my %*SUB-MAIN-OPTS = :named-anywhere;
 
unit sub MAIN ($wheel = 'ndeokgelw', :$dict = './unixdict.txt', :$min = 3);
 
my $must-have = $wheel.comb[4].lc;
 
my $has = $wheel.comb».lc.Bag;
 
my %words;
$dict.IO.slurp.words».lc.map: {
next if not .contains($must-have) or .chars < $min;
%words{.chars}.push: $_ if .comb.Bag ⊆ $has;
};
 
say "Using $dict, minimum $min letters.";
printf "%d letters: %s\n", .key, .value.sort.join(', ') for %words.sort;
</lang>
 
{{out}}
;Using defaults
 
Command line: <lang>raku word-wheel.raku</lang>
<pre>Using ./unixdict.txt, minimum 3 letters.
3 letters: eke, elk, keg, ken, wok
4 letters: keel, keen, keno, knee, knew, know, kong, leek, week, woke
5 letters: kneel
9 letters: knowledge</pre>
 
;Exercise adjustable parameters
Using the much larger dictionary '''words.txt''' file from '''https://github.com/dwyl/english-words'''
and the wheel: "iuymslleb"
 
Command line: <lang>raku word-wheel.raku iuymslleb --dict=./words.txt --min=4</lang>
<pre>Using ./words.txt, minimum 4 letters.
4 letters: bels, beys, bise, blus, bmus, bsem, bsie, bslm, bsme, bums, busy, buys, byes, eisb, elis, ells, elms, elsi, elsy, elys, emus, emys, ills, ilse, imsl, isle, islm, islu, ismy, leis, leys, libs, lies, lise, lues, luis, lums, lyes, lyse, mels, mibs, mils, mise, misy, msie, musb, muse, sbli, sell, semi, siey, sile, sill, sime, sium, slbm, sleb, sley, slim, slub, slue, slum, suey, suiy, sull, sumi, sumy, syli, syll, uims
5 letters: belis, bells, belus, bemis, biles, bills, bisme, blues, bulls, bulse, busey, buyse, eblis, ellis, embus, emuls, eulis, ileus, illus, ilyse, isbel, iseum, lesiy, lesli, lesly, lieus, liles, limbs, limes, limsy, lisle, lubes, luise, lusby, lyles, melis, mells, miles, mills, misly, mlles, mules, mulls, mulse, musie, musil, myles, mysel, sebum, selby, selim, selli, selly, sibel, sible, sibyl, silly, silyl, simul, slily, slime, slimy, smell, smile, smily, sully, sybil, syble, yells, yills, ylems, yules, yusem
6 letters: bellis, bisley, bluesy, blueys, bluism, blumes, bulies, bullis, busily, elymus, embusy, illyes, imbues, libels, libuse, limbus, limeys, milles, milsey, muesli, muleys, musily, mysell, sibell, sibley, simule, slimly, smelly, smiley, umbels, umbles
7 letters: besully, bullies, bullism, elysium, illumes, mulleys, sibylle, silybum, sublime, sybille
8 letters: bullyism, semibull
9 letters: sublimely</pre>
10,333

edits