"use strict";
const words = "abbau abend abzug achse achte acker adler akten aktie aktiv akute alarm alben album alias allem allen aller alles allzu altar alten alter älter altes ampel ämter amtes anbau angst ankam anruf april areal arena ärger armee armen armut arten ärzte asche asien atmen augen autor autos babys baden bäder bälle bande bands bares basis bauch bauen bauer bäume baute beach beben beide beine bekam beleg berät berge beruf beste beton beute bevor bezog bezos bezug bibel biber biete bitte blank blase blatt blaue blick blieb blind block blume boden bogen bombe bonus boote börse bösen boten boxen brach brand braun breit brief bruch brust buben buche bühne bunte büros busse chaos circa clubs couch dabei dafür daher dahin damen damit danke daran darin darum daten datum dauer davon davor debüt decke deckt deine delta demos denen denke denkt depot deren derer desto dicht dicke diebe dient diese dinge dosen dosis drama drauf dreht drohe droht druck duell dünne durch dürfe dürre ebene echte ecken edeka edlen eilig einem einen einer eines einig einst eisen enden endet engel engen enger enkel enorm erben ergab erich ernst ernte erste essen essig etage etwas eurem euren eurer ewige exakt extra fahne fahrt fährt faire falle fälle falls fällt fände fängt farbe fasst faust fazit fehle fehlt feier feind feine ferne feste feuer figur filme films final finde firma fisch flach flick flüge fluss fokus folge folgt folie forum fotos frage fragt freie freue freut frist frost frühe frust fuchs fügte fühle fühlt führe führt fülle funke gaben ganze gänze gäste geben gebot gegen gehen gehör gehts geist gelbe gelte genau genug gerät gerne geste getan geübt gibts ginge glanz glatt glück götze gramm griff grill gross grund grüne gutem guten guter güter gutes haare haben hafen häfen hagel haken halbe halle halte hände handy hänge hängt harte härte hatte hätte hause hebel heben heime helfe heran herrn herum hetze heute hielt hilfe hilft hinab hinzu hitze hobby hoffe hofft hohem hohen höhen hoher höher hohes höhle holen hölle holte honig hoppe hören hörte hotel hüfte humor hunde hürde hütte ideal ideen ihnen ihrem ihren ihrer ihres ikone immer indem indes index infos innen insel islam jacke jäger jahre jedem jeden jeder jedes jenem jenen jener jenes jetzt joker jubel junge jungs juror kabel kader kalte kälte kamen kämen kampf kanal kante karte kasse katze käufe kauft kehrt keine kenne kennt kette kinos kitas klage klagt klang klare klärt kleid klein klima klose klubs knall knapp knast knopf kodex kohle komme kommt könig könne könnt konto köpfe kopie kraft krank kraus krebs kreis kreuz krieg krimi krise krone küche kugel kunde kunst kurse kurve kurze kürze küste labor lacht laden läden lagen lägen lager laien lange länge lasse lässt latte laufe läuft laune leben lebte leder leere legal legen legte lehnt lehre leine leise lenkt lernt lesen leser leute licht liebe liebt liege liegt liest ligen limit linie linke links liste liter loben lobte lockt logik löhne lohnt lokal lösen löste lotto löwen lücke lügen lunge luxus mache macht magie mahnt malen maler manch marge marke markt maske masse mauer meine meint meist menge merkt messe messi meter miete milch minus misst mitte möbel mobil model modus mögen monat moore moral motiv motor motto mühle musik müsse musst müsst mutig nacht nagel nahen näher namen natur nazis nebel neben nebst nehme nennt netze neuem neuen neuer neues nicht nimmt noten nötig novum nutzt obere obhut offen öfter ohren onkel opfer optik orgel orten osten paare packt paket panik panne papst parat parks passe passt pause pferd pfund phase pixel pläne plant platz pocht pokal preis prinz probe profi promi prüft punkt quasi quote rache radar räder radio rande rasch rasen raten rauch räume räumt recht reden redet regel regen regie reich reihe reine reise reist rente risse rolle rollt roman rosen rosig roten roter rückt ruder rufen ruhen ruhig runde sache sagen sagte sahen satte sätze sauer säule schau schob schon schön schub sechs seele segen sehen seien seine seite senat serie setze setzt sicht siege siehe sieht singt sinkt sinne sitze sitzt sogar söhne solch solle somit sonde sonne sonst sorge sorgt sorte sowie spart spass spiel sport spürt staat stadt stahl stall stamm stand starb stark start statt staub staus stehe steht steil stein stern stets stich stieg still stirn stock stoff stolz stopp stört strom stück stufe stuft sturm sturz suche sucht süden summe super suppe szene tafel tagen tages tante tanzt taten täter tätig taugt teich teile teils teilt tempo tenor tesla tests teuer teure texte thema these thron tiefe tiere tiger tipps tisch titel todes tolle tonne toren total toten töten trage trägt traum traut treue trick tritt trost trotz türen typen übers übrig übung uhren umbau umweg umzug unmut unser unten unter unzen vater väter venus video viele villa viren virus vogel vögel volle vorab voran vorne votum waage wache waffe wagen wählt wahre wände waren wären warme wärme warnt warum weder wegen wehrt weile weise weist weite welle wende wenig werde werke werte wesen wider wiese wieso wille wirbt wirft wirke wirkt wirst wirte wisse witwe wobei woche wofür woher wohin wohnt wölfe wolle wollt womit woran worte wovon wuchs wucht wunde wurde würde würfe wüste zähle zahlt zählt zähne zeige zeigt zelle zeuge zieht ziele zielt zogen zonen zudem zügen zügig zumal zuvor zwang zweck zwölf"
.split(" ")
.map(x => x.toUpperCase());
const validGuesses = "aahhh aalen aalto aasee abaci abbau abdos abeba abela abels abend aberl abert abgab abhob abiys abkam abney abort about abruf abtei abzug achen achja achse achte ächzt acken acker äcker acryl activ adamu adars addis addon adept adern adham adina adler adria adyen aeets aerts aesch affen after again agata agatz agder agent ägide agikb agile agius agrar ahaus ahnen ahner ahnte aires aisch ajsic akeem akika akins akman akten aktie aktiv akute alaaf alamo alana alarm albas alben albis album alcan alcon alder aleix alert alesi algen alias alibi alien align alisa aliti alive alken allah allee allem aller alles allzu almin almke alpha alpin altar altem alten alter älter altes altöl altos alves alvim alvin alway amann amato amell amess ameti amica amine amini aminu ammar ammer among ampel amros amsel ämter amtes anand anbau anbei anbot anden andie andrä andri angab angel anger angst angus anhat anhin anhob anhui anime anjes ankam ankea anker anmer anmut annan annet anouk anruf ansah ansel antal antti antun anuga anvil anzog anzug aorta apart apeel apfel äpfel aping appen april arabi arata arbil arbvg arche areal areas arena argen ärger argos arias ariel arien arike arild arjan arket armed armee ärmel armen ärmer armut arnim aroma aroov array arrow arsch artan arten artig aruba arwag arwen ärzte asadi asahi asche ascot asean ashot asian asien askew aslin asmik aspen aspyr assad assim asten ästen aster atapu atlas atmen atmet atmos atome ätzen aubry audio audit auers augen auhof aukus aulas aunty aures autel autor autos avant avery avira avivs axios ayala aymen ayuso azubi babic babsi babys bachs backe bacon badel baden bader bäder bades badet badio bagel bahls bahnt baida baile baird bakkr baksi balea balfe balga balge balko bälle baloh baloo balor balou bamba banal banas banco bande bände bands bange bangs bangt banja bänke baran bären bares baris barna baron barra bärte barum basar basic basis bässe basta baten bates batka bauch baude bauen bauer bauke bäume baums baute bawag bayat beale beame bears beats beben bebra bebte becom beeke beeko beers beete beetz begab begum beide beige beine beira beitz bekam bekim belag beleg belek belga belli below belur bemer benad bench benfe benin benkö benli benno bente beppo berät berch berge beria berka berme berns berra berta berti bertl beruf besen beste beten beths betis beton betty beule beuse beust beute bevor beweg bewig beyer bezog bezos bezug bfarm bfmtv bhaga bheki bibel biber bichl biege biegt biene biere bieri biers biest biete bihac bijol bikar biken bikes bilal bilde biles billa bills billy bilyk binde bingo birgt birke birne birol birte bison bisop bissl bitar bites bitte bizet bläck blade blake blanc blank blase bläst blatt blaue blaze blech bleib blick blieb bliem blind blini bliss blitz blobs bloch block blöde blogs blood bloom blubb bluff bluhm blüht blume blunt bluse blute blüte bmeia bmvit bngee boals board boban bobby bobis bobst boden böden boese bogen bögen bogey bohan böhme böhmi bohne bojan bojen böker boldt bölke bolli bombe bondy bönen bonga bonne bonte bonus boomi boomt boost boote boots borat borch borde börek borel borga boric borke borre börse borst borza bosau bösch bosco bösel bösen böses bosse bossi boten böten bouli bouna bowie boxen boxer boxes boyle bozen brach bradl braga brain brake brand brass braun braut brave bravo brawn braxx break breda brede breel breen brehm breit breko brenz brest breth brett brezn brief briem brill bring brink brise britz brock broll bronx brook brose bross brote brotz bruce bruch brück brüel brugg brühl bruhn bruin brumm brunn brünn brust bryan bryce brych bubba buben buber buche buchs bucht bucks bucur budde buddy buden buder buemi bueno buffs bügel buggy bühne build bulli bulls bully bülow bulut bunde bunge bunte buoni buono burch burck burda bürde büren bures burgi burka burke bürki burns büros busch busen bushs busse büsst büste busty bwihk bylik byron cable caddy cadet cafes cagan cahal cakir caleb calls camps camus canal candy canoo cantz canun capes capex carat carbo cardi cards carel caren carey cargo carla carle carly carol carty casar cäsar casey cathy catia catie cauca caves cavos cayne ceban ceddo ceibs celje celle cello celta centa cerar cerha cerkl cerne cerro cervo cesar ceuta cevey chaco chain chair champ chana chaos chara chari chase checo chelo child chili chime chloe chong chöre chose chott chrom chuck chung cider cihan cimen cimke cinde cindy circa cisco cisos citan citys civey civic claas claes clair clank clans clark clash class clean clemm clevr cliff climb clint clion clips clive clodi cloke clown clubs clymb cnoll coben cobra cocos coded codes codex cofag cofoe cohen colby colin colli color colts coman combo comes conny conti coole cools copse coren cores corey corsa corse corvi coryx cosby cosmo coste cotar couch coups court covax cover cqhhs crack crazy creas credo creed creek creme crews cried crime crone cross crowd crowe crown cscec ctrip cuban cubes cubus culum cunha cuomo cupra curio curry curse curth curvy cyber cyrus czaja czech dabei dachs dacia dadic dafne dafür dagon daham daher dahin dahme dahna daily dakar dalke damen damer damit dämme damms damon dampf damus dania dänin danke dankt danni danny danso dante danyi daoud dapps daran daria darin dario darko darth darts darum dasch dasso datei daten dates datev datum daube dauer daveu davie davis daviz davon davor davos dawei dawid dayat dayer death debus debüt decin decke deckt deepl deere degag degen degle dehli deich deine dejan dekan dekra delfs delhi delle dello delon delta demae demag demar demba demir demna demon demos demut denat denen deniz denke denkt denny dense depay depot deppe deren derer desax desch desto deula deuts deutz dever devla devon dhein dhünn diada diane diani dibon dicht dicke dicks dider diebe diebl diego diehl diene dient diese dietz diggs dikic dilek dimap dimas dimeo dimon dinge dingo dioum dirks dirty disco ditib dixon djask djuse dobey doboj docht dodik dogge doggs dogma doksy dokus dolby dolce dolch dolen dolic dölle dolls döner donja donzi doors doper doren dorit dorli dorna dorow dörre dörte dosen dosis dpolg drach draft drage drago drags drahi draht drake drama drauf draus dread dream dreck drehe drehs dreht drein drese dress drews drian dries drift drina drink driss dritt drive droge drohe droht drops dropz druck druey drugs druml dsgvo duale ducke dudas dudel duden duell duett duffy dufry dukic dulig duman dumme dünen dunja dünne dunst duplo duran durch dürer dürfe dürft dürre durst dusan dusel dutar duval duvan düzen duzoe dwarf dylan dyson dzeko eagle early earth ebene eberl ebert ebnen ebner ebnet echle echte eckel ecken ecker eckes ecole ecpat eddie edeka edels ederl edgar edina edita edith edlen efcni efron egede egger egils eging eglin egner egypt ehlen ehmke ehren ehrig ehrte ehsan eibes eicar eiche eichs eiern eifer eilen eilig eilpe eilte eimer einar einem einen einer eines einig einst eisen eises eitan eitel eklat ekrem elahi elben elbia elden elder elena elend elfer elfte elgin elias elija elina elisa elise elite eliza eljif ellen ellie ellis elmar elmas elmex eloff elser elspe elton email emami emcke emden emena emine emirs emler emmas emmer empor emran emser emsig enden ender endes endet enemy engel engem engen enger enges engie enkel ennos enoch enorm enten enter enzym epple equal erben erber erbin ercan erceg ercot erdal erden erdil erdöl ergab erhob erian erica erich erika erker erlag erlös ernst ernte erpel error ersin erste ertan ertug ervin erwin esche eseln eshop espen espig essay essen esser essig esten ester etage etats ethan ether ethik etnea etwas etzel euböa eugen euipo eulen eupen eurac eurem euren eurer eutin evans evern evers every eving ewald ewers ewige exakt excel exile exner extra exxon eyach eyyes fabel faber fabia fabio fable fablf facil facts faden fäden faeez fähig fahim fahne fahre fähre fahrt fährt fails faire faith fakes falco falko falle fälle falls fällt false fände fange fängt fanny fanor fanta farah farbe farce fargo faris farke farle farma faruk fasel faser fassi fasst fatah fatal fatih fatma faton fauci fauli fauna faury faust fazio fazit fazzi fedas feder fedez fedor fegen feger fegte fehde fehle fehlt feier feind feine felde fella fells fendt ferdi ferik ferne feroz ferri ferse feste fette feuer fiala fibel fiber ficht fidan fidel field fiese fietz fight figur filaf files filme films filmt filou final finch finck finde finma finne finte fiona firat firma fisch fitch fixen fixes flach flair flaka flash flats fleck fleet fleth fleur flick flirt flock flöhe flood floor flops flora flori flory floss flöte flott fluch flüge flugs flure flury fluss flyer flynn flynt föhre foils fokus foley folge folgt folie fonap fonda fonte foods fööss force förde foren forsa forst först forty forum forza fosse föten fotos fötus fouls foyer foyth frach frage fragt franc frans freak frech frede fredi fredy frees freie fremd fresh freud freue freut frick frida fries frist frith frizz frodl frohe frohn fromm frost frühe frust fuchs fudan fugel fügen fügte fühle fühlt führe führt fülle füllt funda funde funds funke funkt furka fürll furor fürst furth füsse gabby gabel gaben gäben gabor gadot gaedt gaggl gaida galan galau galen galia galla galle galli gamer gamma gänge gangl gangs ganja ganna gänse gansi gantz ganze gänze garay garde gardi garin garip garns garre garrn garry gasag gasen gashi gasly gasse gassi gäste gatin gatte gauff gavin gayle gazoo gbyte gebar gebel geben geber gebet gebot gecko geely geers geert gegen gehen geher gehle gehör gehts geige geist gelbe gelde gelle gelte gemma gemmi gempp gemüt genau genie genki genom genre genth genua genug geoff gerät gerda gerer gerig gerne gerty gesät geste getan getir getty getue geübt geyer gföhl ghana ghani ghose ghost giant gibbe gibst gibts giesa giess gifts giger giggs gigio gilde gille gilli gilly ginge giret girke girls girly gisin gitta gitte given gizeh glanz glatt glaub glawe gleis glenn glich glide glied globe glock gloor glory gloss glück gmund gnade gneis gniot gnome göbel gocht godek goetz gojak göker golfs golla golta golub golze gomez gönne gönnt gooch goode goral goran göran gorch görde gordy görke gorki gosar gosau gössi gössl gothe götti götze gouda grabe grabs grace grade gradl grado graef gräfe grafl grafs grahl grall gramm grant granz grass grath grätz graul grawe grbic grebe greco greek gregs greif greil greiz grend grieg gries griet griff grifo grill grimm grind grint gripp griss griwe grobe grogl grohe groko groll gröll grolm groos gropp grosi grote groth grubb grube gruga grüll grund grüne grupp guard guben gucci guckt guess guete gueye guide guidi gülen gummi gumny gunda günes gunst gunta guoda gurke gurte gurus gusen gustl gusto gutem guten guter güter gutes gutzy güven guzzi haack haard haare haase haben habib hacke häcki hackl hackt hader haefs haema hafen häfen hafer hafte hagai hagel hager hähle hahne hähne hahns haien haifa hailo hajek hakan haken hakim hakte halbe halde haley halil halit halle hallo halme halse hälse halte hamad hamel hamid hamza hanan hände hands handy hanel hanes hänge hängt hanin hanio hanjo hanke hanks hanna hanne hanni hänni hanno hanns hanny hanse hapag haram hardt hardy harfe haris harit harri harte härte hartl hasch hasen hasle häsli haspe hasse hasso hasst haste hater hatte hätte haube haubs hauch hauck hauen hauer hauke hauks häupl haupt hauri hause häute hauth havel havoc haxhi haydn hayek hayes hazel hazte hearn heart heast hebel heben hecke heckl hecla hedge heels hefti hegau hegel hegen heger hegte hehle heide heidt heigl heilt heimä heime heimo heims heine heino heint heise heiss heist heitz helau heldt helen helfe hella helle hello helma helme helms hemer hemmt hende hendl hengl henke henle henna henne henri heraf heran herat herbe herde herkt herms herne heros herrn herta hertl hertz herum herzl hesse hetze heure heuss heute hexen hexer heyer hiebe hielt hiete hikel hilda hilfe hilft hilko hilli hills hiltl hinab hinke hinkt hinze hinzu hiphi hirne hirte hitze hiwot hlnug hobby hoben hocke höcke hockt hoden hoelz höfen hofes hoffe hofft hofko höfli högel hoghe hohem hohen höhen hoher höher hohes höhle höhne hohnl holen höler holle hölle holly holte hölzl homer homes homey honig honjo honor höper hoppe hopps hörde hören hörer horns horse horte hörte hörth horus hosen hotel howes hoyer hoyos hozan hsieh hsver https huang hubig hubuc hufen hüfte hügel hugle hügli hujic hülfe hulio hülle hülse human humor humpe humpl hunde hundt hünen hunts hünxe hürde hurry hurst hürth hurts husby husky husum hüter hutes hütet hütte hwati hymer hymne hynde hypes iauch ibama ibena ibexa ibiza ickes icons idaho ideal ideas ideen idgie idlib idnow idole idols idris iduna iffse igeln ignaz ihnen ihrem ihren ihrer ihres ikeas ikone iliev ilija iliya ilkay ilkka iller ilona iluka ilves ilzer imark imeri imhof imker immen immer immun imola impfe impft imran inaki inban inbev incel indem indes index india indie indiz indra infos inler inlet innen inonu input inrix insel inzko ionen ioniq ipads ipcei ippnw ippon ipsos iraks irans irena irene iress irina irish irmer irren irrer isaac iseli islam isler ismet italo italy items itter ivana ivica ivona ivory iyoha izmir jabel jacek jachs jacht jacke jacky jacob jadar jader jadon jaffa jagen jäger jäggi jägle jagow jagte jahre jährt jaill jaime jaina jakic jakni jalen jalyn jandl janek janet janez janik janka janko janne janni jansa janus jaray jared jaron järvi jaton jatta jauan jaume jause javad javid jeans jecke jedem jeden jeder jedes jeger jehan jeher jehle jemen jenem jenen jener jenes jenke jenna jenny jeong jerez jerry jesch jesse jessi jessy jetzt jicha jilch jimis jimmy jinno jitem jitsi jitsu joana jobst jodie joern joesi johan johna johne johns johny joint joker jokic jokos jolie jolly jonge jonny joona joppe jordi jorio joris jorja josep josha josip josko jossi jovic jozef jübek jubel judäa judas jüdin juice juist jules julie junge jungs junos junta juraj juror jurte jurys jusos juste jusuf juten juwel jwana kabak kabel kacke kader kadir kadri käfer käfig kager kages kahla kahle kahlo kahns kahnt kahrs kahun kainz kaisa kajak kajsa kakao kalan kalff kalle kalli kalte kälte kamar kamel kamen kämen kamil kamin kamor kampf kämpf kampl kanak kanal käner kanes kanon kante kanye kapek kappa kappe kappl karas karat karen kargo kargu karla karli karls karma karoq karst karte kasel käser kasia kasra kassa kasse kastl katek kater käthe kathi käthi katia katie katla katte katze kauen kaufe käufe kaufs kauft kawai kaweh kawhi kayla kbyte keane keanu kebab keesa kegel kehle kehrt keiko keime keimt keine keins keita keith kekse kelen kemal kempe kempf kenan kengo kenia kenne kennt kenny kenst kerbe kerbs kerem kerle kerne kerns kerry kerze kette keule keven khine kicks kickt kiels kiene kiera kiesi kieze kilbi kilic kilos kimia kimme kings kinos kiosk kippe kippo kippt kiran kirby kisan kisch kishi kissa kiste kitas kitco kiter klaba klage klagt klamm klang klara klare klaro klärt klaws klebt kleid klein klemm klenk klete klick kliem klien klier klima klimt kling klöco klode klone kloos klopf klops klose klubs kluck kluft kluge klums klupp klütz knall knapp knast knauf knaus knebl knick knies kniff knill knock knogl knoll knoop knopf knorr knorz knust knuth koala kobbe kobel kober kobes kocak koche köche kocht kodak köder kodex köfer kohle kohli koita kökcü kokri kölbl kolke kölly kölns komax kombi komet komik kömir komma komme kommt kompa kompp kongo könig köniz könne könnt konny konto konze koper köpfe köpft kopie korab körbe korea koren korfu körle korps korso korte korur kosak kosky kospi koste kotak kotau kovac kovar kozak kozek krabi krach krack kraft kraig krake krale krall kräne kranj krank krans kranz krapp krass krätz kraul kraus kraut krebs kredo kreet krehl kreis kreml krenn krenz kreon kreos krepp kreta kretz kreuz krieg krier krimi kripo krise kriss krkic krohn kröll krone kropf kropp kröte kroth krude krüge kruit krule krull krume krupp krups kruso kruth kubam kuban kubas kubau kuben kubes kubin küche kudus kueng kufen kugel kühen kuhle kühle kuhli kühlt kühne kuhrt kujau küken kulis kumar kunde kundl kunis kunos kunst kunze kuoni kuper kupka küren kurse kürte kurth kurti kurtz kurve kurze kürze kürzt kusch küste kutay kuuba kuusi kwitt kwjat kylie kyoko kyrie laack laaer laage label labor lacey lache lachs lacht lacus laden läden lader ladin ladys laers lagab lagen lägen lager läger lagos lagus lahti laien lalas lamar lamas lambo lamia lamin lampe lamya lance lande lände lando lands laner lange länge lanka lanke lanuv lanze laras larch larin lärms lärmt larry laser laske lasse lasso lasst lässt latam later latte latur latza laube lauda lauen lauer laufe läufe lauft läuft lauge laune laute laver lazio leaks leana leave leben leber lebte lecks leder leeds leere legal legen legte lehar lehne lehnt lehre lehrt leibe leica leide leier leihe leila leina leine leise leitl leitz lemgo lemke lenin lenkt lenne lenny lentz leoni lepke lerch lerne lernt leroy lesch lesen leser lesum letzt leuna leung leupi leute leven levin levit leyte lgbti lhstv liane lichs licht liddy lidel lider lidia liebe liebi liebt liefe liege liegt lienz liere liese liest lieth lifte ligen light ligue likar likör lilie lille lilli lilly lilys limes limit linas lindt liner lines linie linke links linna linse linus lippe lirim liska liske lissi liste liszt liter lives livia livno lizzy llano lloyd lluis lobau löbau lobby löbel loben lobes lobte local lochs lockl lockt locus loder loewe lofts logik login logos lohne löhne lohns lohnt lohse loich loidl loipe loire lojze lokal longi lonza looks loong loose lorca lords lorey loris lösen loser löser lossa löste lotte lotti lotto lotus loved lover lovis löwen lowes löwin lowry loyal lozza luana lubbe lübbe lübke lucci lucha luchs lucia lucic lucid lucio lucke lücke lucki lückl lucky luden luder lufen lüfte lügde lügen luger luigi luisa luise luisi luitz lukko lukov lumen lumix lunar lunch lünen lunge lunte lupin lürig lusin lütge luthe lüthi lutze lutzi luwig luxus luzia luzie lvmpd lybra lynch lyons lyric lyrik lyxor maack macao macau mache macho macht macke macos macsf mädel maden mader mäder mades mädge madin madre mafia magen mager mages maggy magic magie magix magst mähen mahir mahlt mähne mahnt maike maina maine maire maite majer majid major makej makel maker malek malen maler maley malik malle malli malmö malta malte maman mambu mamic mamis manch mandl mandy manet mania manko manne manni manns manor manta mantl manus maodo marca march marcs marek maren marge mariä marib maric marin märit marke markl markt marla marne marry marta marti marty marvi marzu mäser maske mason masse matej mateo mateu matip matte matth matus mauel mauer mauro mäuse mavic mavis maxim mazda mäzen mazin mbabu mbyte mcfit mdoro meals mebis medan medic meere meers meets meeuw megan meide meike meiko meile meine meinl meins meint meise meist meitz mekka melde melek melka melle memes menas mende menge menor mensa menüs menzi merci meret merge merke merkt merle meryl meryn mesch mesec messe messi mesto mesut metal meteo meter metro mette meury meute micha michi micro mieck miele miene miese miete mihai mikel mikes mikis mikks mikro milad milan milch milde miles miley miliz milke milko milla mills milos milow mimen mimik mimis minaj minas mincu minen miner minim minko minos minus mirai mirco mirko miron misel misha misic missa misst misto mitch mitja mitoh mitte mixed mixen mixer mlens moana möbel mobil mobir model modul modus moers moeti mögen möges mogge moise moizi mokka molde molga molly momoa monat mönch monde mondt money monot monse montt monza moore moose moost moped morad moral moray morde morey moria morir moris morse mörse mörth morty morzg mosel möser moses moshe motel motiv motor motsi motto mound mount movie mowas möwen moyes moyos mozzi mross mubea mucho mucic mücke mucks müden müder mühen mühle mulch mulde mülln mülls mumia mumok munar munas munch münch munde mündl mundo munsy münze murad murat murau murch murgh murks murot mursi musaj musan müsen muser musik musks müsli müsse musst müsst mutes mutet mutig mutti mütze mvogo mwene myint mysql nabil nacho nacht nackt nadel nader nadia nadja naeem nafes nagel nägel nagen nager nagle nagls nahen nähen naher näher nähme nährt nähte naive najam namen nancy nanda nanny naomi narbe nasen nasko nasri nasse nässe nasty natur nauen naura nautl navid navin naxos nayib nayla nazan nazis ndsvm ndure nebel neben nebst nedim neele neeva neffe neger nehme nehmt neige neigt neise nekia nekic nelio nelly nenad nenne nennt nepal nerve nervt nesch nessa nessy nette netto netze netzt neuem neuen neuer neues neuss neuwo neven never nevis nexta nexus ngere niaid nicht nicka nicki nicky nidal nidum niels niere niers niger nigma nigra nihad nikic nikon nikos nimes nimmt nimue ninia ninja nitin nitro nivea nixon nizza nneke noack noale noble nobuo noemi noffz noise nokia nolan nolte nomad nomos nonne nooke noori nopal noppe norek norma notar noten nöten notes nötig notiz novel novum nowag nowak nqmiy nreal nsame nsdap nübel nueva nüsse nutze nutzt nützt nylon öamtc oanda obere obert obhut ocean ocker odell oelde oesch offen öffis öffne ofner öfter oggau ogier ohira ohlen ohren okapi okuma olafs oleds olivi olivo ollie olsen olten olymp olzem omaha omari omdia omgus ommen onkel ooyen opels opera opern opfer opitz opium opoku oprah optik orden order organ orgel orhan orion orlen orlik orlov oromo orpha orsay orsoy orten ortes ortet oruro osaka oskar osman osram osten ostro otcqb other otmar ottes ottos outen outet owain owega owuor owusu oxfam oybin özcan ozean paare paars pacht packs packt pacte padua pahde paidy paket pakts paleo palfi palle pallo pally palme palou pampa pampe panda panel panik panke panne panoz pansi panta paolo papas papen paper papis pappe papst parat parks parkt pärli parma parth parts pasek pasha passe pässe passt pasta patel pater patil patti pauke paula paulo pauls pause pavao pavel pavia pavlo pawel payet payne pbefg peace peaks peaky pearl pears pedal peder pedri pedro peene pegel peggy peine peker pekny pelke pembe pendl penis penna penne penny pense pentz peper pepic peppi percy perle perry perth perus pesch petar petit petri petry petto pfade pfadi pfads pfaff pfahl pfalz pfand pfeil pferd pfiff pflug pfuhl pfund phase phone photo piano piaty pickl picks pieke pieks piels piers piggy pilar pille pilze pines pinka pinke pinky pinot pints piotr piper pipes pippi pique pirat pirlo pisar pisse piste pivot pixar pixel pizza pizze place plage plaid plane pläne plank plans plant plata plate platt platz playa plaza plebs pleso pletz plgbc ploss plötz plume plump pocht poems pogba poged pohle pokal pokel polak poldi poley polin polka polle polls pöltl pölzl pongo ponys pools pooth popal popek popov porco poren porta porte porth porto ports posch posen posse posta posts potro potse pötte pound pozzo prack prada prags prägt prahl praia prall präsi prass pratt prein preis prenn preos press prevc price pride priel prien pries prima print prinz prise priti probe probt profi proju proll pröll promi pronk prosa prost protz proud proxy prüfe prüft prütt psaki pudel pudlo puhhh pulga pulle pulli pulse pumas pumpe pumps punks punkt puppe puppy purer pures purge pusht pussy puste puten puter putzo puurs pyhra pylon pyrit qaani qatar qnaps quade qualm quara quasi queer quent quere quest quick quiet quinn quito quoos quote qvnia raaba raban rabat rabbe rabbi rabea rabes rache rächt rackl radar radde radek raden rader räder radew radio radke raeto rafal raffl ragaz raggi ragte raguz rahim rahlf raico raids rains raisi raita rally ramaj ramen rammt ramon ramos rampe ranch rande rands randy range ränge ranum rapex rappi rapps rares raron rasch rasen raser rasha räson rasse rasta raste rasto ratas raten räten rates rätin ratio raube rauch rauen rauer rauhe raulf rauma räume raums räumt raupe raupp raute raves raymi razer reach react ready reale realm realo reben recep recht recma recon reden reder redet reese reeve regal regel regem regen reger reges regie regio regmi regte rehak rehna rehrl reich reife reihe reime reine reins reise reiss reist reitz reize reizt reker remmo rempp rendl renee rengg renke rennt rente renzi renzo repin reset resin reske ressa reste rethy rette reuss reute reuth revil revue rexer reyer reyna rhede rheon rhode ricas ricci richy ricky rider ridge ridje ridle rieck riedl riege rieke rieks riesa riese riess right rilke rille rinas rinde rindt ringe rings ringt rinke rinne rioja risch rishi risop risse riten ritmo ritus ritzi river riyad robak robbe röbel roben röber robra rocca rocco rocha roche rocks rockt rocky rodde rodel roden roder röder rogan rogen rogge rohan rohde röhle rohöl rohre röhre rohrs rojas rokas rolex rolle rollo rollt roman romed romig ronan ronen ronny rooms roque rosam rösch rosel rosen roses rosig rosin rösli rösti rotem roten roter rotes rotor rotte rotts rouen rouge rough rouse rover rowan rubel ruben rüben rüber rubio rückt rudel rüden ruder rueda ruedi ruefa rüegg rufen rufer rufus rügen ruger rügte ruhen ruhig ruhla rühre rührt ruiss rukla rules rülke rumba rumex rumms rumpf runde runge ruoss rüpel rurik ruser russe russo ruten rüter ruzil ryouy ryoyu ryugu saadi saale saals säbel sabir sable sabre sacha sache säcke sacra saded sadev sadiq safes safin säfte sagan sagen sager säger sagte sahar sahen sähen sahib sahin sahne sahra saied saier saint sainz saite sajid sakic sakko salah salam salär salat saldo saleh salem sälen salez salim salma salon salve salvo samba samek samen samih samir samra samui samus sanaa sande sands sandu sandy sanft sanka sanna santo sanya sapri sarma sarno sasha sassy satan satte satya sätze sauce saudi sauer saugt säule sauna säure sause saust saxer sayed sbisa scala scale scans scape scewc schaf schal scham schar schär schau scheu schob schon schön schub schuf schuh schul scoop scoul scout scuol sechs sedum seele seems segas segel segen seger sehen sehne sehnt seidl seien seife seile seils seine seite seitz sejan sekte selbe selby selen selge selim selke sella selor semej semih semir semke semmi senat sende senft senkt senna senne senol senta seoca seone seong seoul seper sepia seppi sergi serie serra sertl serum sesam sette setup setze setzt seuss seven sevim seyit sfard shane share shaul sheer shell shift shine shiny shira shire shirt shoah shoko shops shori short shows shuai shuan shufu sibiu sicht sidle sidlo siege siegi siegt siehe sieht siena sigma signa siham sihpu sikma silas silos simap simba simma simsa sinan sinch sinem singe singh singt sinkt sinne sinti sions sippe siren siria sirup sisis sissi sitch sitta sitte sitze sitzt sjmcc skala skoda skore skype slack slate slawi slide slöba slots small smith smoke smoor smudo snack snake snape snips snoop sobhi socar soddy soden soest sofia sofie sogar sohle söhne sohns sojus sokol solar solch solid solja solle sollt somit somju sonac sonde sonia sönke sonne sonny sonos sonst sonys soooo sopra sören sorge sorgt soros sorry sorte souls sousa south souza sowas sowie soylu spacs spain spalt späne spann spare spark spart sparv spass späte späti spdji speak speck specs speed speer spezi sphen spice spiel spies spiez spind spins spint spion spitz split spohr sport spötl spots spott spree spreu spukt spüle spüre spurs spurt spürt spyra squid sreto staab staad staal staar staat stäbe stabs stach stacy stadl stadt stäfa staff stage stahl stahr stalf stall stamm stamp stand stani stans starb stari stark starr start stasi statt staub staus staut steak steck steel steff stege stegs stehe steht steig steil stein stele stell steop stern stete stets stich stick stief stieg stiel stier stiff stift stihl stile still stils stimm sting stint stipe stirb stirn stoch stock stoff stohn stöhr stoke stole stoll stolp stolz stone stopp stops storm stört storz stoxx stoye stree strem strip strix stroh strom stube stuck stück study stufe stuft stuhl stuhr stumm sturm sturz stute style suada suben suche sucht sucre süden sugai sugar suhls suite sujet sulza summa summe sumpf sunak sünde super süper supes suppe susan sushi suter svend sweep sweet swico swift swirl sword sykes synco syria szabo szene szenk szöcs tabak tabea tabus tacho tacke tadao tadej tadic tafel taffe tagen täger tages taghi tahar tails taiwo takes takkt talks talon talos tamim tampa tande tanga tango tanks tanna tanne tante tanuj tanya tänze tanzt tanzu tapie tappe tappt targa tarif tarik tarot taser tasse taste tastl tatar taten täten täter tatha tätig taube taufe taugt tavor taxis tbyte tebas techs tecne teddy teens tegut teich teigl teile teils teilt teint tekin telfs telis temiz tempi tempo temps tenji tenne tenor tepco teppe terme terra terry tesla teste tests tetra teubi teuer teufl teure texte texts thain thais thang thanh thani thank thaur thaya thees theis theke thema these theus thiaw thies thilo think third thoma thore three thron thuis thumb thurn thwet thyra tiana tibet tibor tichy tickt tiede tiefe tiefs tiere tietz tiger tiley tilia tilla tilly timmy timon tinte tinto tipis tipps tippt tiril tisax tisch titel titus titze toben tobse tobte tocoa today toden todes toggo tojoy tokat token tokic tokyo tolle tölle tomac tomas tomer tomic tommy tomsk tönen tonic tonis tönis tonne tönte toone töpfe töppi toran toray torch toren tores torso torte torun torzi tosso total toten töten toter totes touch tours tourt tower towns toxin track tracy trade träfe träff trage träge trägt trail train trais trakt trams träne trank trans trapp trash traub traue traum traun traut trays treff treia trenn trete treue trial trias tribe trick trieb trift trigg triki trios trips tritt troll troms tropf tross trost trotz trübe truck truex trügt trupp trust truth tsang tubbo tubes tuchs tudor tuffi tufts tülay tulpe tulsa tümay tumor tuner tunes tunis turbo turck türck türen türke turku türme turms türmt tusch tusks tutar tüten tutsi tutti tuure tvnow tweed twice twins twint twist twizy tyler typen typus tyson übers üblen übrig übten übung udaya udine udnes udssr ueber ufern uhlig uhren uibel ukena uljas ulmen ulmer ulsan ultra umami umbau umher umweg umzug under unfug ungar unger unhcr uniqa units unity unkel unken unmut unnas unrat unrwa unser unten unter unvar unwto unzen üppig urahn urech urins urnen urner urtyp usaid usain usama uschi usern usher uslar usopc uster utica utoya uttar uzwil vaart vacme vader vadim vaduz vaiou valie valle vally valor value valve vance vande varas varey varga varta vater väter vedad vedes veeva vegan velis vella velos venlo venmo venom venus veran verde verge verne verti verve vespa vestl vetos vevey vevia vials vibes vicco vicky vidal video vieja viela viele viert vieru vifor vigna vilas vilim villa vimeo vince vinci vinke vinyl viola viper viral viren virus visen visum vital vitra vitus voest vogel vögel voges vögte vogts vogue voigt voitl volke volle volme volvo vorab voran vorne voser voten votum vreni vural vytal waadt waage wache wachs wacht waden wafer waffe waffg wagen wäger wagte wähle wählt wähnt wahre waibl waits wajan walch waldi walls wally waltz wampe wanda wände wandt wange wanne waqas waren wären wares warin warme wärme warnt warst warte warum wäsch wasen waser waste wastl water watts watzl wawra waymo wayne wazir wecks weckt wedau wedel weder weerd wefer wefox wegen weges wehen wehle wehrt wehry weich weida weide weile weils weilt weine weint weise weist weisz weite weitz welby welch welke welle wells welpe welsh wempe wende wendt wenig wenns werde werft werke werks werne werte werth werts wesen weske wesna wespe wessi weste wette wewer weyer weyhe whats wicht wickl wider widow wieck wiege wiegt wiehe wiese wiesn wieso wight wikis wilde wildi wildt wiler wiley wilfa wille willy winde windl winds wingo wirbt wires wirft wirke wirkt wirst wirte wirth wirtz wisag wisch wisla wisli wisps wisse wisst witch witte witwe witze wobei wöber woche wodka wofür wogen woger woher wohin wohne wohnt wojsa wolde wolfe wölfe wolke wolle wolli wollt wolze woman women womit wonne woods woody woolf woran wordt worin works worms wörns worte worth wörth worum wosch wovon wovor wrack wrage wrath wrynn wuchs wucht wücks wuhan wuhle wulff wümme wumms wunde wurde würde würfe wurst würtz würze wüste wüten wütet wyler xamax xaver xenia xerox xinyi yacht yahoo yaime yakin yanar yangs yanqi yaris yates yeliz yeska yetim yigal youan youth ystad yukon yulin yunus yusuf zabel zadic zähen zäher zähes zahir zahle zähle zahlt zählt zahnd zähne zankl zapag zarbl zarco zaren zarif zarka zarte zäsur zaugg zäune zauns zazzo zdeno zeche zecke zehra zeige zeigt zeile zeiss zeitz zelda zelle zelte zeman zenit zepai zerch zeroe zeuge zeugt zheng zicai ziege ziehe zieht ziele ziels zielt ziert zipse zirka zitat zitek zitti zivil zoals zofen zogaj zogen zohra zolla zölle zolls zollt zonen zoner zones zonta zoran zorns zorro zorzi zosel zosen zoten zovoo zsolt zuber zucht zuckt zudem zuffi zugab zügel zügen zuges zügig zuljs zumal zumas zumba zummo zunge zupke zutat zutun zuvor zuzug zwang zweck zweig zweit zweng zwick zwist zwölf zyste "
.split(" ")
.map(x => x.toUpperCase());
const valid = "abcdefghijklmnopqrstuvwxyzäöü".toUpperCase();
function xmur3(str) {
for(var i = 0, h = 1779033703 ^ str.length; i < str.length; i++) {
h = Math.imul(h ^ str.charCodeAt(i), 3432918353);
h = h << 13 | h >>> 19;
} return function() {
h = Math.imul(h ^ (h >>> 16), 2246822507);
h = Math.imul(h ^ (h >>> 13), 3266489909);
return (h ^= h >>> 16) >>> 0;
}
}
function mulberry32(a) {
return function() {
var t = a += 0x6D2B79F5;
t = Math.imul(t ^ t >>> 15, t | 1);
t ^= t + Math.imul(t ^ t >>> 7, t | 61);
return ((t ^ t >>> 14) >>> 0) / 4294967296;
}
}
const LOCALSTORAGE_KEY = "qwörtle.data";
let saveData = JSON.parse(localStorage.getItem(LOCALSTORAGE_KEY) || "{}");
function saveLocalStorage() {
localStorage.setItem(LOCALSTORAGE_KEY, JSON.stringify(saveData));
}
const inputAmount = document.getElementById("puzzles");
const NUMBER_OF_WORDS = Number(inputAmount.value) || 4;
const daysSinceEpoch = Math.floor(new Date()/8.64e7);
const startDay = 19046;
const daysSinceStart = daysSinceEpoch - startDay + 1;
const rngSeed = NUMBER_OF_WORDS === 4 ? daysSinceEpoch : (daysSinceEpoch*daysSinceEpoch*NUMBER_OF_WORDS);
const rng = mulberry32(rngSeed);
const chosenWords = [];
for (let i = 0; i < NUMBER_OF_WORDS; i++) {
while (true) {
const idx = Math.floor((rng() * words.length) % words.length);
const chosen = words[idx];
if (chosenWords.indexOf(chosen) !== -1) {
continue;
}
chosenWords.push(chosen);
break;
}
}
const WORD_LENGTH = 5;
const MAX_GUESSES = 5 + NUMBER_OF_WORDS;
const URL = "https://studwww.informatik.kit.edu/~s_keller/qwörtle/";
const guessed = [];
let input = "";
const data = [];
const solutions = [];
const done = Array(NUMBER_OF_WORDS).fill(false);
let shareText = "";
function gameOver() {
for (const el of solutions) {
el.style.display = "block";
}
const NUMBERS = "0️⃣1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣8️⃣9️⃣";
const FAIL = "❌";
const SOLVED = "✅";
const ANY = "⬜";
const POSITION = "🟨";
const CORRECT = "🟩";
const DONE = "⬛⬛⬛⬛⬛";
let text = "";
text += "Tägliches Qwörtle #" + daysSinceStart + "\n";
let summary = "";
for (let i = 0; i < NUMBER_OF_WORDS; i++) {
if (done[i]) {
if (done[i] <= 9) {
summary += NUMBERS.slice(done[i] * 3, done[i] * 3 + 3);
} else {
summary += SOLVED;
}
} else {
summary += FAIL;
}
if (i % 2 === 1) {
summary += "\n";
}
}
document.getElementById("summary").innerText = summary;
document.getElementById("summary").style.display = "block";
text += summary + URL + "\n";
for (let i = 0; i < NUMBER_OF_WORDS / 2; i++) {
for (let j = 0; j < MAX_GUESSES; j++) {
const rowA = data[2*i * MAX_GUESSES + j];
const rowB = data[(2*i+1) * MAX_GUESSES + j];
let part1 = "";
let part2 = "";
for (let k = 0; k < WORD_LENGTH; k++) {
if (rowA[k].classList.contains("correct")) {
part1 += CORRECT;
} else if (rowA[k].classList.contains("wrong-position")) {
part1 += POSITION;
} else {
part1 += ANY;
}
if (rowB[k].classList.contains("correct")) {
part2 += CORRECT;
} else if (rowB[k].classList.contains("wrong-position")) {
part2 += POSITION;
} else {
part2 += ANY;
}
}
if (done[2*i] && done[2*i] <= j) {
part1 = DONE;
}
if (done[2*i+1] && done[2*i+1] <= j) {
part2 = DONE;
}
if (part1 === DONE && part2 === DONE) {
break;
}
text += part1 + " " + part2 + "\n";
}
if (i % 2 === 0) {
text += "\n";
}
}
shareText = text;
document.getElementById("share").style.display = "block";
}
function desktopShare() {
const textarea = document.getElementById("copyarea");
textarea.style.display = "block";
textarea.value = shareText;
textarea.select();
document.execCommand("copy");
setTimeout(() => {
textarea.value = shareText; // not sure why this is needed..
}, 0);
}
document.getElementById("share").addEventListener("click", () => {
if (navigator.clipboard) {
navigator.clipboard.writeText(shareText);
document.getElementById("copied-to-clipboard").style.display = "block";
} else {
desktopShare();
}
});
let keys = {};
let characters = [];
for (let i = 0; i < NUMBER_OF_WORDS; i++) {
characters.push({});
}
function makeGradient(a, b, c, d, allNope) {
const CORRECT = "rgb(0 204 136)";
const POSITION = "rgb(255 204 0)";
const OTHER = "rgb(156, 163, 175)";
const color = {
"correct": CORRECT,
"position": POSITION
};
if (allNope) {
return "rgb(21 94 117)";
}
const style = "conic-gradient(" +
(color[b] || OTHER) + " 0deg," +
(color[b] || OTHER) + " 90deg," +
(color[d] || OTHER) + " 90deg," +
(color[d] || OTHER) + " 180deg," +
(color[c] || OTHER) + " 180deg," +
(color[c] || OTHER) + " 270deg," +
(color[a] || OTHER) + " 270deg," +
(color[a] || OTHER) + " 360deg)";
return style;
}
function processKey(e) {
if (e.key === "Enter" && guessed.length < MAX_GUESSES) {
if (input.length < 5) {
console.error("input not long enough");
return;
}
if (validGuesses.indexOf(input) === -1) {
console.error("word not in list");
return;
}
for (let pos = 0; pos < NUMBER_OF_WORDS; pos++) {
if (done[pos]) {
for (let i = 0; i < WORD_LENGTH; i++) {
const el = data[pos * MAX_GUESSES + guessed.length][i];
el.className = "cell done";
}
continue;
}
let used = [];
let hints = [];
let word = chosenWords[pos];
for (let i = 0; i < WORD_LENGTH; i++) {
// check whether character i of input is correct
if (word[i] === input[i]) {
hints[i] = "correct";
used[i] = true;
characters[pos][input[i]] = "correct";
}
}
for (let i = 0; i < WORD_LENGTH; i++) {
// check whether character i of input is positioned incorrectly
if (hints[i]) {
continue;
}
for (let j = 0; j < WORD_LENGTH; j++) {
if (used[j]) {
continue;
}
if (input[i] === word[j]) {
hints[i] = "position";
used[j] = true;
if (characters[pos][input[i]] !== "correct") {
characters[pos][input[i]] = "position";
}
break;
}
}
}
for (let i = 0; i < WORD_LENGTH; i++) {
if (!characters[pos][input[i]]) {
characters[pos][input[i]] = "nope";
}
}
for (let i = 0; i < WORD_LENGTH; i++) {
const el = data[pos * MAX_GUESSES + guessed.length][i];
if (hints[i] === "correct") {
el.className = "correct cell done";
// add count for easy mode
const count = word.length - word.replaceAll(input[i], "").length;
if (count > 1) {
const counter = document.createElement("span");
counter.className = "counter";
counter.innerText = count;
data[pos * MAX_GUESSES + guessed.length][i].appendChild(counter);
}
} else if (hints[i] === "position") {
el.className = "wrong-position cell done";
// add count for easy mode
const count = word.length - word.replaceAll(input[i], "").length;
if (count > 1) {
const counter = document.createElement("span");
counter.className = "counter";
counter.innerText = count;
data[pos * MAX_GUESSES + guessed.length][i].appendChild(counter);
}
} else {
el.className = "cell done";
}
}
if (input === word) {
done[pos] = guessed.length + 1;
for (let char in keys) {
if (word.indexOf(char.toUpperCase()) === -1) {
characters[pos][char.toUpperCase()] = "nope";
}
}
}
}
guessed.push(input);
if (daysSinceEpoch in saveData) {
saveData[daysSinceEpoch].guesses.push(input);
} else {
saveData[daysSinceEpoch] = { guesses: [input] };
}
saveLocalStorage();
input = "";
for (let char in keys) {
if (char.length > 1) {
continue;
}
const c = char.toUpperCase();
let anyNotNope = false;
for (let i = 0; i < NUMBER_OF_WORDS; i++) {
anyNotNope |= (characters[i][c] && characters[i][c] !== "nope");
if (anyNotNope) {
break;
}
}
if (anyNotNope || (characters[0][c] === "nope" && characters[1][c] === "nope" && characters[2][c] === "nope" && characters[3][c] === "nope")) {
let allNope = true;
for (let i = 0; i < NUMBER_OF_WORDS; i++) {
if (characters[i][c] !== "nope") {
allNope = false;
break;
}
}
keys[char].style.background = makeGradient(characters[0][c], characters[1][c], characters[2][c], characters[3][c], allNope);
if (allNope) {
keys[char].style.color = "#fff";
keys[char].style.opacity = "0.5";
} else if (anyNotNope) {
keys[char].style.color = "#000";
}
}
}
if (guessed.length == MAX_GUESSES || done.indexOf(false) === -1) {
gameOver();
}
return;
} else if (e.key === "Backspace" && input.length > 0) {
for (let pos = 0; pos < NUMBER_OF_WORDS; pos++) {
data[pos * MAX_GUESSES + guessed.length][input.length - 1].innerText = "";
}
input = input.substring(0, input.length - 1);
} else {
if (e.key.length > 1) {
return;
}
const key = e.key.toUpperCase();
if (valid.indexOf(key) === -1) {
console.error("invalid key");
return;
}
if (input.length == 5) {
console.error("input full");
return;
}
for (let pos = 0; pos < NUMBER_OF_WORDS; pos++) {
if (done[pos]) {
continue;
}
data[pos * MAX_GUESSES + guessed.length][input.length].innerText = key;
}
input += key;
}
const validGuess = input.length < 5 || validGuesses.indexOf(input) !== -1;
for (let pos = 0; pos < NUMBER_OF_WORDS; pos++) {
if (done[pos]) {
continue;
}
if (!validGuess) {
data[pos * MAX_GUESSES + guessed.length][0].parentElement.className = "row invalid";
} else {
data[pos * MAX_GUESSES + guessed.length][0].parentElement.className = "row";
}
}
if (input === "GIGAQ") {
document.getElementById("secret-options").style.display = "block";
}
}
document.addEventListener("keydown", processKey);
// setup keyboard
const layout = [
"qwertzuiopü",
"asdfghjklöä",
["Backspace", "y", "x", "c", "v", "b", "n", "m", "Enter"]
];
const keyboard = document.getElementById("keyboard");
for (let i = 0; i < 3; i++) {
const row = keyboard.children[i];
for (const c of layout[i]) {
const button = document.createElement("button");
if (c === "Backspace") {
button.id = "backspace";
button.innerHTML = '';
} else if (c === "Enter") {
button.id = "enter";
button.innerHTML = '';
} else {
button.innerText = c.toUpperCase();
}
button.className = "key";
button.addEventListener("click", e => processKey({ key: c }));
row.appendChild(button);
keys[c] = button;
}
}
function createGameGrid(container) {
for (let pos = 0; pos < NUMBER_OF_WORDS; pos++) {
container.appendChild(createWordle(chosenWords[pos]));
}
}
function createWordle(word) {
const x = document.createElement("div");
x.className = "wordle";
for (let i = 0; i < MAX_GUESSES; i++) {
x.appendChild(createRow(data));
}
const solution = document.createElement("span");
solution.className = "solution";
solution.innerText = word;
x.appendChild(solution);
solutions.push(solution);
return x;
}
function createRow() {
const x = document.createElement("div");
x.className = "row";
const cells = [];
for (let i = 0; i < 5; i++) {
const cell = document.createElement("span");
x.appendChild(cell);
cell.className = "cell";
cells.push(cell);
}
data.push(cells);
return x;
}
const main = document.getElementById("main");
createGameGrid(main);
let wideOpt = document.getElementById("wide");
if (saveData["wide"] !== undefined) {
wideOpt.checked = saveData["wide"];
}
function setWideMode() {
saveData.wide = wideOpt.checked;
if (saveData.wide) {
document.body.classList.add("wide");
} else {
document.body.classList.remove("wide");
}
saveLocalStorage();
}
wideOpt.addEventListener("change", setWideMode);
setWideMode();
let countOpt = document.getElementById("count");
if (saveData["count"] !== undefined) {
countOpt.checked = saveData["count"];
}
function setCountMode() {
saveData.count = countOpt.checked;
if (saveData.count) {
document.body.classList.add("count");
} else {
document.body.classList.remove("count");
}
saveLocalStorage();
}
countOpt.addEventListener("change", setCountMode);
setCountMode();
// load previous run
if (daysSinceEpoch in saveData) {
const guesses = saveData[daysSinceEpoch].guesses.slice();
saveData[daysSinceEpoch].guesses = [];
for (const guess of guesses) {
for (const c of guess) {
processKey({ key: c });
}
processKey({ key: "Enter" });
}
}