Wordle Solver Pro

Wordle Solver Pro helps you with that one tricky wordle puzzle! It goes through every single english word based on the criteria you give it on your puzzle and will find all possible answers for you!

// ==UserScript==
// @name         Wordle Solver Pro
// @namespace    wordle-solver-pro
// @version      1.1
// @description  Wordle Solver Pro helps you with that one tricky wordle puzzle! It goes through every single english word based on the criteria you give it on your puzzle and will find all possible answers for you!
// @author       Your Name
// @match        https://wordlegame.org
// @match        https://www.nytimes.com/games/wordle/index.html
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
  'use strict';

  var container = document.createElement('div');
  container.style.position = 'fixed';
  container.style.top = '10px';
  container.style.left = '10px';
  container.style.backgroundColor = 'gray';
  container.style.padding = '10px';
  container.style.borderRadius = '5px';
  container.style.zIndex = '9999';

  var button = document.createElement('button');
  button.textContent = 'Solve Wordle';
  button.style.backgroundColor = 'green';
  button.style.color = 'white';
  button.style.border = 'none';
  button.style.padding = '5px 10px';
  button.style.borderRadius = '5px';
  button.style.cursor = 'pointer';

  // Add the elements to the container
  container.appendChild(button);

  // Add the container to the page
  document.body.appendChild(container);

  // Add event listener to the button
  button.addEventListener('click', function() {
    var hasGreenLetters = prompt("Is there any green letters in your puzzle? (yes/no)").toLowerCase();

    if (hasGreenLetters === "yes") {
      var grayInput = prompt("Enter the gray letters (comma-separated):");
      var yellowInput = prompt("Enter the yellow letters (comma-separated):");
      var greenPositionsInput = prompt("Enter the positions of the green letters (comma-separated):");
      var greenLettersInput = prompt("Enter the green letters (comma-separated):");

      var grayLetters = grayInput.replace(/\s/g, '').toUpperCase().split(",");
      var yellowLetters = yellowInput.replace(/\s/g, '').toUpperCase().split(",");
      var greenPositions = greenPositionsInput.replace(/\s/g, '').split(",").map(Number);
      var greenLetters = greenLettersInput.replace(/\s/g, '').toUpperCase().split(",");
    } else if (hasGreenLetters === "no") {
      var grayInput = prompt("Enter the gray letters (comma-separated):");
      var yellowInput = prompt("Enter the yellow letters (comma-separated):");

      var grayLetters = grayInput.replace(/\s/g, '').toUpperCase().split(",");
      var yellowLetters = yellowInput.replace(/\s/g, '').toUpperCase().split(",");
      var greenPositions = [];
      var greenLetters = [];
    } else {
      alert("Invalid input. Please try again.");
      return;
    }

    var wordListUrl = 'https://raw.githubusercontent.com/charlesreid1/five-letter-words/master/sgb-words.txt';

    function hasRequiredLetters(word, letters) {
      for (var i = 0; i < letters.length; i++) {
        if (word.indexOf(letters[i]) === -1) return false;
      }
      return true;
    }

    function isGreenLetterPosition(position, letter) {
      for (var i = 0; i < greenPositions.length; i++) {
        if (greenPositions[i] === position && greenLetters[i] === letter) return true;
      }
      return false;
    }

    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
      if (xhr.readyState === 4) {
        if (xhr.status === 200) {
          var wordListData = xhr.responseText;
          var wordList = wordListData.split("\n");

          var matchingWords = wordList.filter(function(word) {
            word = word.trim().toLowerCase();
            if (word.length !== 5) return false;

            var isValid = true;

            for (var i = 0; i < grayLetters.length; i++) {
              if (word.includes(grayLetters[i].toLowerCase())) {
                isValid = false;
                break;
              }
            }

            if (!isValid) return false;

            var hasYellowLetter = false;

            for (var i = 0; i < yellowLetters.length; i++) {
              if (word.includes(yellowLetters[i].toLowerCase())) {
                hasYellowLetter = true;
                break;
              }
            }

            if (!hasYellowLetter) return false;

            for (var i = 0; i < greenPositions.length; i++) {
              var position = greenPositions[i] - 1;
              var letter = greenLetters[i].toLowerCase();
              if (word.charAt(position) !== letter) return false;
            }

            return true;
          });

          if (matchingWords.length > 0) {
            alert("Possible words: " + matchingWords.join(", "));
          } else {
            alert("No matching words found.");
          }
        } else {
          console.error("Error:", xhr.status);
        }
      }
    };

    xhr.open("GET", wordListUrl, true);
    xhr.send();
  });
})();