ABC problem: Difference between revisions

Content deleted Content added
Petelomax (talk | contribs)
No edit summary
Added an Algol W sample
Line 284:
</pre>
 
=={{header|ALGOL W}}==
<lang algolw>% determine whether we can spell words with a set of blocks %
begin
% Returns true if we can spell the word using the blocks, %
% false otherwise %
% As strings are fixed length in Algol W, the length of the string is %
% passed as a separate parameter %
logical procedure canSpell ( string(20) value word
; integer value wordLength
) ;
begin
 
% convert a character to upper-case %
% assumes the letters are contiguous in the character set %
% as in ASCII and Unicode - nott correct for EBCDIC %
string(1) procedure toUpper( string(1) value c ) ;
if c < "a" or c > "z" then c
else code( ( decode( c ) - decode( "a" ) )
+ decode( "A" )
) ;
 
logical spellable;
integer wordPos, blockPos;
string(20) letters1, letters2;
 
% make local copies the faces so we can remove the used blocks %
letters1 := face1;
letters2 := face2;
 
% check we can spell the word with the set of blocks %
spellable := true;
wordPos := 0;
while wordPos < wordLength and spellable
do begin
string(1) letter;
letter := toUpper( word( wordPos // 1 ) );
spellable := false;
blockPos := 0;
while blockPos < 20 and not spellable
do begin
if letter = letters1( blockPos // 1 )
or letter = letters2( blockPos // 1 )
then begin
% found the letter - remove the used block from the %
% remaining blocks %
letters1( blockPos // 1 ) := " ";
letters2( blockPos // 1 ) := " ";
spellable := true
end;
blockPos := blockPos + 1
end;
wordPos := wordPos + 1;
end;
 
spellable
end canSpell ;
 
% the letters available on the faces of the blocks %
string(20) face1, face2;
face1 := "BXDCNGRTQFJHVAOEFLPZ";
face2 := "OKQPATEGDSWUINBRSYCM";
 
begin
% test the can spell procedure %
procedure testCanSpell ( string(20) value word
; integer value wordLength
) ;
write( if canSpell( word, wordLength ) then "can " else "cannot"
, " spell """
, word
, """"
);
 
testCanSpell( "a", 1 );
testCanSpell( "bark", 4 );
testCanSpell( "BOOK", 4 );
testCanSpell( "treat", 5 );
testCanSpell( "commoN", 6 );
testCanSpell( "Squad", 5 );
testCanSpell( "confuse", 7 )
end
end.
 
</lang>
{{out}}
<pre>
can spell "a "
can spell "bark "
cannot spell "BOOK "
can spell "treat "
cannot spell "commoN "
can spell "Squad "
can spell "confuse "
</pre>
 
=={{header|AppleScript}}==