Cody

# Problem 1184. Hangman (strategy)

Solution 817795

Submitted on 1 Feb 2016
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));

Target word HAZE; Step 1; Word list BUZZ COZY DOZE FUZZ GAZE HAZE JAZZ LAZY SIZE ZERO ZONE ; Guess Z Target word HAE; Step 2; Word list COY DOE GAE HAE LAY SIE ; Guess Y Target word HAE; Step 3; Word list DOE GAE HAE SIE ; Guess E Target word HA; Step 4; Word list DO GA HA SI ; Guess I Target word HA; Step 5; Word list DO GA HA ; Guess D Target word HA; Step 6; Word list GA HA ; Guess G Target word HA; Step 7; Word list HA ; Guess H Target word A; Step 8; Word list A ; Guess A Target word SIZE; Step 1; Word list BUZZ COZY DOZE FUZZ GAZE HAZE JAZZ LAZY SIZE ZERO ZONE ; Guess Z Target word SIE; Step 2; Word list COY DOE GAE HAE LAY SIE ; Guess E Target word SI; Step 3; Word list DO GA HA SI ; Guess S Target word I; Step 4; Word list I ; Guess I Target word DOZE; Step 1; Word list BUZZ COZY DOZE FUZZ GAZE HAZE JAZZ LAZY SIZE ZERO ZONE ; Guess O Target word DZE; Step 2; Word list CZY DZE ZNE ; Guess C Target word DZE; Step 3; Word list DZE ZNE ; Guess E Target word DZ; Step 4; Word list DZ ZN ; Guess Z Target word D; Step 5; Word list D ; Guess D Target word ZONE; Step 1; Word list BUZZ COZY DOZE FUZZ GAZE HAZE JAZZ LAZY SIZE ZERO ZONE ; Guess U Target word ZONE; Step 2; Word list COZY DOZE GAZE HAZE JAZZ LAZY SIZE ZERO ZONE ; Guess E Target word ZON; Step 3; Word list DOZ GAZ HAZ SIZ ZON ; Guess D Target word ZON; Step 4; Word list GAZ HAZ SIZ ZON ; Guess H Target word ZON; Step 5; Word list GAZ SIZ ZON ; Guess Z Target word ON; Step 6; Word list ON ; Guess O Target word N; Step 7; Word list N ; Guess N Target word BUZZ; Step 1; Word list BUZZ COZY DOZE FUZZ GAZE HAZE JAZZ LAZY SIZE ZERO ZONE ; Guess O Target word BUZZ; Step 2; Word list BUZZ FUZZ GAZE HAZE JAZZ LAZY SIZE ; Guess Z Target word BU; Step 3; Word list BU FU JA ; Guess A Target word BU; Step 4; Word list BU FU ; Guess U Target word B; Step 5; Word list B F ; Guess B Target word FUZZ; Step 1; Word list BUZZ COZY DOZE FUZZ GAZE HAZE JAZZ LAZY SIZE ZERO ZONE ; Guess Z Target word FU; Step 2; Word list BU FU JA ; Guess J Target word FU; Step 3; Word list BU FU ; Guess F Target word U; Step 4; Word list U ; Guess U Target word JAZZ; Step 1; Word list BUZZ COZY DOZE FUZZ GAZE HAZE JAZZ LAZY SIZE ZERO ZONE ; Guess Z Target word JA; Step 2; Word list BU FU JA ; Guess F Target word JA; Step 3; Word list BU JA ; Guess A Target word J; Step 4; Word list J ; Guess J Target word LAZY; Step 1; Word list BUZZ COZY DOZE FUZZ GAZE HAZE JAZZ LAZY SIZE ZERO ZONE ; Guess Z Target word LAY; Step 2; Word list COY DOE GAE HAE LAY SIE ; Guess D Target word LAY; Step 3; Word list COY GAE HAE LAY SIE ; Guess C Target word LAY; Step 4; Word list GAE HAE LAY SIE ; Guess E Target word LAY; Step 5; Word list LAY ; Guess L Target word AY; Step 6; Word list AY ; Guess A Target word Y; Step 7; Word list Y ; Guess Y Target word ZERO; Step 1; Word list BUZZ COZY DOZE FUZZ GAZE HAZE JAZZ LAZY SIZE ZERO ZONE ; Guess Z Target word ERO; Step 2; Word list ERO ONE ; Guess E Target word RO; Step 3; Word list RO ; Guess O Target word R; Step 4; Word list R ; Guess R Target word COZY; Step 1; Word list BUZZ COZY DOZE FUZZ GAZE HAZE JAZZ LAZY SIZE ZERO ZONE ; Guess R Target word COZY; Step 2; Word list BUZZ COZY DOZE FUZZ GAZE HAZE JAZZ LAZY SIZE ZONE ; Guess E Target word COZY; Step 3; Word list BUZZ COZY FUZZ JAZZ LAZY ; Guess Z Target word COY; Step 4; Word list COY LAY ; Guess Y Target word CO; Step 5; Word list CO LA ; Guess L Target word CO; Step 6; Word list CO ; Guess O Target word C; Step 7; Word list C ; Guess C Target word GAZE; Step 1; Word list BUZZ COZY DOZE FUZZ GAZE HAZE JAZZ LAZY SIZE ZERO ZONE ; Guess L Target word GAZE; Step 2; Word list BUZZ COZY DOZE FUZZ GAZE HAZE JAZZ SIZE ZERO ZONE ; Guess N Target word GAZE; Step 3; Word list BUZZ COZY DOZE FUZZ GAZE HAZE JAZZ SIZE ZERO ; Guess U Target word GAZE; Step 4; Word list COZY DOZE GAZE HAZE JAZZ SIZE ZERO ; Guess Z Target word GAE; Step 5; Word list COY DOE GAE HAE SIE ; Guess S Target word GAE; Step 6; Word list COY DOE GAE HAE ; Guess E Target word GA; Step 7; Word list DO GA HA ; Guess A Target word G; Step 8; Word list G H ; Guess G Average number of errors per word 2.000000

2   Fail
%% 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));

Average number of errors per word 5.882653

Assertion failed.

3   Fail
%% rng default; a.words0=cellstr(unique(char('A'+ceil(26*rand([200,4]).^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));

Average number of errors per word 4.815000

Undefined function or variable 'score'.