Cody

# Problem 1184. Hangman (strategy)

Solution 187509

Submitted on 7 Jan 2013 by J.R.! Menzinger
• Size: 144
• This is the leading solution.
This solution is locked. To view this solution, you need to provide a solution of the same size or smaller.

### Test Suite

Test Status Code Input and Output
1   Pass
%% assignin('caller','score',300); a.words0={'BUZZ','COZY','DOZE','FUZZ','GAZE','HAZE','JAZZ','LAZY','SIZE','ZERO','ZONE'}; a.e=0; for n=randperm(numel(a.words0)) a.i=n; a.words=a.words0; a.n=n; for m=1:100, a.m=m; assignin('caller','a',a); letter=hangman(a.words); letter=char(letter(1)); a=evalin('caller','a'); m=a.m; fprintf('Target word %s; Step %d; Word list %s; Guess %c\n',a.words{a.i},a.m,sprintf('%s ',a.words{:}),letter); matchedletters=a.words{a.i}==letter; if ~any(matchedletters), a.e=a.e+1; end matchedwords=find(cellfun(@(x)isequal(matchedletters,x==letter),a.words)); a.i=find(matchedwords==a.i); a.words=regexprep(a.words(matchedwords),letter,''); nonemptywords=find(cellfun('length',a.words)>0); a.i=find(nonemptywords==a.i); if isempty(a.i), break; end end if ~isempty(a.i), error(sprintf('algorithm did not guess word after 100 steps. Last message: Target word %s; Step %d; Word list %s; Guessed letter %c\n',a.words{a.i},a.m,sprintf('%s ',a.words{:}),letter)); end n=a.n; end a.e=a.e/numel(a.words0); fprintf('Average number of errors per word %f\n',a.e); assert(a.e<5); assignin('caller','score',evalin('caller','score')-100+round(a.e/5*100));

``` i = 18 ans = Z Target word FUZZ; Step 1; Word list BUZZ COZY DOZE FUZZ GAZE HAZE JAZZ LAZY SIZE ZERO ZONE ; Guess Z i = 5 ans = U Target word FU; Step 2; Word list BU FU JA ; Guess U i = 1 ans = B Target word F; Step 3; Word list B F ; Guess B i = 1 ans = F Target word F; Step 4; Word list F ; Guess F i = 18 ans = Z Target word BUZZ; Step 1; Word list BUZZ COZY DOZE FUZZ GAZE HAZE JAZZ LAZY SIZE ZERO ZONE ; Guess Z i = 5 ans = U Target word BU; Step 2; Word list BU FU JA ; Guess U i = 1 ans = B Target word B; Step 3; Word list B F ; Guess B i = 18 ans = Z Target word HAZE; Step 1; Word list BUZZ COZY DOZE FUZZ GAZE HAZE JAZZ LAZY SIZE ZERO ZONE ; Guess Z i = 4 ans = E Target word HAE; Step 2; Word list COY DOE GAE HAE LAY SIE ; Guess E i = 1 ans = A Target word HA; Step 3; Word list DO GA HA SI ; Guess A i = 1 ans = G Target word H; Step 4; Word list G H ; Guess G i = 1 ans = H Target word H; Step 5; Word list H ; Guess H i = 18 ans = Z Target word ZERO; Step 1; Word list BUZZ COZY DOZE FUZZ GAZE HAZE JAZZ LAZY SIZE ZERO ZONE ; Guess Z i = 1 ans = E Target word ERO; Step 2; Word list ERO ONE ; Guess E i = 1 ans = O Target word RO; Step 3; Word list RO ; Guess O i = 1 ans = R Target word R; Step 4; Word list R ; Guess R i = 18 ans = Z Target word LAZY; Step 1; Word list BUZZ COZY DOZE FUZZ GAZE HAZE JAZZ LAZY SIZE ZERO ZONE ; Guess Z i = 4 ans = E Target word LAY; Step 2; Word list COY DOE GAE HAE LAY SIE ; Guess E i = 5 ans = Y Target word LAY; Step 3; Word list COY LAY ; Guess Y i = 1 ans = A Target word LA; Step 4; Word list CO LA ; Guess A i = 1 ans = L Target word L; Step 5; Word list L ; Guess L i = 18 ans = Z Target word GAZE; Step 1; Word list BUZZ COZY DOZE FUZZ GAZE HAZE JAZZ LAZY SIZE ZERO ZONE ; Guess Z i = 4 ans = E Target word GAE; Step 2; Word list COY DOE GAE HAE LAY SIE ; Guess E i = 1 ans = A Target word GA; Step 3; Word list DO GA HA SI ; Guess A i = 1 ans = G Target word G; Step 4; Word list G H ; Guess G i = 18 ans = Z Target word DOZE; Step 1; Word list BUZZ COZY DOZE FUZZ GAZE HAZE JAZZ LAZY SIZE ZERO ZONE ; Guess Z i = 4 ans = E Target word DOE; Step 2; Word list COY DOE GAE HAE LAY SIE ; Guess E i = 1 ans = A Target word DO; Step 3; Word list DO GA HA SI ; Guess A i = 1 ans = D Target word DO; Step 4; Word list DO SI ; Guess D i = 1 ans = O Target word O; Step 5; Word list O ; Guess O i = 18 ans = Z Target word SIZE; Step 1; Word list BUZZ COZY DOZE FUZZ GAZE HAZE JAZZ LAZY SIZE ZERO ZONE ; Guess Z i = 4 ans = E Target word SIE; Step 2; Word list COY DOE GAE HAE LAY SIE ; Guess E i = 1 ans = A Target word SI; Step 3; Word list DO GA HA SI ; Guess A i = 1 ans = D Target word SI; Step 4; Word list DO SI ; Guess D i = 1 ans = I Target word SI; Step 5; Word list SI ; Guess I i = 1 ans = S Target word S; Step 6; Word list S ; Guess S i = 18 ans = Z Target word COZY; Step 1; Word list BUZZ COZY DOZE FUZZ GAZE HAZE JAZZ LAZY SIZE ZERO ZONE ; Guess Z i = 4 ans = E Target word COY; Step 2; Word list COY DOE GAE HAE LAY SIE ; Guess E i = 5 ans = Y Target word COY; Step 3; Word list COY LAY ; Guess Y i = 1 ans = A Target word CO; Step 4; Word list CO LA ; Guess A i = 1 ans = C Target word CO; Step 5; Word list CO ; Guess C i = 1 ans = O Target word O; Step 6; Word list O ; Guess O i = 18 ans = Z Target word ZONE; Step 1; Word list BUZZ COZY DOZE FUZZ GAZE HAZE JAZZ LAZY SIZE ZERO ZONE ; Guess Z i = 1 ans = E Target word ONE; Step 2; Word list ERO ONE ; Guess E i = 1 ans = N Target word ON; Step 3; Word list ON ; Guess N i = 1 ans = O Target word O; Step 4; Word list O ; Guess O i = 18 ans = Z Target word JAZZ; Step 1; Word list BUZZ COZY DOZE FUZZ GAZE HAZE JAZZ LAZY SIZE ZERO ZONE ; Guess Z i = 5 ans = U Target word JA; Step 2; Word list BU FU JA ; Guess U i = 1 ans = A Target word JA; Step 3; Word list JA ; Guess A i = 1 ans = J Target word J; Step 4; Word list J ; Guess J Average number of errors per word 0.818182 ```

2   Pass
%% rng default; a.words0=cellstr(unique(char('A'+ceil(26*rand([200,3]).^2)-1),'rows'))'; a.e=0; for n=randperm(numel(a.words0)) a.i=n; a.words=a.words0; a.n=n; for m=1:100, a.m=m; assignin('caller','a',a); letter=hangman(a.words); letter=char(letter(1)); a=evalin('caller','a'); m=a.m; matchedletters=a.words{a.i}==letter; if ~any(matchedletters), a.e=a.e+1; end matchedwords=find(cellfun(@(x)isequal(matchedletters,x==letter),a.words)); a.i=find(matchedwords==a.i); a.words=regexprep(a.words(matchedwords),letter,''); nonemptywords=find(cellfun('length',a.words)>0); a.i=find(nonemptywords==a.i); if isempty(a.i), break; end end if ~isempty(a.i), error(sprintf('algorithm did not guess word after 100 steps. Last message: Target word %s; Step %d; Word list %s; Guessed letter %c\n',a.words{a.i},a.m,sprintf('%s ',a.words{:}),letter)); end n=a.n; end a.e=a.e/numel(a.words0); fprintf('Average number of errors per word %f\n',a.e); assert(a.e<5); assignin('caller','score',evalin('caller','score')-100+round(a.e/5*100));

``` i = 1 ans = A i = 1 ans = B i = 1 ans = C i = 1 ans = E i = 1 ans = F i = 1 ans = G i = 1 ans = H i = 1 ans = I i = 1 ans = P i = 1 ans = A i = 3 ans = D i = 2 ans = C i = 1 ans = R i = 1 ans = V i = 1 ans = A i = 3 ans = D i = 1 ans = I i = 1 ans = P i = 1 ans = A i = 4 ans = E i = 1 ans = B i = 5 ans = H i = 1 ans = D i = 1 ans = R i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = D i = 11 ans = P i = 2 ans = G i = 1 ans = K i = 1 ans = N i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 5 ans = L i = 1 ans = I i = 1 ans = N i = 1 ans = S i = 1 ans = A i = 1 ans = B i = 3 ans = H i = 1 ans = C i = 1 ans = A i = 1 ans = B i = 3 ans = H i = 11 ans = U i = 1 ans = M i = 1 ans = N i = 1 ans = A i = 1 ans = F i = 1 ans = J i = 1 ans = O i = 1 ans = Q i = 1 ans = R i = 1 ans = A i = 3 ans = D i = 2 ans = C i = 1 ans = B i = 7 ans = R i = 1 ans = E i = 1 ans = V i = 1 ans = A i = 1 ans = B i = 3 ans = H i = 11 ans = U i = 4 ans = K i = 1 ans = Q i = 1 ans = A i = 1 ans = B i = 4 ans = G i = 6 ans = K i = 4 ans = H i = 13 ans = V i = 1 ans = E i = 1 ans = M i = 1 ans = N i = 1 ans = O i = 1 ans = P i = 1 ans = R i = 1 ans = Z i = 1 ans = A i = 1 ans = B i = 7 ans = O i = 1 ans = D i = 1 ans = Z i = 1 ans = A i = 1 ans = B i = 4 ans = G i = 6 ans = K i = 4 ans = H i = 13 ans = V i = 1 ans = E i = 1 ans = M i = 1 ans = N i = 1 ans = O i = 1 ans = T i = 1 ans = A i = 1 ans = B i = 4 ans = G i = 6 ans = K i = 4 ans = H i = 1 ans = C i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = D i = 11 ans = P i = 2 ans = G i = 1 ans = E i = 1 ans = H i = 1 ans = J i = 1 ans = K i = 1 ans = A i = 1 ans = B i = 2 ans = F i = 2 ans = G i = 4 ans = J i = 1 ans = N i = 1 ans = X i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = D i = 11 ans = P i = 8 ans = M i = 1 ans = E i = 1 ans = H i = 1 ans = Q i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = E i = 1 ans = M i = 1 ans = O i = 1 ans = A i = 1 ans = B i = 7 ans = O i = 1 ans = J i = 1 ans = A i = 1 ans = B i = 4 ans = G i = 1 ans = R i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = D i = 1 ans = X i = 1 ans = A i = 1 ans = B i = 1 ans = G i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 9 ans = X i = 1 ans = C i = 1 ans = D i = 1 ans = R i = 1 ans = Z i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = D i = 11 ans = P i = 3 ans = Q i = 1 ans = L i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = D i = 2 ans = K i = 1 ans = M i = 1 ans = R i = 1 ans = A i = 1 ans = F i = 1 ans = J i = 1 ans = O i = 1 ans = Q i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = D i = 11 ans = P i = 8 ans = M i = 1 ans = G i = 1 ans = J i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = D i = 11 ans = P i = 8 ans = M i = 5 ans = X i = 1 ans = E i = 1 ans = H i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = D i = 1 ans = E i = 1 ans = Q i = 1 ans = A i = 1 ans = B i = 4 ans = G i = 6 ans = K i = 4 ans = H i = 13 ans = V i = 1 ans = E i = 1 ans = S i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = D i = 11 ans = P i = 2 ans = G i = 1 ans = E i = 1 ans = H i = 1 ans = U i = 1 ans = A i = 4 ans = E i = 1 ans = B i = 5 ans = H i = 1 ans = D i = 1 ans = F i = 4 ans = M i = 1 ans = G i = 1 ans = J i = 1 ans = R i = 1 ans = A i = 1 ans = B i = 3 ans = H i = 11 ans = U i = 4 ans = K i = 5 ans = P i = 4 ans = V i = 1 ans = N i = 1 ans = A i = 3 ans = D i = 2 ans = C i = 1 ans = G i = 1 ans = A i = 1 ans = B i = 4 ans = G i = 6 ans = K i = 1 ans = Q i = 1 ans = X i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 5 ans = L i = 1 ans = H i = 1 ans = A i = 3 ans = D i = 2 ans = C i = 1 ans = B i = 7 ans = R i = 1 ans = E i = 1 ans = K i = 1 ans = O i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = D i = 1 ans = E i = 1 ans = I i = 1 ans = A i = 1 ans = B i = 3 ans = H i = 11 ans = U i = 4 ans = K i = 5 ans = P i = 4 ans = V i = 1 ans = D i = 1 ans = R i = 1 ans = W i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = D i = 1 ans = E i = 1 ans = I i = 1 ans = J i = 1 ans = N i = 1 ans = O i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = E i = 2 ans = L i = 1 ans = P i = 1 ans = A i = 1 ans = B i = 7 ans = O i = 1 ans = D i = 1 ans = E i = 1 ans = H i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 5 ans = L i = 1 ans = I i = 1 ans = Z i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = D i = 2 ans = K i = 1 ans = M i = 1 ans = R i = 1 ans = T i = 1 ans = A i = 1 ans = B i = 1 ans = E i = 1 ans = N i = 1 ans = A i = 1 ans = B i = 3 ans = H i = 11 ans = U i = 1 ans = M i = 1 ans = A i = 1 ans = B i = 3 ans = H i = 11 ans = U i = 4 ans = K i = 5 ans = P i = 1 ans = L i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = D i = 11 ans = P i = 3 ans = Q i = 1 ans = I i = 1 ans = A i = 1 ans = B i = 3 ans = H i = 11 ans = U i = 4 ans = K i = 5 ans = P i = 1 ans = C i = 1 ans = A i = 3 ans = D i = 1 ans = H i = 1 ans = I i = 1 ans = K i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = J i = 1 ans = N i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = D i = 1 ans = G i = 1 ans = H i = 1 ans = L i = 1 ans = A i = 4 ans = E i = 1 ans = B i = 5 ans = H i = 1 ans = D i = 1 ans = F i = 4 ans = M i = 1 ans = W i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 9 ans = X i = 1 ans = C i = 1 ans = D i = 1 ans = O i = 1 ans = A i = 4 ans = E i = 1 ans = B i = 1 ans = H i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = D i = 11 ans = P i = 8 ans = M i = 6 ans = K i = 8 ans = O i = 1 ans = I i = 1 ans = J i = 1 ans = A i = 4 ans = E i = 1 ans = L i = 1 ans = M i = 1 ans = O i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 9 ans = X i = 1 ans = C i = 1 ans = J i = 1 ans = A i = 1 ans = B i = 3 ans = H i = 1 ans = C i = 1 ans = Y i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = D i = 1 ans = G i = 1 ans = H i = 1 ans = I i = 1 ans = A i = 3 ans = D i = 2 ans = C i = 1 ans = B i = 1 ans = F i = 1 ans = H i = 1 ans = S i = 1 ans = W i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = D i = 11 ans = P i = 2 ans = G i = 1 ans = E i = 1 ans = T i = 1 ans = A i = 1 ans = B i = 4 ans = G i = 1 ans = E i = 1 ans = A i = 1 ans = B i = 4 ans = G i = 6 ans = K i = 1 ans = Q i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = D i = 11 ans = P i = 8 ans = M i = 6 ans = K i = 8 ans = O i = 1 ans = E i = 7 ans = S i = 1 ans = N i = 1 ans = Q i = 1 ans = A i = 1 ans = F i = 1 ans = J i = 1 ans = O i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = E i = 2 ans = L i = 1 ans = G i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = D i = 11 ans = P i = 1 ans = Q i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = D i = 11 ans = P i = 8 ans = M i = 6 ans = K i = 8 ans = O i = 1 ans = G i = 1 ans = H i = 1 ans = A i = 1 ans = B i = 1 ans = E i = 1 ans = N i = 1 ans = Q i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = D i = 11 ans = P i = 2 ans = G i = 1 ans = K i = 1 ans = A i = 1 ans = B i = 2 ans = F i = 1 ans = L i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = D i = 11 ans = P i = 8 ans = M i = 5 ans = X i = 1 ans = E i = 1 ans = A i = 1 ans = B i = 4 ans = F i = 1 ans = C i = 1 ans = D i = ...```

3   Fail