function board = miserwilly(words, weights, n, penalty)
board = zeros(n);
wlen = cellfun(@numel,words);
wcost = weights./(wlen+1);
[~,r] = sort(-wcost);
wlen = wlen(r);
words = words(r);
open = true(1,numel(words));
for i = [1:2:n,2:2:n]
j = 1;
k = find(open&(wlen<n-j),1);
while ~isempty(k)
open(k) = false;
word = words{k};
board(i,j:j+numel(word)-1) = word;
j = j+numel(word)+1;
k = find(open&(wlen<n-j),1);
end;
end;
end
|