/* Word search puzzle in Picat. http://en.wikipedia.org/wiki/Word_search Find all words in a letter matrix. Example. From this 10x10 letter matrix T R E D U C E M O P I R U K I W O P R E N X A D M N P O E U W A A N A P N T R D H Y C D S R F A A I D I I S I P D T T S D C F S J V O E O E E T U M M O C S R R N F D A R T C M E B T J L Y Y O F A Z X These 118 words where found using a simple word list (ignoring single letters): aau,ac,acs,ad,ah,ak,al,am,ami,an,ana,ann,ar,are,art,as,at,ate,atop,ax,az,be, bred,ca,can,cf,co,cod,commute,coo,ct,cud,dan,dar,dart,day,dc,de,den,dent, dice,din,dis,do,dr,du,due,dyad,dyadic,ed,em,en,era,erato,et,eta,ex,faa,fcc, fda,fe,fl,fm,ft,ftc,ha,hi,ia,ice,id,ida,if,ii,in,inn,innate,ir,is,it,iv,ix, jo,ku,la,lam,ma,may,md,me,mi,mn,mo,mona,monad,monadic,mop,mr,ms,mt,mu,mute, nap,nat,nate,nc,nd,ne,ned,nit,nj,nm,no,nor,nw,of,on,or,ore,ow,pa,pan,pi, pm,po,poe,pose,pot,pow,pr,pro,pta,ran,rat,rd,re,red,reduce,residue,ri, ron,root,rot,sa,sam,sat,sc,scan,sd,se,set,sex,sip,sir,so,sop,st,ta,tad, tan,tar,tat,tate,tee,ti,tin,tn,to,too,top,tor,tore,transpose,tum,uk,uri, us,ut,vi,vida,wa,we,wi,wop,wu,wy,xi,yam,zero The longest found word is "transpose". Using a larger word list, 639 words are found, so it - of course - all depends on the word list... Cf http://hakank.org/picat/word_search_puzzle_generate.pi (for generating a word search puzzle). Note: You have to provide your own wordlist. This Picat model was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import util. main => go. go => File = "unixdict.txt", % File = "words_lower.txt", WordsMap = generate_words_map(File), println(numWords=WordsMap.keys().length), matrix(1,Matrix, _GivenWords), print_matrix(Matrix), MinLen = 2, FoundWords=find_words(Matrix,WordsMap,MinLen), println(numWords=FoundWords.length), println(longest=find_longest(FoundWords)), nl. % Matrix from http://en.wikipedia.org/wiki/Word_search go2 => println("Original words:"), matrix(2,Matrix, GivenWords), WordsMap = new_map([W=1 : W in GivenWords]), println(numWords=WordsMap.keys().length), print_matrix(Matrix), MinLen = 4, FoundWords=find_words(Matrix,WordsMap,MinLen), println(numWords=FoundWords.length), println(longest=find_longest(FoundWords)), File = "unixdict.txt", % File = "words_lower.txt", WordsMap2 = generate_words_map(File), println(numWords=WordsMap2.keys().length), FoundWords2=find_words(Matrix,WordsMap2,MinLen), println(numWords=FoundWords2.length), println(longest=find_longest(FoundWords2)), nl. go2b => matrix(3,Matrix,_GivenWords), print_matrix(Matrix), % WordsMap = new_map([W=1 : W in GivenWords]), % println(numWords=WordsMap.keys().length), % File = "unixdict.txt", File = "words_lower.txt", WordsMap = generate_words_map(File), println(numWords=WordsMap.keys().length), MinLen = 3, FoundWords=find_words(Matrix,WordsMap,MinLen), println(numWords=FoundWords.length), println(longest=find_longest(FoundWords)), nl. go3 => % File = "unixdict.txt", % File = "words_lower.txt", File = "/home/hakank/public_html/combograms/sv_spelling_org_utf8.txt", % File = "/home/hakank/public_html/combograms/sv_spelling_org.txt", WordsMap = generate_words_map2(File), N = 10, Matrix = generate_matrix_swe(N,N), print_matrix(Matrix), MinLen = 4, FoundWords = find_words(Matrix,WordsMap,MinLen), println(numWords=FoundWords.length), println(longest=find_longest(FoundWords)), FoundMap = new_map([W=W.length : W in FoundWords]), println(sorted=sort_map_values(FoundMap).reverse()), nl. go3b => matrix(6,Matrix,GivenWords), print_matrix(Matrix), % File = "/home/hakank/public_html/combograms/sv_spelling_org.txt", % WordsMap = generate_words_map(File), % println(numWords=WordsMap.keys().length), WordsMap = new_map([W=1 : W in GivenWords]), println(numWords=WordsMap.keys().length), MinLen = 3, FoundWords=find_words(Matrix,WordsMap,MinLen), println(numWords=FoundWords.length), println(longest=find_longest(FoundWords)), nl. go4 => println("Original words:"), matrix(4,Matrix, GivenWords), WordsMap = new_map([W=1 : W in GivenWords]), println(numWords=WordsMap.keys().length), print_matrix(Matrix), MinLen = 0, FoundWords=find_words(Matrix,WordsMap,MinLen), println(numWords=FoundWords.length), println(longest=find_longest(FoundWords)), File = "unixdict.txt", % File = "words_lower.txt", WordsMap2 = generate_words_map(File), println(numWords=WordsMap2.keys().length), FoundWords2=find_words(Matrix,WordsMap2,MinLen), println(numWords=FoundWords2.length), println(longest=find_longest(FoundWords2)), nl. go5 => % File = "unixdict.txt", % File = "words_lower.txt", File = "/home/hakank/public_html/combograms/sv_spelling_org_utf8.txt", WordsMap = generate_words_map(File), println(numWords=WordsMap.keys().length), matrix(5,Matrix, _GivenWords), print_matrix(Matrix), MinLen = 2, FoundWords=find_words(Matrix,WordsMap,MinLen), println(numWords=FoundWords.length), println(longest=find_longest(FoundWords)), nl. % Swedish words go6 => % File = "unixdict.txt", % File = "words_lower.txt", File = "/home/hakank/public_html/combograms/saol-final.txt", WordsMap = generate_words_map2(File), println(numWords=WordsMap.keys().length), matrix(7,Matrix, _GivenWords), print_matrix(Matrix), MinLen = 0, FoundWords=find_words(Matrix,WordsMap,MinLen), println(numWords=FoundWords.length), println(longest=find_longest(FoundWords)), println(longest_len=find_longest(FoundWords).length), nl. go7 => % File = "unixdict.txt", File = "words_lower.txt", % File = "/home/hakank/public_html/combograms/saol-final.txt", WordsMap = generate_words_map2(File), println(numWords=WordsMap.keys().length), matrix(8,Matrix, _GivenWords), print_matrix(Matrix), MinLen = 2, FoundWords=find_words(Matrix,WordsMap,MinLen), println(numWords=FoundWords.length), println(longest=find_longest(FoundWords)), println(longest_len=find_longest(FoundWords).length), nl. % get the start pos ([StartI,StartJ]) given the direction type (Type), N, and K start_pos_k(Type,N,K,_StartPos) = [StartI,StartJ] => % println($start_pos_k(Type,N,K)), if member(Type, [n,s]) then % south / north if Type == s then [StartI,StartJ] = [1,K] else [StartI,StartJ] = [N,K] end elseif member(Type, [e,w]) then % east / west if Type == e then [StartI,StartJ] = [K,1] else [StartI,StartJ] = [K,N] end elseif member(Type,[sw,ne]) then % south_west / north east L = [ [I,J] : I in 1..N, J in 1..N, I+J=K], if Type == sw then [StartI,StartJ] = L.first() else [StartI,StartJ] = L.last() end else % south_east / north west L = [ [I,J] : I in 1..N, J in 1..N, N+I-J=K], if Type == se then [StartI,StartJ] = L.first() else [StartI,StartJ] = L.last() end end. % inrange(N,I,A) => I+A >= 1, I+A <=N. % % print matrix % print_matrix(Matrix) => N = Matrix.length, M = Matrix[1].length, foreach(I in 1..N) foreach(J in 1..M) if char(Matrix[I,J]) then printf("%w ", to_uppercase_swe(Matrix[I,J])) else printf("%w ", Matrix[I,J]) end end, nl end, nl. to_uppercase_swe(C) = U => if membchk(C,"åäö") then if C == 'å' then U = 'Å' elseif C == 'ä' then U = 'Ä' else U = 'Ö' end else U = to_uppercase(C) end. % % % sort_map_values(Map) = [K=V:_=(K=V) in sort([V=(K=V): K=V in Map])]. % % % find_longest(Words) = Longest => MaxLen = max([W.length : W in Words]), Longest=[W : W in Words, W.length = MaxLen]. % % generate a map of the words in File % generate_words_map(File) = new_map([ to_lowercase(Word)=1 : Word in read_file_lines(File),Word.length > 1]). generate_words_map2(File) = new_map([ Word=1 : Word in read_file_chars(File).split("\n"),Word.length > 1]). generate_words_map2(File,MinLen,MaxLen) = new_map([ Word=1 : Word in read_file_chars(File).split("\n"), Word.length >= MinLen, Word.length <= MaxLen]). % % find_words % find_words(Matrix,WordsMap,MinLen) = FoundWords => Rows = Matrix.length, Cols = Matrix[1].length, println([rows=Rows,cols=Cols,minLen=MinLen]), Segments = [], % rows foreach(I in 1..Rows) East = Matrix[I], Segments := Segments ++ [[e,I]=East], % East Segments := Segments ++ [[w,I]=East.reverse()] % West end, % cols MatrixTransposed = Matrix.transpose(), foreach(J in 1..Cols) South = MatrixTransposed[J], Segments := Segments ++ [[s,J]=South], Segments := Segments ++ [[n,J]=South.reverse()] end, foreach(K in 1..Rows*2) D1=[Matrix[I,J] : I in 1..Rows, J in 1..Cols, I+J=K], Segments := Segments ++ [[sw,K]=D1], Segments := Segments ++ [[ne,K]=D1.reverse()] end, foreach(K in 1..Rows*2) D1=[MatrixTransposed[I,J] : I in 1..Rows, J in 1..Cols, Rows+I-J=K], Segments := Segments ++ [[se,K]=D1], Segments := Segments ++ [[nw,K]=D1.reverse()] end, % println(segments=Segments), println(segmentsLen=Segments.length), FoundWords1 = [], foreach([Dir,K]=S in Segments, S.length > 1) Len = S.length, foreach(I in 1..Len, J in I..Len) W = slice(S,I,J), % println(w=W), if W.length >= MinLen, WordsMap.has_key(W) then [_StartI,_StartJ] = start_pos_k(Dir,Rows,K,I), % print(word=W), print("\t"), println([s=S,dir=Dir,k=K,i=I,j=J,startI=StartI,startJ=StartJ]), FoundWords1 := FoundWords1 ++ [W] end end /* % much slower foreach(W in all_substrings(S)) if W.length >= MinLen, WordsMap.has_key(W) then % print(word=W), print("\t"), println([dir=Dir,k=K,s=S,i=I,j=J]), FoundWords1 := FoundWords1 ++ [W] end end */ end, FoundWords = FoundWords1.sort_remove_dups(), println(foundWords=FoundWords), nl. all_substrings(Word) = Substrings => Len = Word.length, Substrings = [], foreach(I in 1..Len, J in I..Len) W = slice(Word,I,J), if W.length > 1 then Substrings := Substrings ++ [W] end end. % Swedish matrix (added "åäö") generate_matrix_swe(N,M) = Matrix.array_matrix_to_list_matrix() => Matrix = new_array(N,M), % S = "abcdefghijklmnopqrstuvwxuzåäö", % make it a bit more like Swedish words S = letter_freq_swe(), Len = S.length, foreach(I in 1..N, J in 1..M) Matrix[I,J] = S[1+ random2() mod Len] end. generate_matrix(N,M) = Matrix.array_matrix_to_list_matrix() => Matrix = new_array(N,M), % S = "abcdefghijklmnopqrstuvwxuz", % make it a bit more like English words S = letter_freq(), Len = S.length, foreach(I in 1..N, J in 1..M) Matrix[I,J] = S[1+ random2() mod Len] end. /* Letter frequencies in English From http://www.math.cornell.edu/~mec/2003-2004/cryptography/subs/frequencies.html */ letter_freq = Chars => Freq = [ [e,12.02], [t,9.10], [a,8.12], [o,7.68], [i,7.31], [n,6.95], [s,6.28], [r,6.02], [h,5.92], [d,4.32], [l,3.98], [u,2.88], [c,2.71], [m,2.61], [f,2.30], [y,2.11], [w,2.09], [g,2.03], [p,1.82], [b,1.49], [v,1.11], [k,0.69], [x,0.17], [q,0.11], [j,0.10], [z,0.07] ], Chars = [], foreach([C,F] in Freq) % we Chars := Chars ++ [C : _ in 1..ceiling(10*F)] end, nl. % % Swedish frequencies. % letter_freq_swe = Chars => Freq = [ [a,9.3], [b,1.3], [c,1.3], [d,4.5], [e,9.9], [f,2.0], [g,3.3], [h,2.1], [i,5.5], [j,0.7], [k,3.2], [l,5.2], [m,3.5], [n,8.8], [o,4.1], [p,1.7], [q,0.01], [r,8.3], [s,6.3], [t,8.7], [u,1.8], [v,2.4], [w,0.03], [x,0.1], [y,0.6], [z,0.02], ['å',1.6], ['ä',2.1], ['ö',1.5] ], Chars = [], foreach([C,F] in Freq) Chars := Chars ++ [C : _ in 1..ceiling(10*F)] end, nl. % From % http://www.dyalog.com/uploads/files/student_competition/2014_problems_phase2.pdf % "2014 APL Problem Solving Competition – Phase II Problem Descriptions", % Page 14, % Words: % dyadic 6,1 NE % reduce 1,2 E % residue 8,10 N % transpose 1,1 SE % .... % matrix(1,Matrix,Words) => Matrix = [ [t,r,e,d,u,c,e,m,o,p], [i,r,u,k,i,w,o,p,r,e], [n,x,a,d,m,n,p,o,e,u], [w,a,a,n,a,p,n,t,r,d], [h,y,c,d,s,r,f,a,a,i], [d,i,i,s,i,p,d,t,t,s], [d,c,f,s,j,v,o,e,o,e], [e,t,u,m,m,o,c,s,r,r], [n,f,d,a,r,t,c,m,e,b], [t,j,l,y,y,o,f,a,z,x] ], Words = []. % % From % http://en.wikipedia.org/wiki/Word_search % matrix(2,Matrix,Words) => Matrix = [ [w,v,e,r,t,i,c,a,l,l], [r,o,o,a,f,f,l,s,a,b], [a,c,r,i,l,i,a,t,o,a], [n,d,o,d,k,o,n,w,d,c], [d,r,k,e,s,o,o,d,d,k], [o,e,e,p,z,e,g,l,i,w], [m,s,i,i,h,o,a,e,r,a], [a,l,r,k,r,r,i,r,e,r], [k,o,d,i,d,e,d,r,c,d], [h,e,l,w,s,l,e,u,t,h] ], Words = [ "week", "find", "random", "sleuth", "backward", "vertical", "diagonal", "wikipedia", "horizontal", "wordsearch" ]. % % Generated by the MiniZinc miodel crossword3_0.mzn % matrix(3,Matrix,Words) => Matrix = [ [b,a,h,i,a], [a,r,a,b,s], [s,o,u,l,s], [e,s,s,i,e], [l,e,a,s,t] ], Words = [ "bahia", % East 1,1 "arabs", % East 2,1 "souls", % East 3,1 "essie", % East 4,1 "least", % East 5,1 "basel", % South 1,1 "arose", % South 1,2 "hausa", % South 1,3 "iblis", % South 1,4 "asset" % Souhh 1,5 ]. % % Generated by word_search_puzzle_generate.pi % % Before adding dummy characters % L W I K I P E D I A F P % D A _ L I _ W _ D I H R % I _ T C A E _ R N T _ O % A _ A N E C A D U _ R G % G T _ K O W I E _ A _ R % O _ _ _ K Z L T N _ _ A % N _ _ C _ S I D R _ _ M % A _ A _ _ _ O R _ E _ M % L B _ _ _ M _ _ O _ V I % W O R D S E A R C H _ N % _ C O N S T R A I N T G % H A K A N K _ _ _ _ _ _ % % placements= % [ % [diagonal,n,9,1], % [picat,nw,1,2], % [wikipedia,w,1,10], % [find,nw,1,8], % [horizontal,se,1,1], % [week,nw,2,4], % [programming,s,1,12], % [backward,nw,2,2], % [sleuth,nw,2,6], % [vertical,se,2,4], % [constraint,w,11,11], % [wordsearch,e,10,1], % [hakank,e,12,1], % [random,nw,4,6] % ] % matrix(4,Matrix,Words) => Matrix = [ [l,w,i,k,i,p,e,d,i,a,f,p], [d,a,u,l,i,x,w,x,d,i,h,r], [i,h,t,c,a,e,f,r,n,t,q,o], [a,l,a,n,e,c,a,d,u,e,r,g], [g,t,b,k,o,w,i,e,z,a,g,r], [o,t,k,d,k,z,l,t,n,h,u,a], [n,h,d,c,s,s,i,d,r,q,t,m], [a,u,a,p,f,k,o,r,r,e,w,m], [l,b,s,u,b,m,m,c,o,n,v,i], [w,o,r,d,s,e,a,r,c,h,w,n], [w,c,o,n,s,t,r,a,i,n,t,g], [h,a,k,a,n,k,q,c,f,o,g,w] ], Words = [ "diagonal", "picat", "wikipedia", "find", "horizontal", "week", "programming", "backward", "sleuth", "vertical", "constraint", "wordsearch", "hakank", "random" ]. matrix(5,Matrix,Words) => Matrix = [ [m,a,r,i,a,k,a,m,s,l,p,m], [a,m,m,i,z,c,a,u,i,j,i,i], [r,i,d,i,i,r,k,s,r,e,e,k], [t,k,a,s,c,r,a,e,g,a,r,a], [i,a,s,o,a,h,t,i,r,n,r,e], [n,e,s,m,l,e,a,o,r,e,e,l], [j,l,j,g,p,a,b,e,x,t,h,a], [m,i,c,h,a,e,l,a,l,t,e,h], [a,n,d,e,r,s,h,x,x,e,n,a], [n,k,q,t,m,a,g,n,u,s,r,k], [j,o,h,a,n,f,o,k,a,j,i,a], [z,f,r,e,d,r,i,k,g,x,k,n] ], Words = []. matrix(6,Matrix,Words) => Matrix = [ [m,a,r,i,a,k,a,m,s,l,p,m], [a,m,m,i,z,c,a,u,i,j,i,i], [r,i,d,i,i,r,k,s,r,e,e,k], [t,k,a,s,c,r,a,e,g,'å',r,d], [i,a,s,o,a,h,t,i,r,n,r,e], [n,e,s,m,l,e,a,o,r,e,e,l], [j,l,j,g,p,a,b,e,x,t,h,a], [m,i,c,h,a,e,l,a,l,t,e,h], [a,n,d,e,r,s,h,x,x,e,n,'å'], [n,k,q,t,m,a,g,n,u,s,r,k], [j,o,h,a,n,f,o,k,a,j,i,a], [z,f,r,e,d,r,i,k,g,x,k,n] ], Words = [ "gård", "håkan", "maria", "maria", "fredrik", "peter", "michael", "anders", "mattias", "johan", "robert", "magnus", "bokus" ]. % % 100 Swedish 10 letter words. % Generated by word_search_puzzle_generate.pi (go5/0) % % placements=[[adoptivfar,w,35,20],[backefiske,e,34,5],[barnablick,w,2,15],[bikupsform,w,1,14],[bloddroppe,w,31,11],[brättdekor,n,36,31],[buddistisk,n,35,34],[changering,e,30,2],[chansering,w,29,11],[dahliesort,sw,15,24],[djävelskap,w,28,11],[driftbolag,sw,16,31],[empirestil,e,36,1],[ententmakt,e,35,1],[essayistik,nw,34,30],[fjortondel,s,26,32],[flörtighet,w,27,11],[frågetimme,e,33,1],[fyrtiendel,ne,34,10],[fyrtiåring,n,32,33],[gammaldans,ne,32,25],[gammeldans,ne,30,19],[gammelpiga,sw,24,31],[gladeligen,ne,11,8],[grissleägg,n,31,36],[gulddouble,se,23,21],[gödselgrep,e,32,1],[hjärteblod,w,26,11],[hopsparing,s,22,35],[jämngammal,ne,32,21],[kamouflage,s,22,20],[klärobskyr,sw,21,24],[koncilians,s,22,1],[konsilians,n,29,14],[kricketlag,w,25,11],[kronjägare,w,24,11],[kyrkobibel,nw,28,28],[käxchoklad,w,23,11],[köttfondue,nw,27,29],[litetgrand,sw,17,24],[litetgrann,ne,27,24],[längsefter,n,28,13],[maniererad,s,18,12],[marschrutt,w,22,11],[morronbris,n,22,15],[morronluft,se,17,21],[morronrock,nw,26,21],[morronväkt,n,21,1],[mänskobild,e,21,1],[mänskoföda,s,12,36],[mästardrag,s,12,35],[nerfarande,w,20,11],[nerfirning,se,16,25],[nerkörsväg,se,16,22],[nerlöpande,ne,20,25],[nermontera,se,14,22],[nerpressad,se,13,23],[nerridning,ne,18,25],[nerrivning,w,19,11],[nerskickad,n,21,16],[nerskrotad,ne,16,25],[nerskruvad,se,12,24],[nerstörtad,se,11,25],[nervittrad,s,11,17],[omhänderha,nw,18,34],[opierökare,s,10,18],[opievallmo,n,18,19],[polisväsen,ne,12,11],[potkäsburk,n,17,20],[präststånd,nw,16,34],[pulvrisera,w,18,11],[påskkäring,n,16,21],[reflektion,w,17,11],[rektifiera,nw,14,34],[sextiåring,sw,6,21],[sjuttondel,ne,14,25],[skafföttes,w,16,11],[skopolamin,sw,4,22],[smittohärd,s,4,22],[smittorisk,n,12,23],[snacksalig,w,15,11],[squaredans,s,2,35],[stjärnehop,ne,10,12],[stjärnelös,nw,10,34],[stjärnetid,n,11,36],[sydjemenit,sw,2,35],[symptomfri,sw,1,34],[taigabälte,se,1,23],[tendentiös,w,14,11],[tiesiffrig,w,13,11],[tillröring,e,12,1],[tjyvlyssna,n,11,24],[tjyvstarta,n,11,1],[tjyvstreck,ne,10,15],[tjyvåkning,sw,1,23],[trettondel,se,1,4],[tröstepris,se,1,3],[tätbebyggd,e,11,1],[åttiårsdag,se,1,2],[ögonflörta,se,1,1]] % numEmptyFinal=323 % % fill=[yestsluodcwoshoonahhauaehuoemytythtfietlreaeiglmordrlmaemyetfsbineyrriesshmiotlyxnfrgesnssioeltmrwtldoealiarroonvbtrlnwalhtcduhnttdehnisorotgfinetnilhresoizhnthytuaehlnosefmaeynhsapwgnstsetipfefewlnlovrmushhsisesatgubpiaerflmsmodintgukeaookoohaurendiushedutoterioeliigfykoneeoannernefnaaiotittataunaoeslhseonidrafdyltsoynea,len=323] % Ö Å T T M R O F S P U K I B _ _ _ _ _ _ P _ T K S _ _ _ _ _ _ _ _ S _ _ % A G T R R K C I L B A N R A B _ N _ _ O _ J C A _ Ö _ _ _ _ _ _ Y _ S D % T _ O T Ö E _ _ _ _ _ _ _ _ _ E _ _ H N Y E K N I _ L _ _ _ _ M _ Y Q I % R _ _ N I S T _ _ _ _ _ _ _ G _ _ E E V R S S S _ G _ E _ _ P _ D _ U T % A _ _ _ F Å T T _ _ _ _ _ I _ _ N S Å T K M I S A _ A _ N T _ J _ L A E % T _ _ _ _ L R E O _ _ _ L _ _ R Ä K S O S I R Y _ R _ B O R E _ E _ R N % S _ _ _ _ _ Ö S P N _ E _ _ Ä V N V P E G T O L D _ E M Ä M Ä D _ D E R % V _ _ _ _ _ _ R D R D _ _ J S I Y O X K N T T V _ N F I E L N J A _ D Ä % Y _ _ _ _ _ _ _ T A I E T I N J L T O R I O T Y A R Å N F O T T T G A J % J _ _ _ _ _ _ _ L A G S L G T A I O M U R H I J I H I T T I O E N S N T % T Ä T B E B Y G G D _ O _ _ M Å N P L B Ä Ä M T N T R T S R T I _ E S S % T I L L R Ö R I N G P _ _ I R D E I L S K R S N _ E U E K T N K D _ M M % K G I R F F I S E I T _ N I S A R E A Ä K D N _ E J R S D D S N E _ Ä Ä % Ä S Ö I T N E D N E T _ N _ I K V R V K S N _ E S R R S I N A Ä _ R S N % V G I L A S K C A N S G _ _ R C I Ö E T Å _ E D R E S R T P Ä _ R _ T S % N S E T T Ö F F A K S _ _ _ B I T K I O P N A R N P R K Ö Ö D H _ P A K % O N O I T K E L F E R K _ _ N K T A P P M H E L M E R L R R R _ M _ R O % R A R E S I R V L U P M C _ O S R R O E L O I R N O R E I U _ T N O D F % R G N I N V I R R E N A R O R R A E L I U T R _ K E N F S _ V N A _ R Ö % O E D N A R A F R E N N E S R E D _ E E E D _ R N Ö T T I S A A _ D A D % M Ä N S K O B I L D _ I T N O N _ S _ T B _ N K O B R S E R A _ D _ G A % K T T U R H C S R A M E F A M _ O _ G K _ I L O O N N S G R N D _ _ H G % O D A L K O H C X Ä K R E I _ R _ R _ A G Ä B L F A L T V L A I G S O G % N E R A G Ä J N O R K E S L T _ A _ R M R U A O D T E U A Ä G _ N _ P Ä % C G A L T E K C I R K R G I _ N _ _ L O K G L L K T T M F A G A I G S E % I D O L B E T R Ä J H A N S D _ _ E B U M I E D I R M Ö M T D F R K P L % L T E H G I T R Ö L F D Ä N _ _ D S _ F _ M T L D A Y M K L R J Å S A S % I P A K S L E V Ä J D _ L O _ N K _ _ L M _ _ S G O E K A _ O O I I R S % A G N I R E S N A H C _ _ K E Y _ _ _ A _ _ _ N I L U M _ _ K R T T I I % N C H A N G E R I N G _ _ I R _ _ _ G G _ _ M _ P Y M B _ _ E T R S N R % S E P P O R D D O L B _ T _ _ _ _ _ _ E _ Ä _ I _ A A _ L _ D O Y I G G % G Ö D S E L G R E P _ R _ _ _ _ _ _ _ _ J _ G _ G _ _ S _ E T N F D _ _ % F R Å G E T I M M E Y _ _ _ _ _ _ _ _ _ _ A _ _ _ _ _ _ S _ T D _ D _ _ % _ _ _ _ B A C K E F I S K E _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ E Ä E _ U _ _ % E N T E N T M A K T R A F V I T P O D A _ _ _ _ _ _ _ _ _ _ R L _ B _ _ % E M P I R E S T I L _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ B _ _ _ _ _ matrix(7,Matrix,Words) => Matrix = [ ['ö','å',t,t,m,r,o,f,s,p,u,k,i,b,y,e,s,t,s,l,p,u,t,k,s,o,d,c,w,o,s,h,o,s,o,n], [a,g,t,r,r,k,c,i,l,b,a,n,r,a,b,a,n,h,h,o,a,j,c,a,u,'ö',a,e,h,u,o,e,y,m,s,d], [t,y,o,t,'ö',e,t,y,t,h,t,f,i,e,t,e,l,r,h,n,y,e,k,n,i,e,l,a,e,i,g,m,l,y,q,i], [r,m,o,n,i,s,t,r,d,r,l,m,a,e,g,m,y,e,e,v,r,s,s,s,e,g,t,e,f,s,p,b,d,i,u,t], [a,n,e,y,f,'å',t,t,r,r,i,e,s,i,s,h,n,s,'å',t,k,m,i,s,a,m,a,i,n,t,o,j,t,l,a,e], [t,l,y,x,n,l,r,e,o,f,r,g,l,e,s,r,'ä',k,s,o,s,i,r,y,n,r,s,b,o,r,e,s,e,i,r,n], [s,o,e,l,t,m,'ö',s,p,n,r,e,w,t,'ä',v,n,v,p,e,g,t,o,l,d,l,e,m,'ä',m,'ä',d,d,d,e,r], [v,o,e,a,l,i,a,r,d,r,d,r,r,j,s,i,y,o,x,k,n,t,t,v,o,n,f,i,e,l,n,j,a,o,d,'ä'], [y,n,v,b,t,r,l,n,t,a,i,e,t,i,n,j,l,t,o,r,i,o,t,y,a,r,'å',n,f,o,t,t,t,g,a,j], [j,w,a,l,h,t,c,d,l,a,g,s,l,g,t,a,i,o,m,u,r,h,i,j,i,h,i,t,t,i,o,e,n,s,n,t], [t,'ä',t,b,e,b,y,g,g,d,u,o,h,n,m,'å',n,p,l,b,'ä','ä',m,t,n,t,r,t,s,r,t,i,t,e,s,s], [t,i,l,l,r,'ö',r,i,n,g,p,t,d,i,r,d,e,i,l,s,k,r,s,n,e,e,u,e,k,t,n,k,d,h,m,m], [k,g,i,r,f,f,i,s,e,i,t,n,n,i,s,a,r,e,a,'ä',k,d,n,i,e,j,r,s,d,d,s,n,e,s,'ä','ä'], ['ä',s,'ö',i,t,n,e,d,n,e,t,o,n,r,i,k,v,r,v,k,s,n,o,e,s,r,r,s,i,n,a,'ä',t,r,s,n], [v,g,i,l,a,s,k,c,a,n,s,g,g,f,r,c,i,'ö',e,t,'å',i,e,d,r,e,s,r,t,p,'ä',n,r,e,t,s], [n,s,e,t,t,'ö',f,f,a,k,s,t,n,i,b,i,t,k,i,o,p,n,a,r,n,p,r,k,'ö','ö',d,h,l,p,a,k], [o,n,o,i,t,k,e,l,f,e,r,k,h,r,n,k,t,a,p,p,m,h,e,l,m,e,r,l,r,r,r,e,m,s,r,o], [r,a,r,e,s,i,r,v,l,u,p,m,c,o,o,s,r,r,o,e,l,o,i,r,n,o,r,e,i,u,i,t,n,o,d,f], [r,g,n,i,n,v,i,r,r,e,n,a,r,o,r,r,a,e,l,i,u,t,r,z,k,e,n,f,s,h,v,n,a,n,r,'ö'], [o,e,d,n,a,r,a,f,r,e,n,n,e,s,r,e,d,t,e,e,e,d,h,r,n,'ö',t,t,i,s,a,a,y,d,a,d], [m,'ä',n,s,k,o,b,i,l,d,t,i,t,n,o,n,u,s,a,t,b,e,n,k,o,b,r,s,e,r,a,h,d,l,g,a], [k,t,t,u,r,h,c,s,r,a,m,e,f,a,m,n,o,o,g,k,s,i,l,o,o,n,n,s,g,r,n,d,e,f,h,g], [o,d,a,l,k,o,h,c,x,'ä',k,r,e,i,m,r,a,r,e,a,g,'ä',b,l,f,a,l,t,v,l,a,i,g,s,o,g], [n,e,r,a,g,'ä',j,n,o,r,k,e,s,l,t,y,a,n,r,m,r,u,a,o,d,t,e,u,a,'ä',g,h,n,s,p,'ä'], [c,g,a,l,t,e,k,c,i,r,k,r,g,i,a,n,p,w,l,o,k,g,l,l,k,t,t,m,f,a,g,a,i,g,s,e], [i,d,o,l,b,e,t,r,'ä',j,h,a,n,s,d,g,n,e,b,u,m,i,e,d,i,r,m,'ö',m,t,d,f,r,k,p,l], [l,t,e,h,g,i,t,r,'ö',l,f,d,'ä',n,s,t,d,s,s,f,e,m,t,l,d,a,y,m,k,l,r,j,'å',s,a,s], [i,p,a,k,s,l,e,v,'ä',j,d,t,l,o,i,n,k,p,f,l,m,e,f,s,g,o,e,k,a,e,o,o,i,i,r,s], [a,g,n,i,r,e,s,n,a,h,c,w,l,k,e,y,n,l,o,a,v,r,m,n,i,l,u,m,u,s,k,r,t,t,i,i], [n,c,h,a,n,g,e,r,i,n,g,h,h,i,r,s,i,s,g,g,e,s,m,a,p,y,m,b,t,g,e,t,r,s,n,r], [s,e,p,p,o,r,d,d,o,l,b,u,t,b,p,i,a,e,r,e,f,'ä',l,i,m,a,a,s,l,m,d,o,y,i,g,g], [g,'ö',d,s,e,l,g,r,e,p,o,r,d,i,n,t,g,u,k,e,j,a,g,o,g,o,k,s,o,e,t,n,f,d,o,h], [f,r,'å',g,e,t,i,m,m,e,y,a,u,r,e,n,d,i,u,s,h,a,e,d,u,t,o,t,s,e,t,d,r,d,i,o], [e,l,i,i,b,a,c,k,e,f,i,s,k,e,g,f,y,k,o,n,e,e,o,a,n,n,e,r,n,e,'ä',e,e,u,f,n], [e,n,t,e,n,t,m,a,k,t,r,a,f,v,i,t,p,o,d,a,a,a,i,o,t,i,t,t,a,t,r,l,a,b,u,n], [e,m,p,i,r,e,s,t,i,l,a,o,e,s,l,h,s,e,o,n,i,d,r,a,f,d,y,l,t,s,b,o,y,n,e,a] ], Words = [ "ögonflörta", "åttiårsdag", "tätbebyggd", "tröstepris", "trettondel", "tjyvåkning", "tjyvstreck", "tjyvstarta", "tjyvlyssna", "tillröring", "tiesiffrig", "tendentiös", "taigabälte", "symptomfri", "sydjemenit", "stjärnetid", "stjärnelös", "stjärnehop", "squaredans", "snacksalig", "smittorisk", "smittohärd", "skopolamin", "skafföttes", "sjuttondel", "sextiåring", "rektifiera", "reflektion", "påskkäring", "pulvrisera", "präststånd", "potkäsburk", "polisväsen", "opievallmo", "opierökare", "omhänderha", "nervittrad", "nerstörtad", "nerskruvad", "nerskrotad", "nerskickad", "nerrivning", "nerridning", "nerpressad", "nermontera", "nerlöpande", "nerkörsväg", "nerfirning", "nerfarande", "mästardrag", "mänskoföda", "mänskobild", "morronväkt", "morronrock", "morronluft", "morronbris", "marschrutt", "maniererad", "längsefter", "litetgrann", "litetgrand", "köttfondue", "käxchoklad", "kyrkobibel", "kronjägare", "kricketlag", "konsilians", "koncilians", "klärobskyr", "kamouflage", "jämngammal", "hopsparing", "hjärteblod", "gödselgrep", "gulddouble", "grissleägg", "gladeligen", "gammelpiga", "gammeldans", "gammaldans", "fyrtiåring", "fyrtiendel", "frågetimme", "flörtighet", "fjortondel", "essayistik", "ententmakt", "empirestil", "driftbolag", "djävelskap", "dahliesort", "chansering", "changering", "buddistisk", "brättdekor", "bloddroppe", "bikupsform", "barnablick", "backefiske", "adoptivfar" ]. matrix(8,Matrix,Words) => Matrix = [ [e,l,l,e,z,a,g,c,h,i,c,k,e,n,b,n,d,o], [d,e,t,b,a,l,l,i,g,a,t,o,r,a,a,a,o,l], [m,e,z,n,a,c,a,t,t,l,e,e,b,l,r,c,t,a], [c,f,e,n,a,r,c,e,s,s,s,a,d,l,r,i,t,f], [h,f,t,r,a,r,r,s,s,o,s,a,o,i,a,r,e,f], [a,a,r,e,p,p,o,h,s,s,a,r,g,h,c,e,r,u], [m,r,h,e,i,r,m,m,w,i,l,d,f,c,u,m,e,b], [o,i,m,l,t,a,a,i,r,f,o,v,i,n,d,a,l,b], [i,g,l,a,l,o,b,e,h,o,e,a,s,i,a,x,u,e], [s,a,b,l,d,i,n,b,b,c,c,r,h,h,r,t,y,l], [r,l,a,h,s,i,f,d,l,o,g,k,r,c,t,l,a,i], [a,r,e,o,g,o,l,d,f,i,n,c,h,e,f,n,n,d], [d,m,n,e,e,p,o,l,e,t,n,a,r,n,t,a,d,o], [d,i,n,o,s,a,u,r,o,x,o,f,o,e,c,l,i,c], [t,n,a,h,p,e,l,e,p,a,l,g,a,i,e,r,h,o], [h,c,a,o,r,k,c,o,c,y,a,t,r,m,o,a,c,r], [f,l,a,m,i,n,g,o,e,r,e,f,a,f,l,o,e,c], [h,a,t,e,e,h,c,h,d,r,a,c,a,r,i,b,o,u] ], Words = [ "aardvark", "alligator", "barracuda", "caribou", "cat", "cattle", "chamois", "chicken", "dinosaur", "dog", "dogfish", "dotterel", "eel", "finch", "fish", "flamingo", "goldfinch", "otter", "ox" ].