Word wheel: Difference between revisions

Content added Content deleted
No edit summary
Line 1,784: Line 1,784:
wok
wok
woke</pre>
woke</pre>

=={{header|Pascal}}==
{{works with|Free Pascal}}
<lang Pascal>
program WordWheel;

{$mode objfpc}{$H+}

uses
Classes, SysUtils;

const
WheelSize = 9;
MinLength = 3;
WordFile = 'unixdict.txt';

procedure search(pattern : string);
var
Allowed, Required, Available, w : string;
Len, i, p : integer;
WordList : TextFile;
Match : boolean;
begin
AssignFile(WordList, WordFile);
{$I-}
Reset(WordList);
{$I+}
if IOResult <> 0 then
begin
writeln('Could not open dictionary file ' + WordFile);
exit;
end;
Allowed := LowerCase(pattern);
Required := copy(Allowed, 5, 1);
while not eof(WordList) do
begin
readln(WordList, w);
Len := length(w);
Available := Allowed;
if (Len < MinLength) or (Len > WheelSize) then continue;
if pos(Required, w) = 0 then continue;
Match := True;
for i := 1 to Len do
begin
p := pos(w[i], Available);
if p > 0 then
{ prevent re-use of letter }
delete(Available, p, 1)
else
begin
Match := False;
break;
end;
end;
if Match then
writeln(w);
end;
end;

{ exercise the procedure }
begin
search('NDEOKGELW');
end.
</lang>
{{out}}
<pre>
eke
elk
keel
keen
keg
ken
keno
knee
kneel
knew
know
knowledge
kong
leek
week
wok
woke
</pre>


=={{header|Perl}}==
=={{header|Perl}}==