--!name Word Search
--!icon game
--!category Puzzles
local af="Animals:TIGER LION ZEBRA GIRAFFE ELEPHANT MONKEY PANDA KOALA RHINO HIPPO CAMEL BEAVER BADGER OTTER WOLF BEAR MOOSE LEOPARD CHEETAH GORILLA KANGAROO LEMUR SLOTH JAGUAR BISON|Ocean:WHALE DOLPHIN SHARK OCTOPUS SQUID CORAL REEF TIDE WAVE SEAWEED CRAB LOBSTER STARFISH JELLYFISH OYSTER CLAM SHRIMP TURTLE SEAL WALRUS URCHIN PLANKTON CURRENT HARBOR LAGOON|Birds:ROBIN EAGLE FALCON HAWK OWL PARROT PIGEON SPARROW HERON CRANE STORK PELICAN PENGUIN SWAN GOOSE DUCK WREN FINCH MAGPIE RAVEN CROW TOUCAN OSTRICH FLAMINGO PUFFIN CANARY|Fruit:APPLE BANANA CHERRY GRAPE LEMON MANGO ORANGE PAPAYA PEACH PEAR PLUM KIWI MELON LIME APRICOT COCONUT FIG GUAVA LYCHEE OLIVE QUINCE DATE PINEAPPLE TANGERINE RAISIN|Vegetables:CARROT POTATO ONION GARLIC PEPPER CELERY CABBAGE LETTUCE SPINACH TOMATO RADISH TURNIP PEAS BEANS CORN LEEK KALE SQUASH PUMPKIN BROCCOLI PARSNIP BEET OKRA ZUCCHINI ARTICHOKE|Space:PLANET COMET ORBIT GALAXY NEBULA METEOR ROCKET SATURN JUPITER MARS VENUS MERCURY NEPTUNE URANUS PLUTO MOON SUN STAR ASTEROID ECLIPSE CRATER QUASAR PULSAR COSMOS TELESCOPE ASTRONAUT|Weather:RAIN SNOW HAIL SLEET FOG MIST CLOUD STORM THUNDER LIGHTNING WIND BREEZE GALE TORNADO HURRICANE DRIZZLE FROST RAINBOW SUNNY HUMID MONSOON BLIZZARD DEW CYCLONE DROUGHT|Sports:SOCCER TENNIS GOLF HOCKEY RUGBY CRICKET BASEBALL BOXING ROWING SKIING SURFING CYCLING ARCHERY FENCING JUDO KARATE SAILING DIVING POLO BOWLING CURLING SQUASH NETBALL LACROSSE MARATHON|Music:PIANO GUITAR VIOLIN CELLO FLUTE DRUM TRUMPET HARP BANJO OBOE TUBA CLARINET MELODY RHYTHM TEMPO CHORD SONG CHOIR OPERA JAZZ BLUES TROMBONE HARMONY CONCERT LYRICS ORCHESTRA|Flowers:ROSE TULIP DAISY LILY ORCHID POPPY IRIS VIOLET PEONY LILAC DAHLIA MARIGOLD SUNFLOWER LAVENDER JASMINE PANSY CROCUS LOTUS BLOSSOM PETAL STEM SEED BULB DAFFODIL CLOVER|Trees:OAK MAPLE PINE BIRCH WILLOW CEDAR ELM ASH BEECH SPRUCE FIR CYPRESS REDWOOD SEQUOIA POPLAR ALDER HOLLY JUNIPER MAGNOLIA PALM BAMBOO BAOBAB ACACIA HAZEL LARCH YEW|The Body:HEART BRAIN LUNG LIVER KIDNEY STOMACH ELBOW KNEE ANKLE WRIST SHOULDER FINGER THUMB SKULL SPINE MUSCLE TOOTH TONGUE EYEBROW CHIN NOSE CHEEK THROAT HIP RIB|Clothes:SHIRT SKIRT DRESS JACKET COAT SCARF GLOVES MITTENS SOCKS SHOES BOOTS SANDALS HAT CAP BELT TIE VEST SWEATER HOODIE JEANS SHORTS PAJAMAS APRON UNIFORM BLOUSE CARDIGAN|Jobs:DOCTOR NURSE TEACHER FARMER BAKER CHEF PILOT SAILOR POLICE LAWYER DENTIST PLUMBER PAINTER WRITER ACTOR SINGER DANCER JUDGE MINER BARBER TAILOR ENGINEER ARCHITECT FIREFIGHTER LIBRARIAN|Transport:CAR BUS TRAIN TRAM TRUCK BICYCLE SCOOTER MOTORBIKE TAXI FERRY SHIP YACHT CANOE COACH SUBMARINE AIRPLANE HELICOPTER GLIDER BALLOON ROCKET SUBWAY TRACTOR VAN WAGON SLED|Kitchen:SPOON FORK KNIFE PLATE BOWL CUP MUG KETTLE TOASTER OVEN FRIDGE PAN POT LADLE WHISK GRATER BLENDER SPATULA COLANDER TEAPOT NAPKIN APRON SINK STOVE MICROWAVE|Camping:TENT CAMPFIRE LANTERN COMPASS MAP BACKPACK HIKE TRAIL CABIN CANOE FISHING FOREST RIVER LAKE STARS MARSHMALLOW KINDLING FLASHLIGHT HAMMOCK THERMOS AXE ROPE BOOTS CANTEEN TARP|On the Farm:COW PIG SHEEP GOAT HORSE CHICKEN ROOSTER DUCK TURKEY DONKEY BARN TRACTOR HAY FIELD FENCE SILO PLOW HARVEST WHEAT BARLEY OATS ORCHARD STABLE FARMER LAMB CALF|Castles:KNIGHT KING QUEEN PRINCE PRINCESS DRAGON TOWER MOAT DRAWBRIDGE THRONE CROWN SWORD SHIELD ARMOR BANNER DUNGEON JESTER WIZARD LANCE HORSE CASTLE FORTRESS SQUIRE TURRET GATE|Science:ATOM MOLECULE ENERGY GRAVITY MAGNET LASER PROTON NEUTRON ELECTRON PHYSICS CHEMISTRY BIOLOGY FOSSIL GENE CELL PLASMA OXYGEN CARBON HYDROGEN FORCE LENS PRISM MICROSCOPE ELEMENT THEORY|Desserts:CAKE COOKIE MUFFIN PIE BROWNIE CUPCAKE DONUT PUDDING TART FUDGE CANDY TOFFEE CUSTARD WAFFLE PANCAKE SUNDAE SORBET CARAMEL MERINGUE ECLAIR CHOCOLATE VANILLA CINNAMON SPRINKLES ICING|Colors:RED BLUE GREEN YELLOW PURPLE ORANGE PINK BROWN BLACK WHITE GRAY SILVER GOLD BEIGE MAROON NAVY TEAL CRIMSON SCARLET INDIGO VIOLET MAGENTA TURQUOISE AMBER IVORY|Rocks and Gems:DIAMOND RUBY EMERALD SAPPHIRE PEARL OPAL TOPAZ JADE AMETHYST QUARTZ GRANITE MARBLE BASALT SLATE CHALK FLINT CRYSTAL GARNET AGATE ONYX GEODE PUMICE OBSIDIAN LIMESTONE AMBER|At Home:KITCHEN BEDROOM BATHROOM ATTIC CELLAR GARAGE HALLWAY STAIRS WINDOW DOOR ROOF CHIMNEY PORCH BALCONY CURTAIN CARPET SOFA TABLE CHAIR SHELF LAMP MIRROR CLOSET PANTRY FIREPLACE|School:PENCIL ERASER RULER NOTEBOOK BACKPACK TEACHER DESK CHALK LESSON RECESS LIBRARY HOMEWORK SCIENCE HISTORY MATH SPELLING CRAYON GLUE SCISSORS BINDER LOCKER EXAM GRADE STUDENT PRINCIPAL|Bugs:ANT BEE WASP BEETLE BUTTERFLY MOTH CRICKET GRASSHOPPER LADYBUG DRAGONFLY FIREFLY TERMITE MOSQUITO FLEA LOCUST CICADA HORNET APHID MANTIS EARWIG SPIDER SCORPION CATERPILLAR WEEVIL GNAT|Winter:SNOWMAN SLED SKATES MITTENS ICICLE FROST BLIZZARD CHIMNEY COCOA FIREPLACE SCARF IGLOO PENGUIN POLAR SNOWFLAKE AVALANCHE WREATH CANDLE SLEIGH GLACIER TOBOGGAN PINECONE FLURRY WINTER QUILT|Countries:CANADA MEXICO BRAZIL PERU CHILE FRANCE SPAIN ITALY GERMANY POLAND NORWAY SWEDEN EGYPT KENYA INDIA CHINA JAPAN NEPAL TURKEY GREECE IRELAND PORTUGAL VIETNAM AUSTRALIA MOROCCO CUBA|Beach:SAND SHELL TOWEL BUCKET SPADE SUNHAT SUNSCREEN SANDCASTLE SURFBOARD LIFEGUARD PIER DUNE PALM CRAB WAVES KITE COOLER UMBRELLA PICNIC SEAGULL TIDE PEBBLE SNORKEL FLIPFLOPS SEASHORE"local L="0BKVG@L5GT@BR0HG7J=H=5=>PF4K>6A1=INEGE9IU>H?@:HH>JDKL2:N8B3:I62G74F?77<QBF7CD41EE><8D7J?3H3AP3FJHG827;4B@PAE=33BC>4=E295:@HO4H22G7R62<A:L:CF4?G2@C<8RFH>@0@5I2QHK0;:83BL439FEOG<?73R>H>A?06>5R930G@6DF8719BL>6AU5AO:K7F1@764J;<1@9D54RCH0<1C:B>32J4@4B5L8II>G9D<22=FP>J44@:D<@AB<C145DH9>=JBCH4F@2=A?@<16J0J6F?26C5ELD:<I>4<@FL<?L>@A?1F03IL5G0:LNI8@;:7R57PBF8?1JFKGE?B0@Q3=021AGAP<;3S778G5REB>3::H305<89JN1G4>34=;?T2<B:=L9KT3CF@13B2B430>EN57N>7JW>E562AC8@A>H4B=;KV:E2HA>3AW?HD>B:@AIF8I7:>>70P3=897S;395@4@51J@D0B?0G=T8L><BS65J=HG0AHDITAE5B;7HC=NF5:46:731:=II:9@=20I6B8734KT0CPFJFG@F<GD68@2=GB4R7?7C19P;AFGD6@DTH5H?G<E3QD;0=BF>2ADGK0F;2<CP@LN2<H?BF9BR:940CT3>SEALM3>P5=LHGF860?8O:A018G6IO0A9FG4PEAGA<W9?068S?HOH2RB384=856RGHG<6HF;H84@PEBT7LM5D6A8T<=9D>2HH4R?24;=L==K:0BG221H@DDGF;VE5AI<4PE@W67B;EW@3@3EO>FVC8JH;N0:GJ63TDA>31D74BC7HF1JBILADN5BB1@0K8?FD812KV058CL5@DV=@:A3@I6T3AFL9;DF2RC3BE<950J2GD03@<1:;8N=C@0DG>C6SAC8<9R;FT:?W2:B8806B01C>1<1B1A@F??3ANC3I0HG5L=B?P6G47<T2;@D6@E2K>H5A9I782HAB0:6D@DB4AL3?>PD932>QH3J55P4128C2;L5E2P:1<4CBV8887:H0G61<Q3=155A=:?EA@>305BED8KFC?@<2:0746H?E12?JV94:@3L6E?8=IVHBV?3B8@P;5HC7H0B3<D41H@7=K6F?0DFO7:P?=K98@17@A190A>>5@8EE6FAWHFH2AO0B58;N:@F9EE@5:7?>9GC8;EO=BLH@:7>P:7PCJ4A<F9<:5:@:=BLA:BE?291LD5RH80G788237@:0@0;4<Q;?RA<A==5>E<@<J91S7:FCCID3J<IGMDAPB<@FFWC4P26D0AR4KN@12?0:=G2@FG>E><<J>D>V=CP?FNC?:85HA<N>@:0?LFBF7DDLGFE28094J=HN8LLF=H?@H6C?7D8:G:C0E4EK7>KO2?G4<B1G4@?J@18TC0B:822KV;>N>K69;6FE<EBBAAI06C?86DB0R=1;2J5D<03C2?HU1?JBE9DAC5>DN9>=338D2<5<@@0J=:C:?0CF5::F88K798D7:@<>56>@49BC<90E2D7884E6E4B55@;0:C<91GD=:THAR8=AEF78E?GB0BD=6>?C2D47F>=;><9H@4BF8HO3?0F::24P@BN>3HDD0=:776T1=0G132=?T0828F0GJNB:RC9W9KN:1L@I0H3@WBKTC809328:021J70HA<7>B76FTIFEP7JG9<@40:8A>DAHG74BDT5?U14KJ>78?12974E><0:A4:Q2C>G9Q8?A:C8KGG6F2P:3J;<715:9GL57RB<V7L=<FFL7JH69D83JA:2@FL36RB0J4BD1D4DL504LF381;1:EFV98:7I@23@=AR?GT>=V1=0@;0Q3?7G2HA:IH>@44B21R?GF:=B2GD6<7H;;452@I::E3@0BF11R=EO4EV3G94>8R65J1;47;;<D80:C3EP8C4@CO4GCVD6<BA878K;KV9K03GD:5QAI0?895B;48FF5<@D?V=@=:2@1?Q23H>;NA7@6AGEH>WG;<32R@GLB?82A?<C640QF5C7GCPHJO<FO::88:KE>W38@4@R2BC>LE8;?064:GJO1B0HKD3D0BLF?J>49D7=;9<H0=;2@L67BU88L2;;A6<D@13690FN:B31;00>>GE3:FA?8F>2=;C0B6CPIJ<;F@46F78<B1=1<?7EK==DL@GU9:DH;6<AH@E:2G9:;>O63@D2J:EE81B<64=KF=H72:5B;8T04Q7BT6I>1@PB3Q>>N56R>502C0@<?<2CV9B48CR3CT04Q17HFHG?@;J??HDBT==@><Q0JOF<I9F86:R<CR@A2Q@A@15J3>WC?G7;:<D4H;9=5P4>:A5006APG=29?ICID>@B=@EH8L77G<0:B?HF@>H5DLAID;EDC7R6@B20B1KUHD6CB6R14:3=:A=U21BHJ56<?50BDBB=LEDD2PBE>>1JAK7;KO1I0??:60R90@8;DEAC?B:B;DD42:C9<5@>G?69EH2<?<1JF05J:BE2FV<=0;3A97BEKGDF0=6RCD=G27R>DE6JH;2J0BVF2H?=0319<8JD7JH4<P?;:B;35BN<JF:3806R@JND8B66:IFJH4EH9I6:CG60R?IT3=?AD8=H8224J<GE@D@4?>ABLG:8F5@279HHN=<9;C>KE6BHF7F7Q:94C<@66L4@K>9P?E><FGLG2@68B99PH7Q@@C>BR4?V??1:5P08A0409D<@3CWCB<56<:<79GF8GL0>21381E52FB<1C8;3:DB7C2P43R02R7::?=H273RIGUBED5GN>D?93AA2P3K@D8S@?D3?0H1AHDI>20J6;:4JWAKV=@K:K4E<74H<@DAF0C?;882D?=1C>01F>@EL4?;J5H5A<4P0GN7KGF5:E=43EE29J:@M?A26>9H982?948C@CEP3=:6?@29J:>Q4B>7H2;G2259P;0J?APEJ=8@WAK6B<:2>=8IGD;9CFJG6HF8?T><89L>55B@E;:HP9;2JG08@784>=?F@5B3CHH93H1?2F5J:ABD;<R<F8D50?C8@3SH302=:CEN0G7;5J5BCP?CO;;C6CW<<O>0P0AR7<12:U<A:86D75:923204P888>84462<L7=IH=GC@H5:2>@7@L@52?H03B<0BE6BNA3R>>3:7>@E5:BH>D38<IN473GG0;=8:3<?B42A:075A?CPC<8=;63?O42;FJV551@3G<GHVB;:FD@9<00:TEAVHE6492D5RA5FNECW;F0F9H2?749<:12D95?@>0?ABE6C?7HG:80G>3<RFAP<EV;AQC<BB9:C:788B675:942AG4?124H><LM5BJE6:DD2BGJGA9I52J49C<2H>7@=J4@6R:=BEFHFE8R>934H7=?P94;H<07?R:CT0<NF8LD3EHF7B@J5:7PH=R6D>>=D?BFC:VG2K?=IV5=JE4B7IE874C<B3KNAI<:1BHHE44I6;0:=8R<;L04:96;83D@>FEH7I<><;I68AF:G<G3JD9<?08A18HIL23HJ>>4912DDV06:<2@=5J;@P8?25=:1>6KEL58?0HH8B4:;DE2B59L40:QA@23=HL72PGG>H43FDD3>>57HE582:CDB8<:P0A=0BIV<9BG;KHD7E=4F?F6@R@2A?DT1<K09K6>8K@=1GG6ABL5>ABJW6<S8I=2F9<2@5E126I6HG>CEW8<R:0P?E4=C53FJP>;BB?BH?:CB858J<8H9EF;JO=884C2:8<QB6:6F@48:9>Q52H119<4:@?Q5IILC=B;FGD92G?T6;D55B47H1>G@2R6EHG=<HD8S;38780@7I3?D1I557B0:Q76G===2F8TD4QCLL@G47LM9<B13I0748E4P11L2B6=J6<D8A=L?CGB=?DB:CK59<ED>J>BAPH7R::T8=4E3J3CFDBF6L7:B0@=?74?V>AO5?>3641<0G;T:3B6;9;:CF45TA<18?B17J3FHCB2D@2G3:HGA<I327:1HHP33:B=RC@216CF8A@FV??:=F9<EHG<43D60=0B8I6900C2@4;T1:I>@JP79:?::E3A5DT62HA72=0SHA91DS?H828EN:AU2J@GH8EFG1=B;8R67T<=9@?LMA5B5I62LF:IF;5@>K<8C878K6B<AA389=N85PG@<B89H:A3<HI9217A<5OB81:4=D98S>:TD@6:@P=>J1;BH9<7C9CF12BA035IG1L;7A219@@BCEP>8207ODF7PBA77DFE4B244C@W66JH:@07T3DAEC6R;I8D?I3;:G5Q8:?@;C69E1=A?64FGHF0EVA=D<CW;7QB;:4501927AT5:0GHKF>GE1;2FE64EHGAU?C@B3:@B190SH3L=GEP5F71>JCK?F942:@7=0A96>KGI7A0E2I83@@EDB@DC1C>7A5I>=8A14;J?82EEH6?03J@C7H7C8@GUBC4:KHH0JKG4QDG41I=50243;>G7?A0=@26GNIEFL8A0AA>C6DB6R1:O>3A=?2?8W:4:;BJ030J;8<24PH3<F2369J9:SEA?:3@=;U1;D81FV3K7C1R>9B@6:H<IGANA9::5@2<J4E=JB>IH=<05:A<V83<1A0?D@3G03?:R6B02>:08I5LEC2HAIE3I6:=V@HH4DCN72B0FM3GLA@:10:=6JF<R?9<>>@5C=<=I=0F77<:6FH:?N2;T11B9K7?9B6A5JH=;?=2;LDC3J6K?@121B223HFBB7G9:HAH:<QFJO<;L?EW1H8AK@042B6L8I43F:H<:B2@>1<20>439DA818JG@4R9>4<@=8:1S49P2729FV38@DA:0=AEEP:AC>=JH9>RE>NFI4H:B@:0C?77<T02A;:C642Q950=8H0;3@DD3<H78UC:>G7T<I0@;?8EG>HFM98T:?22130HH8A8F2P=E4<<AP99:@<77=B8AV38A4;FB786AR>?HP6:R5=JCAO4<H99Q;3S85P:B:03J?A;JCAP?KN7DTD:K>JV9BJ4K>58Q6L4@?E<AF6@6L:4;C0@3:I8AS<420;0HAJA6?@F=RGJ69B=C6<>AFB:K278@867B:B86JEC4?KNFAV3:8D<RAJH6BB=9<7<9C:4JB748CG12AG9R75I2G>E2<=3H0HUDDLFG7PF3R=0BC4:?9B@GT1HF:E48=6EE=:5LE>8J36JDAUG0:9:B284<69150FFE>86S@<H03@<DDA8C45J1B@CB<531G;K?6I616:?7P4ANE0AB7R<H8C;BDD8H35BG7I56210B@2HC9<0IF87B9<B2J@I<5R:D7G;2?DE@FTC?6A7B=;85JN07FJE5R67P<:SB>JA?1@1JF3853;HHP;HGKE9QFA05IT:I?2;J1HF7D6@:R4K63?HL800GC>C5P54:>3@2@;1G<:B2D=>0=H047HD42B0RGFG8:V0E6@4P7=F?IE>CR1=74E4:9@FD?F41821<?HL80:B4K7>N2G4J70BF08;2QIG>9;2CKN@:9=;KDE63G7R>9476J17IHHV0748D8<0RE>4;>A4H9BG?8B225?M:K7;6J2J6@5R<AHE5K5H7:8F05;:4=<G3A=A6EI030HA@B9KO6>8RE<@GJPDH@=9;B>P0BT:DO5D5<G0768:;H@D=B5HF@JH3<J9=77>=4=92IU8;DNG5@66J=38DDU?DMB?C3CH7H0CJN9<30G@V=EF7AGC;L892?8S1@56FNF0I:B82<@P59PGC8?:A18;8<F35T6>H:<2;?=JAHHF<JEA?89P6AJ<=01=R25:DK7<AF@3:9B9Q5@B97J:6RCB:1=J@DB?@;=G0BH2H2AN0IDDAH??N=6JCD>18H>L>>@2:>30D322<8<19=1@G5HH@F0?=F8:?H1TB;:@HH39V2>IE9H15:FF7;?M<?J@1;32:RGHP;=B9KFFH7E>3=BJ6K4DE0A5K0E5@;D64A8>BB:E2@<JD3R?38<A<B5:J@01>C?G8T0F@<KNC392F>;KH1<8CFGV;<J9I732A<HGH:S?<F5IGCHUDI@DB?0<JG40Q7=LEA@AJ@;6<95S0<739OEFEDAHOB=R47RC1J;I0=8@8C4@FP6FNFG5@36::>GEF0;5R>7ID>@?:FBH>79QGH0:>3L=0B5:@76:FBTG803?KAL5:8VHHJHB8J408:F@=@<F9B7>IAHO>9262<IFJN9;<4HFEB>;CHDI>H:N2HP1?207RJ9EW>FV?3R0=K7J>C324;BGF6=KU81JKHF@9J6B:20GE;6C>0R67R7=A?1K@;1L74L6GF9G>H4JF0HE?0B?24F6?5:<;2"local f,B,Y=12,10,31 local j=#L//Y local ae="!$%&()+,-0123456789:;<=>?[]^_`abcdefghijklmnpqrstuvwxyz|~"local ac="EEEEEAAAAIIIIOOOTTTNNNSSSRRRLLLDDCCUUMMPPGGBBHHFFYWWKVXZJQ"local aw={1,1,0,-1,-1,-1,0,1}local ax={0,1,1,1,0,-1,-1,-1}local X=(1<<B)-1 local ad=5*f+6 local K={}local I,aO=0,""local H,V={},{}local r,o,l=0,ad,nil local y,t,m,u="menu",1,1,nil local p,q,i={},{},0 local function aA(c)local F=os.date("*t",c)return os.time({year=F.year,month=F.month,day=F.day,hour=12})//86400 end local av=os.time({year=2026,month=1,day=1,hour=12})//86400 local function aQ()local c=os.time()if not c or c<1700000000 then return nil end return(aA(c)-av)%j+1 end local function at(a)return L:byte((a-1)*Y+1)-47 end local function aP(c)local d,x=0,{}for _ in af:gmatch("[^|]+")do d=d+1 if d==c then for A in _:match(":(.*)"):gmatch("%u+")do x[#x+1]=A end return x end end return x end local function M(b)return 1<<(b-1)end local function O()return r==X end local function ar(S)local b=0 for d=1,B do if S&M(d)~=0 then b=b+1 end end return b end local function W(a)I,i=a,a local aI=(a-1)*Y local c=at(a)local x=aP(c)aO,H,V=K[c],{},{}for b=0,B-1 do local D=aI+2+b*3 local A=x[L:byte(D)-47]local z=(L:byte(D+1)-48)*40+L:byte(D+2)-48 local aj,F=z//8,z%8+1 local n,g,al=aj//f,aj%f,{}for d=1,#A do local h=(n+ax[F]*(d-1))*f+g+aw[F]*(d-1)+1 H[h],al[d]=A:sub(d,d),h end V[b+1]={w=A,c=al}end local e=a*7919+13 for h=1,f*f do if not H[h]then e=(e*1103515245+12345)%2147483648 local s=(e>>16)%#ac+1 H[h]=ac:sub(s,s)end end r=p[a]and X or q[a]or 0 o,l,u=ad,nil,nil y="play"end local function Z(am)for b=0,j-1 do local a=(am-1+b)%j+1 if not p[a]then return a end end return am end local function aH()if i==0 then return Z(1)end if p[i]or q[i]then return Z(i%j+1)end return i end local function aL()local b=0 for a=1,j do if p[a]then b=b+1 end end return b end local function U()local E={}for d=0,(j-1)//6 do local z=0 for s=0,5 do if p[d*6+s+1]then z=z|(1<<s)end end E[#E+1]=string.char(48+z)end local h={}for a,S in pairs(q)do if#h<40 and not p[a]then h[#h+1]=a.."="..S end end snail.save("W1|"..i.."|"..o.."|"..table.concat(E).."|"..table.concat(h,","))end local function aF()local e=snail.load()if type(e)~="string"then return end local w,g,E,h=e:match("^W1|(%d+)|(%d+)|([^|]*)|(.*)$")if not w then return end i=math.min(tonumber(w),j)for d=1,#E do local z=E:byte(d)-48 for s=0,5 do if z&(1<<s)~=0 and(d-1)*6+s+1<=j then p[(d-1)*6+s+1]=true end end end for a,S in h:gmatch("(%d+)=(%d+)")do a=tonumber(a)if a>=1 and a<=j then q[a]=tonumber(S)&X end end return tonumber(g)end local function an(C,D)local ai,ah,az,ay=(C-1)//f,(C-1)%f,(D-1)//f,(D-1)%f local P,N=az-ai,ay-ah if P~=0 and N~=0 and math.abs(P)~=math.abs(N)then return nil end local aE=math.max(math.abs(P),math.abs(N))local aN=P>0 and 1 or P<0 and-1 or 0 local aK=N>0 and 1 or N<0 and-1 or 0 local c={}for d=0,aE do c[#c+1]=H[(ai+aN*d)*f+ah+aK*d+1]end return table.concat(c)end local function aG()if not l then l=o;return end if o==l then l=nil;return end local e=an(l,o)if not e then u="Not a straight line";return end local n=e:reverse()l=nil for b,v in ipairs(V)do if e==v.w or n==v.w then if r&M(b)~=0 then u=v.w.." is found already";return end r=r|M(b)if O()then p[I],q[I]=true,nil u="Solved! All "..B.." words found"else q[I]=r u="Found "..v.w end U()return end end u=(#e>12 and"That"or e).." isn't on the list"end local function aq()local c,ab={},aQ()if i>0 and i~=ab and not p[i]and q[i]then c[#c+1]={"cont",i}end if ab then c[#c+1]={"today",ab}end c[#c+1]={"next",aH()}c[#c+1]={"pick"}return c end local function aJ(b)if b=="top"then if l then l=nil;return end U()y,t="menu",1 return end if O()then if b=="ok"then W(Z(I%j+1));U()end return end local n,g=(o-1)//f,(o-1)%f if b=="ok"then aG()elseif b=="left"then g=(g-1)%f elseif b=="right"then g=(g+1)%f elseif b=="up"then n=(n-1)%f elseif b=="down"then n=(n+1)%f end o=n*f+g+1 end function key(b)if y=="menu"then if b=="top"then return end u=nil local c=aq()if b=="up"then t=(t-2)%#c+1 elseif b=="down"then t=t%#c+1 elseif b=="ok"then local Q=c[t]if Q[1]=="pick"then y,m="list",math.max(1,i)else W(Q[2]);U()end end return end if y=="list"then if b=="top"then y="menu"elseif b=="up"then m=(m-2)%j+1 elseif b=="down"then m=m%j+1 elseif b=="left"then m=math.max(1,m-10)elseif b=="right"then m=math.min(j,m+10)elseif b=="ok"then W(m);U()end return end u=nil aJ(b)end local function aM()local ap,aC={},O()for b,v in ipairs(V)do if r&M(b)~=0 then for ag,h in ipairs(v.c)do ap[h]=true end end end local as={}for n=0,f-1 do local c={}for g=1,f do local h=n*f+g local w=H[h]local d=w:byte()-64 if h==o and not aC then c[g]=ae:sub(d,d)elseif h==l then c[g]=ae:sub(26+d,26+d)elseif ap[h]then c[g]="{"..w.."}"else c[g]=w end end as[n+1]=table.concat(c)end return table.concat(as,"/")end local function ao(aD,x,k)local e=aD for ag,A in ipairs(x)do local a=e.."  "..A if#a>40 then k[#k+1]=e;e=A else e=a end end k[#k+1]=e end local function aR()local R,G={},{}for b,v in ipairs(V)do if r&M(b)~=0 then G[#G+1]=v.w:lower()else R[#R+1]=v.w end end table.sort(R)table.sort(G)local k={}if#R>0 then ao("Find:",R,k)end local a=#k if#G>0 then ao("Found:",G,k)end if#k>5 then for d=#k,a+1,-1 do k[d]=nil end k[#k+1]="Found: "..#G.." words"end return k end local function T(a)return"Puzzle "..a..": "..K[at(a)]end local function aa(a)if p[a]then return" - solved"end if q[a]then return" - started"end return""end local function aB()snail.title(T(I))local ak=ar(r)local J=u if not J then if O()then J="Solved! All "..B.." words found"elseif l then local e=an(l,o)J=e and"Selected: "..e or"Not a straight line"elseif ak==0 then J="OK on the first letter of a word"else J="Found "..ak.." of "..B end end snail.status(J)snail.board(aM())for ag,w in ipairs(aR())do snail.small(w)end if O()then snail.hint("BACK menu  OK next puzzle")elseif l then snail.hint("BACK cancel  OK last letter")else snail.hint("BACK menu  OK first letter")end end function draw()if y=="play"then return aB()end if y=="list"then snail.title("Pick a puzzle")local au=math.max(1,math.min(m-6,j-12))for a=au,math.min(j,au+12)do snail.row(T(a)..aa(a),a==m)end snail.hint("BACK menu  OK open  L/R 10  UP/DN move")return end snail.title("Word Search")local c=aq()if t>#c then t=1 end for d,Q in ipairs(c)do local C,a=Q[1],Q[2]local e if C=="cont"then e="Continue: "..T(a).." ("..ar(q[a]).." of "..B..")"elseif C=="today"then e="Today: "..T(a)..aa(a)elseif C=="next"then e="Next: "..T(a)..aa(a)else e="Pick a puzzle"end snail.row(e,d==t)end snail.gap()snail.small(aL().." of "..j.." puzzles solved.")snail.small(#K.." themes, from animals to outer space.")snail.small("Find each word across, down or on a diagonal, either way round.")snail.hint("BACK leave  OK open  UP/DN move")end function start()for _ in af:gmatch("[^|]+")do K[#K+1]=_:match("^[^:]+")end local g=aF()if i>0 and not p[i]and q[i]then W(i)if g and g>=1 and g<=f*f then o=g end end end
