"use strict";
const words = "abbau abend abzug adler akten aktie aktiv akute alarm album alias allem allen aller alles alles allzu alten alten alter alter älter altes ampel ämter amtes angst anruf april areal arena ärger armee armen armut arten ärzte asien augen autor autos babys baden bande bands basis bauch bauen bauen bauer bäume beach beben beide beide beine bekam berge beruf beste beste beute bevor bevor bezog bezos bezug biete bitte bitte blatt blick blieb blume boden bogen bombe börse brach brand braun breit brief bruch brust buben bühne bunte büros busse chaos circa clubs couch dabei dabei dafür dafür daher daher dahin damen damit damit danke danke daran daran darin darin darum darum daten datum dauer davon davon davor davor debüt decke deckt deine delta denen denke denkt deren deren desto dicht diebe dient diese diese dinge dosen dosis drama drauf dreht droht druck duell durch durch dürfe ebene echte edeka einem einem einen einen einer einer eines eines einig einst enden endet engen enger enorm ergab erich ernst ernst ernte erste erste essen essen etwas etwas exakt extra fahrt fährt falle falle fälle falls falls fällt fängt farbe fasst faust fazit fehle fehlt feier feste feuer figur filme films final finde firma flick flüge fluss fokus folge folgt forum fotos frage frage fragt freie freie freue freut frist frust fuchs fügte fühle fühlt führe führt funke gaben ganze ganze gänze gäste geben gegen gegen gehen geist gelbe gelte genau genau genug gerät gerät gerne getan ginge glück götze gramm griff griff grill gross grund grüne grüne gutem guten guten guter gutes gutes haare haben haben hafen hagel haken halbe halle halte hände handy hängt harte hatte hätte hätte hause heben helfe heran herrn herum hetze heute heute hielt hilfe hilft hinzu hinzu hitze hobby hoffe hofft hohem hohen höhen hoher höher hohes holen holte hören hörte hotel humor hunde hürde ideal ideen ihnen ihnen ihrem ihrem ihren ihren ihrer ihrer ihres ihres immer immer indem indes index infos innen insel jäger jahre jedem jeden jeden jeder jeder jedes jedes jenem jenen jener jenes jetzt jetzt jubel junge junge jungs kabel kader kalte kälte kamen kämen kampf kanal karte kasse katze kauft kehrt keine keine kenne kennt kinos kitas klage klang klare klärt kleid klein klein klima klubs knapp knapp kohle komme kommt kommt könig könne könnt konto köpfe kraft krank krebs kreis kreuz krieg krise krone küche kugel kunde kunst kurse kurve kurze kürze küste labor lacht laden laden läden lagen lager lange lange länge lasse lässt latte laufe laufe läuft laune leben leben lebte leder leere leere legen legte lehnt lehre leise lernt lesen lesen leser leute licht liebe liebe liebt liege liegt liest linie linke linke links liste liter lobte lockt löhne lohnt lokal lösen löste löwen lücke mache macht macht mahnt manch marke markt maske masse mauer meine meine meint meist meist menge merkt messe messi meter miete milch minus minus mitte model modus mögen monat motiv motor motto musik müsse musst müsst mutig nacht nagel nahen näher namen natur nazis neben neben nebst nehme nennt neuem neuen neuen neuer neuer neues neues nicht nicht nimmt noten nötig nutzt offen öfter ohren opfer orten osten paare packt paket panik papst parat parks passt pause pferd pfund phase pixel pläne plant platz preis prinz probe profi prüft punkt quasi quote räder radio rande rasch rasen raten rauch räume räumt recht recht reden reden redet regel regen regie reich reihe reine reise rente rolle rollt roman rosen roten roten rückt rufen ruhig runde sache sagen sagen sagte sahen sätze sauer schon schon schön schub sechs sechs seele sehen seien seine seine seite senat serie setze setzt sicht siege siehe sieht singt sinkt sinne sitze sitzt sogar sogar solch solle somit somit sonne sonst sonst sorge sorgt sowie spart spass spiel sport spürt staat stadt stahl stall stand stand starb stark start statt statt staub stehe steht stein stern stets stich stieg still stock stoff stolz stolz stopp strom stück stufe stuft sturm sturz suche suche sucht süden summe super super szene tafel tagen tages taten täter tätig teile teils teils teilt tempo tesla tests teuer teure texte thema these tiefe tiefe tiere tipps tisch titel tolle tonne toren total toten toten töten trage trägt traum traut treue tritt trotz trotz türen übrig umbau umzug unmut unser unser unten unter unter vater video viele viele villa viren virus vogel vögel volle vorab voran vorne wache waffe wagen wagen wählt wahre waren waren wären warme wärme warnt warum warum weder weder wegen wegen wehrt weile weise weist weite welle wende wenig wenig werde werke werte wesen wider wiese wieso wieso wirbt wirft wirkt wisse wobei wobei woche wofür woher wohin wohin wohnt wölfe wolle wollt womit worte wovon wuchs wucht wurde würde würde wüste zahlt zählt zähne zeige zeigt zeuge zieht ziele zielt zogen zudem zudem zügig zumal zumal zuvor zuvor zwang zweck zwölf"
.split(" ")
.map(x => x.toUpperCase());
const validGuesses = "aahhh aalen aalto aarau aaron aasee abaci abbas abbau abbey abdel abdos abdul abeba abela abels abend abend aberl abert abgab abhob abiys abkam abney abort about abruf abtei abzug achen achim achja achse achte ächzt acken acker äcker acryl activ adams adamu adars addis addon adele adept adern adham adina adler adlon admir adolf adria adyen aeets aerni aerts aesch affen after again ägäis agata agatz agder agent ägide agikb agile agius agnes agora agrar ahaus ahlen ahmad ahmed ahmet ahnen ahnen ahner ahnte ahorn aigen aires aisch ajoie ajsic akbar akeem akika akins akito akkus akman aksel akten aktie aktiv aktiv akute akute alaaf alaba alain alamo alana alarm alarm albas alben albin albis album alcan alcon alder aleix alena alert alesi alexa algen alias alibi alice alien align alina aline alisa aliti alive alken allah allee allem allem allen allen aller alles alles alles allzu allzu almen almin almke alois alpen alpha alpin alpin alpro altar altem alten alten alter alter älter altes altes altöl altos alves alvim alvin alway amann amato ambri amell amess ameti amica amine amini aminu amira amiri amman ammar ammer ammon among ampel amros amsel ämter amtes anand anbau anbei anbot anden andie andrä andre andri anett angab angel anger angst angst angus anhat anhin anhob anhui anika anime anina anita anjes ankam ankea anker anmer anmut annan annen annet annie anouk anruf ansah ansel antal antje anton antti antun anuga anvil anzog anzug aorta aorus aorus apart apeel apfel äpfel aping appel appen apple april arabi arata arauz arbil arbvg arche areal areas arena argen ärger argos arias ariel arien arike arild arjan arket armed armee armel ärmel armen armen ärmer armin armut arndt arnim aroma aroov arosa array arrow arsch artan artem arten artig artur aruba arwag arwen ärzte ärzte asadi asahi asano asche ascot asean ashot asian asien askew aslan aslin asmik aspen aspyr assad assen asset assim asten ästen aster aston astra atapu athen atlas atmen atmen atmet atmos atome attac attac attal ätzen ätzen aubin aubry audio audit auers augen auhof aukus aukus aulas aunty aures autel autor autos avant avery avira avivs avond avorb avril award axios ayala aydin aying aymen ayuso aztec azubi azure babic babis babsi babys bachs backe backe bacon badel baden baden bader bäder bades badet badia badio bafin bafin bagel bahar bahls bahnt baida baidu baier baile baird baker bakkr baksi baldi balea balfe balga balge balic balis balko bälle baloh baloo balor balou balve bamba banal banas banco bande bände bands bange bange bangs bangt banja bänke baran barca bären bares bares baris barna baron barra barry bärte barth barty barum basar basel basel basic basic basis bässe basta baten bates batka bauch baude bauen bauen bauer bauke bäume baumi baums bause baute bawag bayat bayaz bayer beach beale beame bears beate beats beben beben bebra bebte becom beeke beeko beers beete beetz begab begum beide beide beier beige beine beins beira beitz bekam bekim belag beleg belek belga bella belli belli bellt belog below belta belta belur bemer benad bench benes benfe benin benko benkö benli benni benno benny bente beppo berät berch berge berge beria berka berme bernd berne berns berra berry berta berta berti bertl beruf beruf besen beste beste beten beten beter beths betis beton betty beuel beule beuse beust beute beuth beuys bevor bevor beweg bewig beyer bezog bezos bezug bfarm bfarm bfmtv bhaga bheki bibel biber bichl biden biege biegt biene biere bieri biers biest biete biete bihac bijol bikar biken biker bikes bilal bilde bilde biles billa billa bills billy bilyk binde bingo birgt birke birne birol birte bison bisop bissl bitar bites bitte bitte bizet björn black bläck blade blake blanc blank blank blase bläst blatt blaue blaue blaze blech bleib bleib blick blick blieb bliem blies blind blini bliss blitz blobs bloch block blöde blöds blogs blond blood bloom bloss bloss blubb blues bluff bluhm blüht blume blunt bluse blute blüte bmeia bmvit bngee boals board boban bobby bobic bobis bobst boden böden boese bogen bogen bögen bogey bohan böhme böhmi bohne bohrt 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 boris borke borre börse borst borza bosau bosch bösch bosco bösel bösen bösen böser böses böses bosse bossi boten böten bouli bouna bowie boxen boxen boxer boxes boyle bozen brach bradl brady braga brain brain brain brake brand brass braue braun braun braut braut brave bravo brawn braxx break breda brede breel breen brehm breit breit breko brent brenz brest breth brett brezn brian brief briem brill bring brink brise brite britz brock broll bronx brook brose bross brote brotz brown brown bruce bruch bruck brück brüel brugg brühl bruhn bruin brumm brunn brünn bruno brust bryan bryce brych bubba buben buber buche buchs bucht bucht bucks bucur budde buddy buden buder buemi bueno buffs bügel buggy buhen bühne build bulli bulls bully bülow bulut bunde bunge bunte bunte bunte buoni buono burch burck burda bürde büren bures burgi bürgt burka burke bürki burns büros busch busen bushs busse büsst büsst büste busty buten 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 carlo carly carol carty casar cäsar casey cathy catia catie cauca causa 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 chats check checo chefs chefs chelo chief child chile chili chime china chips chloe chong chöre chose chose chott chris chrom chuck chung cider cihan cimen cimke cinde cindy circa cisco cisos citan citys civey civic civil claas claes clair clank clans clara clark clark clash class class claus clean clemm clevr click cliff climb clint clion clips clive clodi cloke cloud clown clubs clymb cnhit cnoll coach coben cobra cocos coded codes codex cofag cofoe cohen colby colin colli color colts coman combo comes conny conte conti coole cools copse coram coren cores corey corsa corse corvi coryx cosby cosmo costa coste cotar couch coups court court covax cover covid cqhhs crack craig crash 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 dabei dabei dachs dacia dadic dafne dafür dafür dagen dagon daham daher daher dahin dahme dahna daily daily dakar dalke damen damer damit damit damit dämme damms damon dampf damus dance dance dänen dania dänin danke danke dankt danni danny danso dante danyi daoud dapps daran daran daria darin darin dario darko darob darth darts darum darum dasch dasso datei daten daten dates datev datum daube dauer daveu david davie davis daviz davon davon davor davor davos davos dawei dawid dayat dayer deals death debus debüt decin decke decke deckt deepl deere degag degen degle degli dehli dehnt deich deine deine dejan dekan dekra dekra delfs delhi delhi della delle dello delon delta demae demag demar demba demir demna demon demos demut denat denen denen denis deniz denke denke denkt denkt denny dense depay depot deppe derbe derby derek deren deren derer derer derzu desax desch desto deula deute deuts deutz dever devla devon dhabi dhein dhünn diada diana diane diani dibon dicht dicke dicke dicks dider diebe diebl diego diehl diene dient dient diese diese diese diess dietz diggs dikic dilek dimap dimap dimas dimeo dimon dinge dinge dingo dioum dirks dirty disco ditib ditib dixon djask djuse dobey doboj docht dodik dogge doggs dogma doksy dokus dolby dolce dolch dolen dolic dölle dolls donau döner donja donzi doors doper doren doris dorit dorli dorna dorow dörre dörte dosen dosis dpart dpolg drach draft drage drago drags drahi draht drake drama drang drauf drauf draus dread dream dreck drehe drehs dreht drein drese dress drews drian dries drift drina drink driss dritt drive drive droge dröge drohe droht droht drops dropz druck druey druff drugs druml dsgvo duale duale dubai dubio ducke dudas dudel duden duell duemz duett duffy dufry dufte dukic dulig duman dumme dumme dünen düngt dunja dünne dunst duplo duran durch durch düren dürer dürfe dürft dürre durst dusan dusel dutar duval duvan duzen düzen duzoe dwarf dylan dyson dzeko eagle early earth ebben ebene eberl ebert ebnen ebner ebnet ecard echle echte echte eckel ecken ecker eckes ecole ecpat eddie edeka edels ederl edgar edina edita edith edlen edler efcni efron egede egger egils eging eglin egner egosr egsat egypt ehema ehlen ehmke ehren ehren ehrig ehrte ehsan eibes eicar eiche eichs eidas eiern eiert eifel eifer eigen eigne eiken eilen eilig eilig eilpe eilte eimer einar einem einem einen einen einer einer eines eines einig einig einst einst eisen eises eisig eitan eitel eitel eitle eklat eklig ekrem elahi elben elbia elden elder elena elend elend elfer elfte elfte elgin elias elife elija elina elisa elise elite eliza eljif ellen ellie ellis elmar elmas elmex eloff elser elspe elton elvis email emami emcke emden emena emily emine emirs emler emmas emmer empor empor emran emser emsig enden enden ender endes endet enemy engel engem engen engen enger enges engie enkel ennos enoch enorm enorm enten enter enzym eönnk epple equal erben erben erber erbin ercan erceg ercot erdal erden erdil erdöl ergab erhob erian erica erich erika erker erlag erlös ernst ernst ernte erpel error ersin erste erste ertan ertug ervan ervin erwin erzäh esche eseln eshop esign esken espen espig essay essen essen essen esser essig esten ester etage etats ethan ether ethik etnea etwas etwas etzel euböa euern eugen euipo eulen eupen eurac eurem euren euren eurer eures eutin evans event event evern evers every eving ewald ewers ewige exakt exakt excel exile exner extra extra exxon exxon eyach eyyes fabel faber fabia fabio fable fablf facht facil facts faden faden fäden faeez fähig fahim fahne fahre fähre fahrt fährt fails faire faire faith fakes falco falko falle falle fälle falls falls fällt fällt false fände 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 fauch fauci faule fauli fauna faury faust fazio fazit fazzi fedas feder fedez fedor fegen feger fegte fehde fehle fehlt fehlt feier feier feige feind feine felde felix fella fells fendt ferdi ferik ferne ferne feroz ferri ferse feste feste fette fette fetzt feuer fiala fibel fiber ficht ficke fidan fidel fidel field fiele fieri fiese fiese fietz fight figur filaf files filip filme films filmt filou final final finch finck finde finde finma finne finte fiona firat firma first first fisch fisch fitch fixen fixer fixes flach flach flair flaka flash flats flaut flauw fleck fleet fleht fleth fleur flick flieg flink flirt flock flöhe flood floor flops flora flori flory floss flöte flott floyd fluch flüge flugs flugs flure flury fluss flyer flynn flynt focht focus focus föhre foils fokal fokus foley folge folge folgt folie fonap fonda fonds fonte foods fööss force force förde foren formt forsa forsa forst först forty forum forza fosse föten fotos fötus fouls foyer foyth frach frage frage fragt fragt franc frank frans franz franz freak frech frede fredi fredy frees freie freie fremd fremd fresh fresh freud freue freue freut freut frick frida fries frist frith fritz fritz frizz frodl frohe frohe frohn fromm fromm front frönt frost frühe frühe frust fuchs fuchs fudan fugel fügen fügte fühle fühlt fühlt fühlt führe führt führt fulda fülle fülle füllt funda funde funds fünft funke funkt furka fürll furor fürst furth fürth furzt füsse fynup gabby gabel gaben gaben gäben gabor gadot gaedt gaggl gaida galan galau galen galia galla galle galli gamer games gamma gange gänge gangl gangs ganja ganna gänse gansi gantz ganze ganze gänze garay garde gardi gären garin garip garns garre garrn garry gasag gasen gashi gasly gasse gassi gäste gates gatin gatte gauff gavin gayle gazoo gbyte gebar gebel geben geben geber gebet gebot gecko gecko geely geers geert gegen gegen gehen gehen geher gehle gehör gehst gehts geige geist geizt gelbe gelbe gelde gelle gelte gemma gemmi gempp gemüt genau genau genie genki genom genre genth genua genug geoff geölt georg gerät gerät gerda gerer gerig gerne gerne gerty gesät geste getan getir getty getue geübt geung geyer gföhl ghana ghani ghose ghost giant gibbe gibst gibts gibts giesa giess gifts giger giggs gigio gilde gille gilli gilly ginge ginge giret girke girls girls girly gisin gitgo gitta gitte given gizeh glanz glatt glatt glaub glaub glawe gleis glenn glich glide glied globe glock gloor glory gloss glück gmund gmünd gnade 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 gotha gothe götti götze gouda grabe grabs gräbt grace grade gradl grado graef gräfe grafl grafs grahl grall gramm grand grant granz grass grata grath grätz graue graul grawe grbic great great grebe greco greco greek green gregs greif greil greiz grell grend greta grieg gries griet griff griff grifo grill grimm grind grint gripp griss griwe grobe grogl grohe groko groll gröll grolm groos gropp grosi gross grote grote groth group group grubb grube gruga grüll grund grund grüne grüne grüne grupp guard guben gucci gucke guckt guckt guede guess guete gueye guide guidi guido gülen gummi gumny gunda günes gunst gunta guoda gurke gurte gurus gusen gustl gusto gutem guten guten guter guter güter gutes gutes gutzy güven guzzi haack haard haare haase haben haben habib hacke hacke häcki hackl hackt hader haefs haema hafen häfen hafer hafte hagai hagel hagen hager hähle hahne hähne hahns haien haifa hailo haiti hajek hakan haken haken hakim hakte halbe halbe halde haley halil halit halle halle hallo hallt halme halse hälse halte hamad hamas hamel hamid hamza hanan hanau hände hands handy hanel hanes hänge hänge hängt hängt hanin hanio hanjo hanke hanks hanna hanne hanni hänni hanno hanns hanny hansa hanse hansi hapag happy happy haram hardt hardy harfe haris harit harri harrt harry harte harte härte hartl hartz hasan hasch hasen hasle häsli haspe hasse hasse hasso hasst haste hater hatte hatte hätte hätte haube haubs hauch hauck hauen hauer häuft hauke hauks häupl haupt hauri hause hause haute häute hauth havel havoc haxhi haydn hayek hayes hazel hazte hearn heart heast hebel heben hecke heckl hecla hedge heeft heels hefen hefti hegau hegel hegen heger hegte hehle heide heidi heidt heigl heike heiko heile heilt heimä heime heimo heims heine heino heint heinz heise heise heiss heist heitz helau heldt helen helfe helft helga helge hella helle hello hellt helma helme helms hemer hemmt hende hendl hengl henke henle henna henne henri henry heraf heran herat herbe herbe herde herkt herms herne heros herrn herta hertl hertz herum herzl hesse hetze hetze hetzt heuer heult heure heuss heute heute heute hexen hexer heyer hiebe hielt hiete hikel hilda hilfe hilft hilft hilko hilli hills hiltl hinab hinke hinkt hinze hinzu hinzu hiphi hirne hirte hisse hitze hiwot hlnug hobby hoben hocke hocke höcke hockt hoden hoeft hoelz höfen hofer hofer hofes hoffe hoffe hofft hofko höfli högel hoger hoghe hohem hohen hohen höhen hoher höher höher hohes hohes hohle höhle höhne hohnl holen holen höler holle hölle holly holst holte hölzl homer homes homey honda honig honjo honor hooks höper hoppe hopps hörde hören hören hörer hörig horns horse horst hörst horte hörte hörth horus hosen hotel house howes hoyer hoyos hozan hradu hsieh hsver htajc https huang huber hubig hubuc hudcr hufen hüfte hügel hugle hügli hujic hülfe hulio hülle hüllt hülse human humor humpe humpl hunde hunde hundt hünen hunts hünxe hürde hurry hurst hürth hurts husby husky husum hüten hüter hutes hütet hütte hwati hymer hymne hynde hypes iauch ibama ibena ibexa ibiza ickes icons idaho ideal ideal ideas ideas ideen idgie idlib idnow idole idols idowa idris iduna iffse igeln igitt ignaz ihnen ihnen ihrem ihrem ihren ihren ihrer ihrer ihres ihres ikeas ikone iliev ilija iliya ilkay ilkay ilkay ilkka iller ilona iluka ilves ilzer image imark imeri imhof imker immen immer immer immun imola impfe impfe impft imran inaki inban inbev incel indem indem inder indes indes index india indie indiz indra inere inews infos inler inlet innen innen inonu input inrix insel intel inter inter intus inval inzko ionen ioniq ipads ipcei ippnw ippon ipsos iraks irans irena irene iress irina irish irmer irren irrer irrte isaac iseli islam isler ismet italo italy items itmad itter iuris ivana ivica ivona ivory iyoha izmir jaaaa jabel jacek jachs jacht jacke jacky jacob jadar jader jadon jaffa jagen jagen jäger jäggi jägle jagow jagte jähes jahre jährt jaill jaime jaina jakic jakni jakob jalen jalyn jamal james jamie jandl janek janet janez janik janka janko janne janni jansa janus japan jaray jared jaren jaron järvi jason jaton jatta jauan jauch jault jaume jause javad javid jeans jecke jedem jedem jeden jeden jeden jeder jeder jedes jedes jeger jehan jeher jehle jemen jenem jenen jenen jener jener jenes jenes jenke jenna jenny jeong jerez jerry jesch jesse jessi jessy jesus jette jetzt jetzt jetzt jicha jilch jimis jimmy jinno jitem jitsi jitsu joana jobbt jobst jodie joern joesi joggt johan johna johne johns johny joint joint joker jokic jokos jolie jolly jonas jones jonge jonge jonny joona joppe jordi jorge jorio joris jorja josef josep josha josip josko jossi jovic jozef jtezt jübek jubel juckt judäa judas juden jüdin juice juist jules julia julie junge junge jungs junos junta juraj juror jurte jurys jusos juste jusuf juten jutta juwel jwana kabak kabel kabul kacke kader kadir kadri kaeme käfer käfig kager kages kahla kahle kahlo kahns kahnt kahrs kahun kainz kairo kaisa kajak kajsa kakao kalan kalff kalle kalli kalte kalte kälte kamar kamel kamen 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 karim karin karla karli karls karma karoq karst karte kasel käser kasia kasra kassa kasse kastl katar katek kater käthe kathi käthi katia katie katja katla katte katze kauen kaufe käufe kaufs kauft kawai kaweh kawhi kayla kbyte keane keanu kebab keesa kegel kehle kehre kehrt kehrt keiko keilt keime keimt keine keine keine keins keita keith kekse kelen kelly kemal kempe kempf kenan kengo kenia kenne kennt kennt kenny kenst kerbe kerbs kerem kerle kerne kerns kerry kerze kette keule keven kevin khine kickl 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 klang klapp klara klare klare kläre klaro klart klärt klaum klaus klaus klaut klaws klebt kleid klein klein klemm klenk klete kleve klick klick kliem klien klier klima klimt kling klöco klode klone kloos klopf klopp klops klose klubs kluck kluft kluge kluge klums klupp klütz knall knapp knapp knast knauf knaus knebl knick knien knies kniet kniff knill knnen knock knogl knoll knoop knopf knorr knorz knote 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 kommt kompa kompp kongo könig köniz könne könnt 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 koste kotak kotau kotzt 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 krems krenn krenz kreon kreos krepp kreta kretz kreuz kreuz krieg krier krimi kripo krise kriss krkic krohn kröll krone krone krönt kroos kropf kropp kröte kroth krude krude krüge kruit krule krull krume krumm krupp krups kruse kruso kruth kubam kuban kubas kubau kuben kubes kubin küche kudus kueng kufen kugel kühen kuhle kühle kühle kuhli kühlt kühne kuhrt kujau küken kulis kumar kunde kundl kunis kunos kunst kuntz kunze kuoni kuper kupka küren kurse kürte kurth kurti kurtz kurve kurze kurze kürze kürzt kusch küsst küste kutay kuuba kuusi kvgof kwitt kwjat kylie kyoko kyrie laack laaer laage label labor lacey lache lachs lacht lacht lacus laden laden läden lader ladet ladin ladys laers lagab lagen lagen lägen lager läger lagos lagus lähmt lahti laien lalas lamar lamas lambo lamia lamin lampe lamya lance lande lände lando lands laner lange lange länge langt lanka lanke lanuv lanze lapid laras larch larin lärms lärmt larry lasen laser laske lasse lasse lasso lasst lasst lässt lässt latam later latte latur latza laube lauda lauda lauen lauer lauer laufe laufe läufe lauft läuft läuft lauge laune laura laute laute laver lazio leaks leana least leave leben leben leber lebte lecks leden leder leeds leere leere leert legal legal legen legen legst legte lehar lehne lehne lehnt lehre lehre lehrt leibe leibt leica leide leier leigt leihe leiht leila leina leine leise leite leitl leitz lemgo lemke lenin lenkt lenkt lenne lenny lentz leoni lepke lerch lerne lernt leroy lesch lesen lesen leser lesum letzt letzt leuna leung leupi leute level leven leven levin levit lewis leyen leyte lgbti lhstv lhstv liane lichs licht licht liddy lidel lider lidia liebe liebe liebi liebt liefe liege liege liegt liegt lienz liere liese liest liest lieth lifte ligen light light ligue likar likes likör lilie lille lilli lilly lilys limes limit linas linda linde lindt liner lines linie linke linke linke links links linna linse linus linux lions lippe lirim liska liske lissi liste liszt liter liter lives lives livia livno lizzy llano lloyd lluis lobau löbau lobby löbel loben lobes lobte local lochs lockl lockt lockt locus loder loewe lofts logge logik login logos lohne lohne löhne lohns lohnt lohnt lohse loich loidl loipe loire lojze lokal lokal loket longi lonza looks loong loose lopez lorca lords lorey loris lösen lösen loser löser loses lossa löste lotet lotte lotti lotto lotus louis loved loved lover lovis löwen lowes löwin lowry loyal lozza luana lubbe lübbe lübke lucas lucci lucha luchs lucia lucic lucid lucio lucke lücke lucki lückl lucky lucky luden luder lufen lüfte lügde lugen lügen lügen luger luigi luisa luise luisi luitz lukas lukko lukov lumen lumix lunar lunch lünen lunge lunte lupft lupin lürig lusin lütge luthe lüthi lutze lutzi luwig luxus luzia luzie lvmpd lybra lynch lyons lyric lyrik lyxor maack maakt macao macau mache mache macho macht macht macke macos macos macsf mädel maden mader mäder mades mädge madig madin madre mafia magen mager mager mages maggy magic magie magix magst mähen mähen mahir mahlt mähne mahnt maier maike mails maina maine mainz mainz maire maite majer majid major makej makel maker malek malen malen maler maley malik malle malli malmö malta malte malte maman mambu mamic mamis manch manch mandl mandy manet mania manko manne manni manns manor manta mantl manus maodo marca march marco marcs marek maren marge maria mariä marib maric marie marin mario märit marke markl marko markt markt marla marne marry marta marti marty marvi marzu mäser maske mason masse masse matar match matej mateo mateu matip matte matte matth matus mauel mauen mauer mauro mäuse mavic mavis maxim mayer mazda mäzen mazin mbabu mbyte mcfit mdoro meals mebis medan media media media medic meere meers meets meeuw megan meher meide meide meien meier meike meiko meile meine meine meinl meins meint meise meist meist meitz mekka melde melek melka melle memes menas mende menge menor mensa menüs menzi merci merck meret merge merke merke merkt merle meryl meryn mesch mesec messe messe messi mesto mesut metal meteo meter meter metro metro mette meury meute meyer miami micha michi micro mieck miele miene miese miete mihai mikel mikes mikis mikks mikro milad milan milch milde milde miles miley miliz milke milko milla mills milos milow mimen mimik mimis mimte minaj minas mincu minen miner minim minko minos minsk minsk minus minus mirai mirco mirko miron misel misha misic missa misst misto mitch mitja mitoh mitte mixed mixen mixer mlens moana möbel mobil mobil mobil mobir model modul modus moers moeti mogen mögen mögen möges mogge moise moizi mokka molde molga molly momoa monat mönch monde mondt money money monot monse monte montt monza moore moose moost moped morad moral moray morde morey moria morir moris morse mörse mörth morty morzg mosel moser 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üden müder mufti 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 mürbe murch murgh murks murot mursi musaj musan müsen muser music music musik musks müsli müsse musst müsst mutes mutet mutig mutti mütze mvogo mwene myint mysql nabil nacho nacht nackt nadal nadel nader nadia nadja naeem nafes nagel nägel nagen nager nagle nagls nagte nahen nahen nähen nähen naher näher näher nähme nährt nahte 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 neben nebst nebst nedim neele neeva neffe neger nehme nehmt nehmt neige neigt neigt neise nekia nekic nelio nelly nemen nenad nenne nennt nepal nerve nervt nesch nessa nessy nette netto netto netze netzt neuem neuem neuen neuen neuer neuer neues neues neuss neuwo neuwo neven never nevis nexta nexus ngere niaid nicht nicht nicht nicka nicki nickt nicky nicyt nidal nidum niels niere niers niewo niger night nigma nigra nihad nikic nikon nikos nimes nimmt nimmt nimue ninia ninja nippt nitin nitro nivea nixon nizza nmmit nneke noack noale noble nobuo noemi noffz noise nokia nolan nolte nomad nomos nonne nooke noori nopal noppe norek norma norma north notar noten nöten notes nötig nötig notiz novak novel novum nowag nowak nozze nqmiy nreal nsame nsdap ntred nübel nueva nüsse nutze nutze nütze nutzt nützt nylon öamtc oanda obama obere obere öberg obert obhut ocean öcher ocker odell ödnis oelde oesch offen offen öffis öffne ofner öfter ögari oggau ogier ohira ohlen öhman ohren okapi okuma olafs oleds olivi olivo ollie olsen olten olymp olzem omaha omari omdat omdia omgus ommen onkel ooyen opels opera opern opfer opitz opium opoku oprah optik öqmed orban orden order ordre organ orgel orhan orion orlen örley orlik orlov oromo orpha orsay orsoy orten ortes ortet oruro osaka oscar oskar osman osram osten ostro otcqb other otmar ottes ottos outen outet owain owega owuor owusu oxfam oybin özcan ozean özlem öztas paare paars pablo pacht packs packt packt pacte padua pahde paidy paket pakts paleo palfi palle pallo pally palma palme palou pampa pampe panda panel panic panik panke panne panoz pansi panta panta paolo papas papen paper papis pappe papst parat paris paris parks parkt pärli parma parth parts party pasek pasha passe pässe passt pasta patch patel pater patil patti pauke paula pauli paulo pauls pause paust pavao pavel pavia pavlo pawel payet payne pazza pbefg peace peaks peaky pearl pears pedal peder pedri pedro peene pegel peggy peile peilt peine peker pekny pelke pembe pence pendl penis penna penne penny penny pense pentz peper pepic peppi percy perdu perez perle perry perth perus pesch petar peter petit petra petri petry petto pfade pfadi pfads pfaff pfahl pfalz pfand pfeil pferd pfiff pfiff pflug pfuhl pfund phase phone photo piano piaty picke pickl picks pieke pieks piels piers piggy pikst pilar pille pilot pilot pilze pines pinka pinke pinky pinot pints piotr piper pipes pippi pique pirat pirlo pisar pisse piste pivot pixar pixel pizza pizze place place plage plage plaid plane plane pläne plank plans plant plata plate platt platt platz platz playa plaza plebs pleso pletz plgbc ploss plötz plume plump pocas pocht poems pogba poged pohle point pokal pokel polak poldi polen 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 poste posts potro potse pötte pound power pozzo prack prada prags prägt prahl praia prall präsi prass pratt prein preis preis prenn preos press prevc price price pride priel prien pries prima prima prime 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 pumpt punks punkt puppe puppy purer purer pures purge pusht pussy puste puten puter putin putzo putzu puurs pwlan pyhra pylon pyrit qaani qatar qnaps quade quali qualm quält quara quasi quasi queen queer 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 radlt raeto rafal raffl rafft ragaz raggi ragte raguz rahim rahlf raico raids rains raisi raita rally ralph ramaj ramen rammt ramon ramos rampe ranch rande rands randy range ränge ranum rapex rapid rappi rapps rappt rarer rares raron rasch rasch rasen rasen raser rasha räson rasse rasta raste rasto ratas raten raten räten rates rätin ratio raube raubt rauch rauem rauen rauer rauer rauhe raulf rauma räume räume raums räumt raunt raupe raupp raute raves raymi razer reach react ready ready reale realm realo reben recep recht recht recma recon reden reden reder redet reese reeve regal regel regem regen regen reger reges reges regie regio regmi regte rehak rehna rehrl reibt reich reich reife reife reihe reihe reiht reime reimt reine reine reins reise reise reiss reist reitz reize reizt reker remis remmo rempp rendl renee rengg renke renne rennt rente renzi renzo repin reset resin reske ressa reste rethy rette rette reuss reute reuth revil revue rexer reyer reyna rhede rhein 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 rings ringt rinke rinne rinnt rioja risch rishi risop risse riten ritmo ritus ritzi river riyad rlaxx robak robbe röbel roben röber robin robra rocca rocco rocha roche roche rocks rockt rocky rodde rodel roden roder röder rogan rogen roger rogge rohan rohde rohem rohen roher röhle rohöl rohre röhre rohrs röhrt rojas rokas rolex rolle rolle rollo rollt roman romed romeo römer romig ronan ronen ronny rooms roque rosam rösch rosel rosen roses rosig rosin rösli rossi rosso rösti rotem rotem roten roten roter roter rotes rotes rotor rotte rotts rouen rouge rough rough rouse route rover rowan royal royal rubel ruben rüben rüber rubio ruckt rückt ruckz rudel rüden ruder rueda ruedi ruefa rüegg rufen rufen rufer rufus rügen ruger rügte ruhen ruhig ruhla rühre rührt ruhte ruiss rukla rules rülke rumba rumex rumms rumpf runde runde runge ruoss rüpel rurik ruser russe russo rüste ruten rüter rutte ruzil ryouy ryoyu ryugu ryzen saadi saale saals säbel sabir sable sabre sacha sache sachs säcke sackt sacra saded sadev sadiq safes safin säfte sagan sagen sagen sager sager säger sagst 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 sales salez salim salma salon salon salve salvo samba samek samen samih samir samra samui samus sanaa sande sands sandu sandy sanft sanka sankt sanna santa santo sanya sapri sarah sarma sarno sasha sassy satan satte satte satya sätze sauce saudi sauer sauer säuft saugt säule sauna säure sause saust saxer sayed sbisa scala scale scans scape scewc schaf schal scham schar schär schau schau scher scheu scheu schob schon schon schön schön schub schuf schuh schul scoop scott scoul scout scuol sechs sechs secit sedum seele seems segas segel segen seger sehen sehen sehne sehnt seidl seien seien seife seile seils seine seine seinr seite seitz sejan sekte selbe selby selen selge selim selke sella selor semej semih semir semke semmi senat sende senft senil senke senkt senna senne senol senta seoca seone seong seoul seper sepia seppi serbe serge sergi serie serra sertl serum sesam sette setup setze setzt setzt seuss seven 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 siege siegi siegt siehe siehe sieht sieht siena sigma signa siham sihpu sikma silas silke silke silos silva simap simba simma simon simsa sinan sinch sinem singe singh singt sinke sinkt sinne sinti sions sippe siren siria sirup sisis sissi sitch sitta sitte sitze sitze sitzt siund sjmcc skala skoda skore skype slack slate slawi slide slöba slots small small smart smart smith smoke smoor smudo snack snake snape snips snoop sobhi socar soddy soden söder soest sofia sofie sogar sogar sohle söhne sohns sojus sokol solar solch solch solid solja solle solle solls sollt somit somit somju sonac sonde songs sonia sonja sönke sonne sonnt sonny sonos sonst sonst sonys soooo sopra sören sorge sorge sorgt sorgt soros sorry sorry sorte souls sound sousa south souza sowas sowas sowie soylu space spacs spacs spahn späht spain spalt späne spann spare spark spart sparv spass späte späte späti spdji speak speck specs speed speer spezi sphen spice spiel spiel spies spiez spind spins spint spion spitz split spohr spons sport sport spötl spots spott spree spreu sprit spukt spüle spült spüre spurs spurt spürt spvgg spvgg spyra squid sreto staab staad staal staar staat stäbe stabs stach stacy stade stadl stadt stäfa staff stage stahl stahl stahr stalf stall stamm stamp stand stand stani stans starb stari stark stark starr starr stars start stasi state statt statt staub staus staut stays steak steam steck steeb steel steff stege stegs stehe steht steht steif steig steig steil steil stein stele stell steop stern stern stete stets stets steun steve steyr stich stick stief stieg stieg stiel stier stiff stift stihl stiko stiko stile still still stils stimm sting stint stipe stirb stirn stoch stock stoff stohn stöhr stoke stole stoll stolp stolz stolz stone stopp stops store störe storm stört story storz stoxx stoxx stoye stree strem streu strip strix stroh strom stube stuck stück study stufe stufe stuft stuhl stuhr stumm stumm sture sturm sturz stute style suada suben suche suche sucht sucht sucre sudan süden sugai sugar suhls suite sujet sulza summa summe sumpf sunak sünde super super süper supes suppe susan sushi suter svend sweep sweet swelt swico swift swirl swiss sword sykes synco syrer syria szabo szene szenk szöcs tabak tabea tabus tacho tacke tadao tadej tadic tafel taffe tagen tagen täger tages taghi tagte tahar tails taiwo takes takkt talks talon talos tamim tampa tande tanga tango tanja tanks tanna tanne tante tanuj tanya tanze tänze tanzt tanzt tanzu tapie tappe tappt targa tarif tarik tarnt tarot taser tasse taste tastl tatar taten taten täten täter tatha tätig taube taube taufe tauft taugt tavor taxis tbyte teams teams tebas techs techt tecne teddy teens teens tegel tegut tegut teich teigl teile teile teils teils teilt teint tekin telfs telis temiz tempi tempo temps tenji tenne tenor tepco teppe terme terra terry tesla teste tests tetra teubi teuer teuer teufl teure teure texas texte texts thain thais thang thanh thani thank thaur thaya thees theis theke thema these theus thiaw thiel thiem thies thilo think third thoma thore three three thron thuis thumb thurn thwet thyra tiana tibet tibor tichy tickt tickt tiede tiefe tiefe tiefs tiere tietz tiger tiley tilia tilla tilly times timmy timon tinte tinto tipis tipps tippt tiril tirol tisax tisch titel titus titze tnhci toben tobse tobte tocoa today toden todes toggo tojoy tokat token tokic tokio tokyo tolle tolle tölle tomac tomas tomer tomic tommy tomsk tönen tonic tonis tönis tonne tönte tools toone töpfe topft töppi toppt toran toray torch toren tores torso torte torun torzi tosso total total totem toten toten töten töten toter toter totes tötet touch tours tourt tower towns toxin trabt track tracy trade träfe träfe träff trage träge trägt trägt trail trail train trais trakt trams träne trank trans trans trapp trash traub traue traum traun traut traut trays treff treia trend trend trenn trete trete treue treue trial trias tribe trick trieb trieb trier trift trigg triki trios trips trist tritt tritt troll troms tropf tross trost trotz trotz trübe trübt truck truck truex trügt trump trupp trust truth tsang tubbo tubes tuchs tudor tuffi tufts tülay tulln tulpe tulsa tümay tumor tuner tunes tunis turbo turck türck türen turin türke turku türme turms türmt tusch tusks tutar tüten tutsi tutti tuure tvnow tvnow tvnow tweed tweet twice twins twint twist twizy twttr tyler typen typus tyson übels überm übern übers übers üblen übler übrig übrig übten übung udaya udine udnes udssr ueber ueber ufern ufert uhlig uhren uibel ukena uljas ulkig ulmen ulmer ulsan ultra umami umbau umher umweg umzog umzug under unfug ungar unger unhcr union uniqa units unity unkel unken unmut unnas unrat unrwa ünsal unser unser unser unten unten unter unter unvar unwto unzen üppig urahn urban urech urins urnen urner urtyp usaid usain usama uschi usern usher uslar usopc uster utica utoya uttar uzwil vaart vacme vader vadim vadis vaduz vaiou valie valle vally valor value valve vance vande varas varey varga varta vater väter veces vedad vedes veeva vegan vegan vegas velen velis vella velos venlo venmo venom venus veran verde verdi verge verne verti verve vespa vestl vetos vevey vevia vials vibes vicco vicky vidal video video vieja viela viele viele viert viert vieru vifor vigna vilas vilim villa vimeo vince vinci vinke vinyl viola viper viper viral viren virus visen visum vital vital vitra vitus voest vogel vögel voges vögte vogts vogue voice voigt voitl volgt volke volle volle volme volvo vorab vorab voran vorha vorig vorne vorne voser voten voten votum vraag vreni vries vural vytal waadt waage wache wache wachs wacht waden waere wafer waffe waffg wagen wagen wäger wagte wähle wähle wählt wählt wähnt wahre wahre wahrt währt waibl waits wajan walch waldi wales walls wally waltz wampe wanda wände wandt wange wankt wanne wants waqas waren waren wären wären wares warin warme warme wärme warnt warst warte warte warum warum wäsch wasen waser waste waste wastl watch watch water watts watzl wawra waymo wayne wazir weber webte wecke wecks weckt wedau wedel weder weder weerd wefer wefox wegen wegen weges wehen wehen wehle wehrt wehry wehte weich weida weide weile weils weilt weine weine weint weise weise weiss weist weisz weite weite weitz weken welby welch welke welle welle wells welpe welsh wempe wende wende wendt wenig wenig wenns wenns werbe werde werde werfe werft werft werke werks werkt werne werte werte werth werts wesel wesen weser weske wesna wespe wessi weste wette wette wewer weyer weyhe whats white white wicht wickl wider wider widme widow wieck wiege wiegt wiehe wiens wiese wiese wiesn wieso wieso wieso wight wikis wilde wilde wildi wildt wiler wiley wilfa wille willi willy winde windl winds wingo wings winkt wirbt wirde wirds wires wirft wirft wirke wirkt wirkt wirst wirte wirth wirtz wisag wisch wisla wisli wisps wisse wisst wisst witch witte witwe witze wksta wobei wobei wöber woche wodka wofür wofür wogen woger wogte woher woher wohin wohin wohle wohne wohnt wohnt wojsa wölbt wolde wolfe wölfe wolff wolke wolle wolle wolli wollt wollt wolze woman women womit womit wonne woods woody woolf woran woran worde wordt worin worin works world world worms wörns worry worst worte worth wörth worum worum wosch wovon wovor wovor wrack wrage wrath wrynn wuchs wuchs wucht wücks wuhan wuhle wühlt wulff wümme wumms wunde wunde wurde wurde würde würde würfe wurmt wurst würtz würze würzt wüste wüste wüten wütet wyler xamax xaver xenia xerox xhaka xinyi yacht yahoo yaime yakin yanar yangs yanqi yaris yates yeliz yeska yetim yigal youan young youth ystad yukon yulin yunus yusuf zaavv zabel zadic zähen zäher zähes zahir zahle zähle zähle zahlt zahlt zählt zählt zahnd zähne zankl zapag zarbl zarco zaren zarif zarka zarte zäsur zaten zaugg zäune zauns zazzo zdeno zeche zecke zehra zehrt zeige zeigt zeigt zeile zeiss zeitz zelda zelfs zelle zelte zeman zenit zepai zerch zeroe zeuge zeugt zheng zicai ziege ziehe zieht zieht ziele ziele ziels zielt ziert zipse zirka zitat zitek zitti zivil zivil zoals zofen zofft zogaj zogen zohra zolla zolle zölle zolls zollt zomer zonen zoner zones zonta zoran zorns zorro zorzi zosel zosen zoten zotig zovoo zowel zsolt zuber zucht zuckt zudem zudem zuffi zugab zügel zügen zuger zuges zugig zügig zügig zuljs zumal zumal zumas zumba zummo zunge zupke zusah zutat zutun zuvor zuvor zuzog zuzug zwang zwang zweck zweig zweit zweng zwick zwist zwölf zwölf zycie 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 daysSinceEpoch = Math.floor(new Date()/8.64e7);
const startDay = 19046;
const daysSinceStart = daysSinceEpoch - startDay + 1;
const rng = mulberry32(daysSinceEpoch);
const chosenWords = [];
for (let i = 0; i < 4; 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 = 9;
const guessed = [];
let input = "";
const data = [];
const done = [false, false, false, false];
function gameOver() {
const NUMBERS = "0️⃣1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣8️⃣9️⃣";
const ANY = "⬜";
const POSITION = "🟨";
const CORRECT = "🟩";
const DONE = "⬛⬛⬛⬛⬛";
const URL = "https://studwww.informatik.kit.edu/~s_keller/qwörtle/";
let text = "";
text += "Tägliches Qwörtle #" + daysSinceStart + "\n";
for (let i = 0; i < 4; i++) {
if (done[i]) {
text += NUMBERS.slice(done[i] * 3, done[i] * 3 + 3);
}
if (i % 2 === 1) {
text += "\n";
}
}
text += URL + "\n";
for (let i = 0; i < 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 === 0) {
text += "\n";
}
}
const textarea = document.getElementById("copyarea");
textarea.style.visibility = "visible";
textarea.value = text;
textarea.select();
document.execCommand("copy");
setTimeout(() => {
textarea.value = text; // not sure why this is needed..
textarea.select();
}, 0);
}
let keys = {};
let characters = [{}, {}, {}, {}];
function makeGradient(a, b, c, d) {
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 (a === "nope" && b === "nope" && c === "nope" && d === "nope") {
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 < 4; 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";
} else if (hints[i] === "position") {
el.className = "wrong-position cell done";
} 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 = (characters[0][c] && characters[0][c] !== "nope")
|| (characters[1][c] && characters[1][c] !== "nope")
|| (characters[2][c] && characters[2][c] !== "nope")
|| (characters[3][c] && characters[3][c] !== "nope");
if (anyNotNope || (characters[0][c] === "nope" && characters[1][c] === "nope" && characters[2][c] === "nope" && characters[3][c] === "nope")) {
keys[char].style.background = makeGradient(characters[0][c], characters[1][c], characters[2][c], characters[3][c]);
if (characters[0][c] === "nope" && characters[1][c] === "nope" && characters[2][c] === "nope" && characters[3][c] === "nope") {
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 < 4; 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 < 4; 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 < 4; 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";
}
}
}
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 < 4; pos++) {
container.appendChild(createWordle());
}
}
function createWordle() {
const x = document.createElement("div");
x.className = "wordle";
for (let i = 0; i < MAX_GUESSES; i++) {
x.appendChild(createRow(data));
}
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.className = "wide";
} else {
document.body.className = "";
}
saveLocalStorage();
}
wideOpt.addEventListener("change", setWideMode);
setWideMode();
// 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" });
}
}