CINXE.COM
Threepeat - OneLook
<!DOCTYPE html> <html><head><meta http-equiv=Content-Type content="text/html; charset=UTF-8"> <link href="https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible:wght@400;700&display=swap" rel="stylesheet"> <!-- Google tag (gtag.js) --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-KCYRT3J03G"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-KCYRT3J03G'); </script> <!-- <script> var googletag = googletag || {}; googletag.cmd = googletag.cmd || []; (function() { var gads = document.createElement('script'); gads.async = true; gads.type = 'text/javascript'; var useSSL = 'https:' == document.location.protocol; gads.src = (useSSL ? 'https:' : 'http:') + '//www.googletagservices.com/tag/js/gpt.js'; var node = document.getElementsByTagName('script')[0]; node.parentNode.insertBefore(gads, node); })(); </script> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2783337899867996" crossorigin="anonymous"></script> </script> --> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="apple-touch-icon" sizes="57x57" href="/apple-touch-icon-57x57.png"> <link rel="apple-touch-icon" sizes="60x60" href="/apple-touch-icon-60x60.png"> <link rel="apple-touch-icon" sizes="72x72" href="/apple-touch-icon-72x72.png"> <link rel="apple-touch-icon" sizes="76x76" href="/apple-touch-icon-76x76.png"> <link rel="apple-touch-icon" sizes="114x114" href="/apple-touch-icon-114x114.png"> <link rel="apple-touch-icon" sizes="120x120" href="/apple-touch-icon-120x120.png"> <link rel="apple-touch-icon" sizes="144x144" href="/apple-touch-icon-144x144.png"> <link rel="apple-touch-icon" sizes="152x152" href="/apple-touch-icon-152x152.png"> <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon-180x180.png"> <link rel="manifest" href="/manifest.json"> <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5"> <meta name="msapplication-TileColor" content="#da532c"> <meta name="msapplication-TileImage" content="/mstile-144x144.png"> <meta name="theme-color" content="#ffffff"> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="ol2.css?v=12"> <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css" /> <link rel="search" type="application/opensearchdescription+xml" href="https://www.onelook.com/osdf.xml" title="OneLook Dictionary Search and Thesaurus" /> <title>Threepeat - OneLook</title> <link rel="canonical" href="https://www.onelook.com/?w=threepeat1" /> <meta property="og:title" content="Threepeat: Three words, three rounds." /> <meta property="og:type" content="website" /> <meta property="og:url" content="https://onelook.com/threepeat" /> <meta property="og:image" content="https://onelook.com/threepeat/threepeat1400.png" /> <meta property="og:description" content="A daily word game from OneLook in which you complete three words at a time." /> <meta property="og:site_name" content="Threepeat" /> <meta property="og:locale" content="en_US" /> <meta property="og:image:width" content="1200" /> <meta property="og:image:height" content="630" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:title" content="Threepeat: Three words, three rounds." /> <meta namey="twitter:description" content="A daily word game from OneLook in which you complete three words at a time." /> <meta name="twitter:image" content="https://onelook.com/threepeat/threepeat1400.png" /> <link rel="stylesheet" href="/threepeat/tp.css?5"><script> function init() {} </SCRIPT> <STYLE> A:hover {text-decoration:bold; color:#FF0000;} A:active {text-decoration:bold; color:#FF0000;} </STYLE> </head> <body> <center><br><img id="titleimage" src="/threepeat/threepeat1400.png" alt="threepeat logo"><br> <div id="threepeat"></div> <div id="beacon"></div> <script src="/threepeat/libs/confettisplosion.js?4"></script> <script src="/threepeat/tp.js?4"></script> <script> const threepeat = new Threepeat("#threepeat"); function subtractOneDay(dateStr) { // Parse the input date string as a UTC date const date = new Date(`${dateStr}T00:00:00Z`); if (isNaN(date.getTime())) { return null; } date.setUTCDate(date.getUTCDate() - 1); const year = date.getUTCFullYear(); const month = String(date.getUTCMonth() + 1).padStart(2, '0'); const day = String(date.getUTCDate()).padStart(2, '0'); return `${year}-${month}-${day}`; } const doConfetti = (tries, finalTries=0)=>{ if (finalTries == 3) { confettiSplosion.start(); } else if (tries == 1) { confettiSplosion.start(10); } } const resetSelectMenu = function () { const selectMenu = document.getElementById('gameid-select'); if (!selectMenu) return; let state = null; let nextGameId = null; // return the next game to play, the latest ID that is not yet finished try { state = JSON.parse(localStorage.threepeat); } catch (e) {} if (state && state.games) { for (let i = 0; i < selectMenu.options.length; i++) { const option = selectMenu.options[i]; const value = option.value; if (!option.text.endsWith("✓")) { if (state.games.hasOwnProperty(value)) { option.classList.add("gameid-done"); // this doesn't seem to work? option.textContent = option.text + " ✓"; } else { if (!nextGameId || value > nextGameId) { nextGameId = value; } if (state.games.hasOwnProperty(value + ".1")) { option.textContent = option.text + " ⏳"; } } } } } return nextGameId; } const start = function (gamesData) { threepeat .on("roundend", (round, stats, gameData)=>{ if (round < 3) { const tries = stats.tries[round] + stats.hints[round];; const time_secs = stats.times[round] + 60*stats.hints[round]; let gameid = gameData.game_id; let suffixes = gameData.puzzles[round].suffixes.join(","); let prefix = gameData.puzzles[round].prefix; fetch(`/img/0.gif?x=threepeat_round&gameid=${gameid}&round=${round}&suffixes=${suffixes}&prefix=${prefix}&time=${time_secs}&guesses=${tries}`, {method: "HEAD"}).then(()=>doConfetti(tries)); } }) .on("gameend", (round, stats, gameData)=>{ const tries = stats.tries[round]; const finalTries = stats.tries.reduce((s,v)=>s+v); doConfetti(tries, finalTries); resetSelectMenu(); }) .on("nextgame", (gameId)=> { let nextGameId = resetSelectMenu(); if (!nextGameId) { console.log(gameId); nextGameId = subtractOneDay(gameId); } let url = nextGameId ? `https://onelook.com/threepeat/${nextGameId}` : `https://onelook.com/threepeat`; window.location.href = url; }) .focus() .start(gamesData); } // Archive dropdown $(function() { const selectMenu = document.getElementById('gameid-select'); if (selectMenu) { selectMenu.addEventListener('change', function() { const selectedGameId = selectMenu.value; window.location.href = `https://onelook.com/threepeat/${encodeURIComponent(selectedGameId)}`; }); resetSelectMenu(); } }); start([{"puzzles": [{"suffixes": ["ield", "oulder", "rink"], "prefix": "sh", "valid_words": ["shoulder", "chield", "smoulder", "shield", "afield", "shrink"], "definitions": {"shield": "Protection against physical or metaphorical attacks.", "shoulder": "Joint connecting arm to torso.", "shrink": "Reduce in size or amount."}}, {"suffixes": ["pair", "ire", "cent"], "prefix": "des", "valid_words": ["despair", "aspire", "glaire", "rehire", "precent", "concent", "squire", "entire", "expire", "umpire", "nascent", "satire", "refire", "desire", "attire", "bemire", "retire", "empire", "admire", "rewire", "venire", "percent", "descent"], "definitions": {"despair": "Loss of hope; profound sadness.", "desire": "Intense longing or wish for.", "descent": "Movement from higher to lower."}}, {"suffixes": ["eld", "ner", "ghter"], "prefix": "fi", "valid_words": ["fighter", "righter", "liner", "diner", "finer", "loner", "niner", "wield", "tighter", "caner", "boner", "honer", "tuner", "zoner", "lighter", "yield", "goner", "bield", "toner", "biner", "sighter", "saner", "inner", "field", "owner", "miner", "fjeld"], "definitions": {"field": "Area of study or expertise.", "finer": "More delicate or precise quality.", "fighter": "Combatant skilled in physical conflict."}}], "game_id": "2024-11-27"} ]); </script> <br><select name='gameid' id='gameid-select'> <option SELECTED value='2024-11-27'>November 27, 2024</option> <option value='2024-11-26'>November 26, 2024</option> <option value='2024-11-25'>November 25, 2024</option> <option value='2024-11-24'>November 24, 2024</option> <option value='2024-11-23'>November 23, 2024</option> <option value='2024-11-22'>November 22, 2024</option> <option value='2024-11-21'>November 21, 2024</option> <option value='2024-11-20'>November 20, 2024</option> <option value='2024-11-19'>November 19, 2024</option> <option value='2024-11-18'>November 18, 2024</option> <option value='2024-11-17'>November 17, 2024</option> <option value='2024-11-16'>November 16, 2024</option> <option value='2024-11-15'>November 15, 2024</option> <option value='2024-11-14'>November 14, 2024</option> <option value='2024-11-13'>November 13, 2024</option> <option value='2024-11-12'>November 12, 2024</option> <option value='2024-11-11'>November 11, 2024</option> <option value='2024-11-10'>November 10, 2024</option> <option value='2024-11-09'>November 9, 2024</option> <option value='2024-11-08'>November 8, 2024</option> <option value='2024-11-07'>November 7, 2024</option> <option value='2024-11-06'>November 6, 2024</option> <option value='2024-11-05'>November 5, 2024</option> <option value='2024-11-04'>November 4, 2024</option> <option value='2024-11-03'>November 3, 2024</option> <option value='2024-11-02'>November 2, 2024</option> <option value='2024-11-01'>November 1, 2024</option> <option value='2024-10-31'>October 31, 2024</option> <option value='2024-10-30'>October 30, 2024</option> <option value='2024-10-29'>October 29, 2024</option> <option value='2024-10-28'>October 28, 2024</option> <option value='2024-10-27'>October 27, 2024</option> <option value='2024-10-26'>October 26, 2024</option> <option value='2024-10-25'>October 25, 2024</option> <option value='2024-10-24'>October 24, 2024</option> <option value='2024-10-23'>October 23, 2024</option> <option value='2024-10-22'>October 22, 2024</option> <option value='2024-10-21'>October 21, 2024</option> <option value='2024-10-20'>October 20, 2024</option> <option value='2024-10-19'>October 19, 2024</option> <option value='2024-10-18'>October 18, 2024</option> <option value='2024-10-17'>October 17, 2024</option> <option value='2024-10-16'>October 16, 2024</option> <option value='2024-10-15'>October 15, 2024</option> <option value='2024-10-14'>October 14, 2024</option> <option value='2024-10-13'>October 13, 2024</option> <option value='2024-10-12'>October 12, 2024</option> <option value='2024-10-11'>October 11, 2024</option> <option value='2024-10-10'>October 10, 2024</option> <option value='2024-10-09'>October 9, 2024</option> <option value='2024-10-08'>October 8, 2024</option> <option value='2024-10-07'>October 7, 2024</option> <option value='2024-10-06'>October 6, 2024</option> <option value='2024-10-05'>October 5, 2024</option> <option value='2024-10-04'>October 4, 2024</option> <option value='2024-10-03'>October 3, 2024</option> <option value='2024-10-02'>October 2, 2024</option> <option value='2024-10-01'>October 1, 2024</option> </select><br><br></center><br><br><center><div id="mc_embed_shell"> <link href="//cdn-images.mailchimp.com/embedcode/classic-061523.css" rel="stylesheet" type="text/css"> <style type="text/css"> #mc_embed_signup{background:#fff; false;clear:left; font:12px; color: grey; font-family: sans-serif,arial,helvetica; max-width: 400px; border: 2px solid #ccf; border-radius: 10px; padding: 10px;} </style> <div id="mc_embed_signup"> <a href="/"><img src=/img/ol_sunburst.png width=200></a> <form action="https://civicsearch.us14.list-manage.com/subscribe/post?u=072876ecccbe8f476c67f0bdc&id=498249bb17&f_id=00625fe5f0" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank"> <div id="mc_embed_signup_scroll">Are you enjoying OneLook's word games? Subscribe to receive a weekly email with a selection of our best puzzles from the week—like <a href="/cyj">Compound Your Joy</a>, <a href="/threepeat">Threepeat</a>, and others yet to come. The first issue will be in early December.<br><br> <div class="mc-field-group"><label for="mce-EMAIL">Email Address: </label><input type="email" name="EMAIL" class="required email" id="mce-EMAIL" required="" value=""></div> <div id="mce-responses" class="clear"> <div class="response" id="mce-error-response" style="display: none;"></div> <div class="response" id="mce-success-response" style="display: none;"></div> </div><div aria-hidden="true" style="position: absolute; left: -5000px;"><input type="text" name="b_072876ecccbe8f476c67f0bdc_498249bb17" tabindex="-1" value=""></div><div class="clear"><input type="submit" name="subscribe" id="mc-embedded-subscribe" class="button" value="Subscribe"></div> </div> </form> </div> <script type="text/javascript" src="//s3.amazonaws.com/downloads.mailchimp.com/js/mc-validate.js"></script> <br> <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> <script> function ol(isForward, mode) { var x = $( "#olinput" ).val(); var url = "/"; if (isForward) { url = "/?w=" + encodeURIComponent(x) + "&ls=a"; } else { url = "/thesaurus/"; if (x !== "") { url += "?s=" + encodeURIComponent(x); } } if (mode) { url += "&" + mode + "=1"; } if (url !== "/") { window.location.replace(url); } } $(function() { last_req = ""; const body = document.body; if (typeof(Storage) !== "undefined") { const savedTheme = localStorage.getItem('theme'); if (savedTheme) { body.className = savedTheme; } else { body.className = 'light-theme'; } } $(".darkModeToggle").click(() => { body.classList.toggle('dark-theme'); body.classList.toggle('light-theme'); if (typeof(Storage) !== "undefined") { $("#olinput").append('<img src="/img/0.gif?q=hometheme_' + body.className + '">'); localStorage.setItem('theme', body.className); } }); $( "#olinput" ).autocomplete({ minLength: 3, delay: 100, open: function(event, ui) { $('.ui-autocomplete').off('menufocus hover mouseenter mouseover'); }, select: function(event, ui) { $('<input>').attr({ type: 'hidden', name: 'loc', value: 'home_ac_' + last_req }).appendTo('#olform'); $( "#olinput" ).val(ui.item.value); $( "#olform" ).submit(); }, source: function( request, response ) { var res = request.term.split(":"); var url; if (res.length > 1) { url = '//api.onelook.com/words?v=ol_gte2&max=10&k=ol_clue&sp=' + encodeURIComponent(res[0]) + '&ml=' + encodeURIComponent(res[1]); } else { url = '//api.onelook.com/sug?v=ol_gte2&k=ol_home&s=' + encodeURIComponent(request.term.replace(/[:].*/,'')); } $.ajax({ dataType: "json", type : 'Get', url: url, success: function(data) { response( $.map( data, function(item) { if (item["tags"] && item["tags"].indexOf("prop") >= 0) {return item["word"].charAt(0).toUpperCase() + item["word"].slice(1); } else return item["word"]; })) }, }); last_req = request.term; } }); }); $(function() { init(); }); </script> <br><br><br><br> </body></html>