Skip to content

Instantly share code, notes, and snippets.

@ozcanyarimdunya
Last active March 21, 2022 14:58
Show Gist options
  • Save ozcanyarimdunya/c513d2b63ce91e0b8bba5eda38d25d80 to your computer and use it in GitHub Desktop.
Save ozcanyarimdunya/c513d2b63ce91e0b8bba5eda38d25d80 to your computer and use it in GitHub Desktop.
Wordle sample
import os
import random
import string
import sys
PY2 = sys.version_info.major == 2
if PY2:
input = raw_input # noqa
random.choices = random.sample # noqa
class Exit(Exception):
pass
class Letter(object):
def __init__(self, letter, isin=False, place=False):
self.letter = letter
self.isin = isin
self.place = place
def colorized(self):
return "{} {} {}".format(self.prefix(), self.letter, self.suffix())
def prefix(self):
if self.isin:
if self.place:
return "\x1b[42;1m"
return "\x1b[43;1m"
return ""
def suffix(self):
if self.isin:
if self.place:
return "\x1b[0m"
return "\x1b[0m"
return ""
class Wordle(object):
def __init__(self, word):
self.word = word
self.table = []
self.clean()
def process(self, input_):
info = []
for index, letter in enumerate(input_):
info.append(
Letter(
letter=letter,
isin=letter in self.word,
place=self.word[index] == letter,
)
)
return info
@staticmethod
def clean():
cmd = "cls" if os.name == "nt" else "clear"
os.system(cmd)
@staticmethod
def log(*args):
for each in args:
sys.stdout.write(each)
sys.stdout.write("\n")
def write(self):
self.clean()
if not self.table:
return
div = "-" * 15
self.log(div)
for each in self.table:
self.log(each)
self.log(div)
def ask(self):
while True:
answer = input("> ")
if len(answer) == 5:
break
self.write()
processed = self.process(answer.upper())
word = "".join([each.colorized() for each in processed])
self.table.append(word)
self.write()
raw = "".join([p.letter for p in processed])
if raw == self.word:
raise Exit
def main():
word = "".join(random.choices(string.ascii_uppercase, k=5))
wordle = Wordle(word=word)
try:
while True:
wordle.ask()
except (Exit, KeyboardInterrupt, EOFError):
wordle.log("\n" + word)
sys.exit(0)
if __name__ == '__main__':
main()
@ozcanyarimdunya
Copy link
Author

image

@ozcanyarimdunya
Copy link
Author

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment