|
// Get tables and views.
|
|
// If you've duplicated this base,
|
|
// be sure to update these values to match those in your new base.
|
|
let players = base.getTable("tblqJDGko8n795jhq");
|
|
let dates = base.getTable("tbl9m6cWLI44ntAIO");
|
|
let todaysDate = dates.getView("viwI5MZYdKyOtrQda");
|
|
let guesses = base.getTable("tblf14y6enEKHn8NW");
|
|
|
|
// log player and check eligibility to play
|
|
let player = await input.recordAsync("Choose your name from the list", players);
|
|
if (player.getCellValue('Done today?') === 1) {
|
|
output.text("You've already played Wordle today -- come back tomorrow!")
|
|
} else {
|
|
// get today's Wordle info
|
|
let todaysRecord = await todaysDate.selectRecordsAsync({
|
|
fields: ["Date", "Word", "ID"]
|
|
});
|
|
let todaysRecordId = todaysRecord.recordIds;
|
|
let todaysWordle = todaysRecord.records[0].getCellValueAsString("Word");
|
|
let wordleNumber = todaysRecord.records[0].getCellValue("ID");
|
|
|
|
// prep variables for guesses
|
|
let playOn = 1;
|
|
let numberOfGuesses = 1;
|
|
let word;
|
|
let score = "\n";
|
|
let scoreFinal;
|
|
|
|
// begin the guessing loop
|
|
while (playOn = 1) {
|
|
let validityCheck = 1;
|
|
word = await input.textAsync("Type your guess for today's Wordle");
|
|
word = word.toLowerCase();
|
|
|
|
// check to see if the word is a valid word
|
|
let response = await fetch(`https://api.dictionaryapi.dev/api/v2/entries/en/${word}`, {
|
|
method: 'GET',
|
|
headers: {
|
|
'Accept': 'application/json'
|
|
}
|
|
}
|
|
);
|
|
let data = await response.json();
|
|
let wordCheck = data.title;
|
|
|
|
// check for word length = 5
|
|
if (word.length != 5) {
|
|
output.text('This word does not have 5 letters. Please try again.')
|
|
} else if (word.match(/[^a-zA-Z]/) != null) {
|
|
output.text('This word contains invalid characters. Please try again.')
|
|
} else if (wordCheck === "No Definitions Found") {
|
|
output.text('Word not found in dictionary, please use a valid word.')
|
|
} else {
|
|
validityCheck = 0;
|
|
let roundScore = "";
|
|
|
|
// check letter by letter for placed match, misplaced match, or no match
|
|
for (var i = 0; i < word.length; i++) {
|
|
// prep for double letter contingency
|
|
let letter = word[i];
|
|
let regex = new RegExp(letter,'g');
|
|
let newstr = todaysWordle.replace(regex,'');
|
|
let wordNewstr = word.substr(0, i+1).replace(regex,'');
|
|
// console.log('Letter:' + letter);
|
|
// console.log('Word w/o Letter:' + wordNewstr);
|
|
// console.log('Wordle w/o Letter:' + newstr);
|
|
// console.log('Word Stub # of Letters:' + (word.substr(0, i+1).length - wordNewstr.length));
|
|
// console.log('Wordle # of Letters:' + (todaysWordle.length - newstr.length));
|
|
if (word[i] === todaysWordle[i]) {
|
|
roundScore = roundScore + "🟩";
|
|
} else if (todaysWordle.includes(word[i])) {
|
|
if ((word.substr(0, i+1).length - wordNewstr.length) <= (todaysWordle.length - newstr.length)) { //conditional to prevent false hints due to double letters
|
|
roundScore = roundScore + "🟨"
|
|
} else {
|
|
roundScore = roundScore + "⬛️"
|
|
}
|
|
} else {
|
|
roundScore = roundScore + "⬛️"
|
|
}
|
|
}
|
|
|
|
// add the results from the round to the score variable
|
|
score = score + roundScore + "\n"
|
|
|
|
// victory condition
|
|
if (word === todaysWordle) {
|
|
playOn = 0;
|
|
scoreFinal = "Wordle " + wordleNumber + " - " + numberOfGuesses + "/6" + score;
|
|
output.text(scoreFinal);
|
|
break
|
|
} // defeat condition
|
|
else if (numberOfGuesses === 6) {
|
|
scoreFinal = "Defeat! " + wordleNumber + " - " + "X/6" + score;
|
|
numberOfGuesses = 0;
|
|
output.text(scoreFinal);
|
|
break
|
|
} // continue condition
|
|
else {
|
|
numberOfGuesses = numberOfGuesses + 1;
|
|
output.text(roundScore);
|
|
}
|
|
}
|
|
}
|
|
|
|
// create log of Wordle attempt
|
|
let newAttempt = await guesses.createRecordAsync({
|
|
'Player': [{id: player.id}],
|
|
'Date': [{id: todaysRecordId[0]}],
|
|
"Sharable score": scoreFinal,
|
|
"Score": numberOfGuesses
|
|
})
|
|
} |