include "cowgol.coh"; include "strings.coh"; sub can_make_word(word: [uint8]): (r: uint8) is var blocks: [uint8] := "BOXKDQCPNAGTRETGQDFSJWHUVIANOBERFSLYPCZM"; # Initialize blocks array var avl: uint8[41]; CopyString(blocks, &avl[0]); r := 1; loop var letter := [word]; word := @next word; if letter == 0 then break; end if; # find current letter in blocks var i: @indexof avl := 0; loop var block := avl[i]; if block == 0 then # no block, this word cannot be formed r := 0; return; elseif block == letter then # we found it, blank it out avl[i] := ' '; avl[i^1] := ' '; # and the other letter on the block too break; end if; i := i + 1; end loop; end loop; end sub; # test a list of words var words: [uint8][] := {"A","BARK","BOOK","TREAT","COMMON","SQUAD","CONFUSE"}; var resp: [uint8][] := {": No\n", ": Yes\n"}; var i: @indexof words := 0; while i < @sizeof words loop print(words[i]); print(resp[can_make_word(words[i])]); i := i + 1; end loop;